面经--龙图游戏客户端开发一面

这篇博客主要涉及图形渲染面试中的常见问题,包括二维向量分解、点在三角形内的判断方法、渲染管线的三个阶段以及几何变换等。还探讨了阴影实现、链表环检测的算法,并解释了点乘的几何意义。内容涵盖了计算机图形学的基础知识和实际应用。
摘要由CSDN通过智能技术生成

由于我投递的简历中有关渲染的部分所以面试题有一点偏向渲染的方向,仅供参考。
1、如何求得二维平面内任一向量的x轴和y轴方向上的向量
2、如何判断一个顶点是在三角形内还是三角形外。(不止一种方法)

  • 内角和法:连接点P和三角形的三个顶点得到三条线段PA,PB和PC,求出这三条线段与三角形各边的夹角(用点乘来求得角度),如果所有夹角之和为180度,那么点P在三角形内,否则不在。
  • 同向法:将点P与某个角连接,求该向量与两角连接形成的向量的叉乘得到的向量,依次对三个角进行计算,并且按照相同的方法,最终得到三个向量,如果三个向量的方向相同则说明点P在三角形内部,反之只要有一个向量的方向与其余的不同则不在三角形的内部。
  • 重心法:我们可以以三角形的某个角作为标准,则另外两个角可以表示为该角在某个方向上移动得到。而三角形内部的任意点也就可以表示为标准点沿着某一方向的移动,而这个方向可以由两条三角形边表达出来。所以如果点P可以由这个公式表示 P = A + u * (C – A) + v * (B - A) ,并且u>=0,v>=0,(u+v)<=1,则点P在三角形内部,如果不满足条件则不在三角形内部。
    如果u=0,v=0则P=A;
    如果u=0,v=1则P=B;
    如果u=1,v=0则P=C;
    当u+v=1时,表示P点在BC边上,所以如果P是三角形内部的点则应该u+v<=1

3、渲染管线
三个阶段:应用阶段、几何阶段、光栅化阶段
应用阶段:

  • 准备场景数据,做粗粒度剔除
  • 设置渲染的状态
  • 调用drawcall

几何阶段:

  • 顶点着色器:处理输入的顶点信息,进行变换到裁剪空间
  • 曲面细分着色器:细分图元
  • 几何着色器:产生更多的图元
  • 裁剪:如果在摄像机视野外的就直接丢弃,如果在视野范围内外都有的部分就需要裁剪留下可见的部分
  • 屏幕映射:将裁剪空间转换到屏幕空间,裁剪空间是[-1,1]的区域内,转换到2维屏幕空间里。

光栅化阶段:

  • 三角形设置:根据之前的顶点,计算出三角形的边界
  • 三角形遍历:遍历图元,计算哪些图元是在三角形的内部。
  • 片元着色器:对需要渲染的图元进行着色等
  • 逐片元操作:修改颜色、深度缓冲、进行混合等等操作。

4、从模型空间到裁剪空间经过几次变换
模型空间-世界空间-视角空间-裁剪空间
5、如果将一个点从模型空间变换到世界空间
世界坐标下的点也就是相对于原点的偏移,我们可以得到在模型空间下将世界坐标的原点变换到模型空间的原点的变换矩阵,这个变换矩阵的逆变换矩阵就可以表示世界空间下,模型空间的原点从世界坐标原点变换得到得到。
6、阴影是如何实现的
(1)把摄像机放在光源进行光栅化得到一张存储深度信息的纹理图
(2)从真相机的位置进行光栅化,如果大于纹理图在该点的深度,则说明处于阴影中
7、如何判断一个链表有没有环
(1)穷举:遍历链表,记录被遍历到的数据,如果有重复的说明有环
(2)用哈希表存储:如果遍历到的数据已经存储过则有环
(3)快慢指针:两个指针指向头节点,一个指针一个一个遍历,一个指针两个两个遍历,如果指针指向的值有相同的时候,说明有环,否则没有环。
8、点乘的几何意义
得到一个向量在另一个向量上的投影,表示两个向量的相近程度,值越大越相近,值越小越不相近

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值