一面(2020.2.24)
《一路向前》,qt写的2D横板闯关游戏
- 玩家和地形怎样判断碰撞?碰撞框
- 碰撞框是怎么判断的?通过中心点连线距离与半径和/边长和判断的,也可以通过中心点连线投影到x轴上
- 为什么是x轴?如果是三维呢,投影到哪个轴?…各个轴上都投影一下,然后分别进行判断…
- 玩家怎么进行跳跃?模拟重力,用v=v0+at这个公式
- 跳跃怎么判断是落地了呢?用碰撞框
- 如果不是用碰撞框怎么判断?给y轴设下限,针对《一路向前》这种简单的,只有一个平坦地形而言
- 高速穿透怎么判断?如果用unity的话,可以在rigidbody里设置collision detection为dynamic continuous进行实时碰撞检测。
- 在qt这个环境下呢?使地形的mass质量很大。
- 道具那些是怎么存储的?直接用全局变量的文件
- 怎么控制速度呢?也是用全局变量,来调参数…
计算机图形学
- 你学过OpenGL,怎么进行渲染的呢?应用程序(准备数据、设置渲染状态、调用drawcall),几何变换(各个坐标系的变换),光栅化
- 坐标系变换具体是怎样的?model变换,view变换,(规范化投影变换,透视除),裁剪,投影到viewport窗口。是从模型坐标系->世界坐标系->眼睛坐标系->规范化设备坐标系->裁剪坐标系->window坐标系->viewport窗口坐标系
- 是怎样实现这些变换的?矩阵乘
- 为什么要用齐次坐标系?平移不能进行矩阵乘,如果作为系数的矩阵可以连乘,则后期对不同顶点的计算可以简化。
- 怎么使一个图形显示在屏幕上的?加载顶点数据(顶点坐标、法向量、纹理坐标),然后通过顶点着色器和片元着色器进行渲染。
- 怎么通过着色器进行渲染的?绑定到uniform变量,如纹理单元绑定到uniform变量,然后纹理对象绑定到纹理单元
- 讲讲构造函数和析构函数。构造函数初始化类,析构函数释放内存,如new创建的内存空间
- 值类型和引用类型的区别?
- 知道哪些数据结构呢?栈、队列、hash表等等
- 怎么用两个栈实现队列?
- 对于构造函数和析构函数,子类和父类的顺序
二面(2022.3.3)
《一路向前》,qt写的2D横板闯关游戏
- 代码量多少?忘了,大概3000-5000
- 有用什么设计模式吗?
- 玩家怎么左右移动?…用了qt类似于input监听左右键
- 为什么input就能实现左右呢?原理有了解吗?…
- 玩家和地形怎样判断碰撞?
- 碰撞框是怎么判断的?
- 怎么判断落地/在地面上?
- 火焰,用了贴图,要怎么实现燃烧、喷粒子的效果?渲染…
- 玩家用的gif,gif动画是什么动画呢?
- 玩家用的gif实现动态动画,怎么实现的呢,原理是怎么实现的?
计算机图形学
- 你学过OpenGL,渲染管道说一下。
- 坐标系变换具体是怎样的?
- 从世界坐标系怎么变到眼睛坐标系的?view变换。
- 具体操作说一下?摄像机的坐标系原本是跟世界坐标系重合,然后移动摄像机,再旋转摄像机两个轴,使摄像机z轴为指向场景内容的方向。
- z轴没错,那坐标系整个是怎么判断的呢?还有一个朝上的方向,通过法向量,也就是叉乘获得另一个轴
- 是怎样实现这些变换的?矩阵乘
- 为什么要用齐次坐标系?
- 怎么使一个图形显示在屏幕上的? 加载顶点数据(顶点坐标、法向量、纹理坐标),放到VAO、VBO缓存上,绑定纹理对象,用shader的draw渲染。
- 说到法向量,你了解吗?
- 最后像素值显示的时候,插值是怎样的呢?高洛德着色是先各顶点计算光照,计算颜色,然后通过插值。
- 怎么插值的?通过点在两个顶点连线上的位置,然后RGB权重分配给该点。
- 颜色是这样线性插值的,那法向量怎么插值呢?…
- shader程序是怎么绑定到引擎上的呢?当时是封装了一个shader类进行加载…
- 具体是怎么实现的呢?通过什么函数?…
- OpenGL为什么需要各种优化,比如shader程序那些?比如mipmap,lod
- 既然讲了lod,说一下lod。
- 回到刚才的问题,为什么需要优化?减少内存开销…
计算机网络
- 你学过计网这门课,讲一下qq关于TCP和UDP是怎样的?像文件传输,是用TCP,qq电话、qq视频是用TCP。
- 为什么?文件传输需要稳定的数据包,少了一两个后可能会造成语义的很大偏差。但qq视频,如果帧数大于30,少传一两帧,但只要稳定在30帧左右,就能看到连续的画面,所以可以接受不稳定的丢包现象。
- 那像qq视频,怎么进行优化?引入TCP的可靠机制,比如重传、窗口、拥塞控制等【TCP和UDP混合使用?】
- 传输时,怎么进行网络控制呢,比如网络堵塞怎么办?…通过变量实时检测网络的拥塞程度…
- 游戏中,很多用UDP是为什么?为了系统性能,渲染效率要更高…
图像处理基础
- 你学过图像处理基础这门课,有在游戏中应用到哪些知识吗?暂时没有…图像处理基础主要学了图像的模糊、增强等。
- 说到图像模糊,怎么实现的呢?通过模板,然后进行矩阵相乘。
- 有什么处理图像模糊的算法吗?..不知
3D游戏引擎架构设计
- 这门课学什么的?学游戏引擎的架构,如场景管理、场景渲染、资源管理、角色动画等等
- 那知道unity的引擎架构吗?…这门课举例的OGRE和panda3D…unity不知道
- panda3D是开源引擎,有看过它的源代码吗?没有,但是有上官网文档看它的API和类设计。
- 对于STL有了解吗?vector、list这些
- vector、list的区别。
- 左值和右值的区别
- 左值有什么优势吗?
- 如果一个函数返回值的类对象,是左值还是右值?
- 编译的过程(编译原理)
- new一个对象的具体过程是怎样的?在堆上创建对象实例…
- 有没有接触服务器的连接?没有做过联网的游戏…
- 平时了解游戏行业吗?或者游戏行业的走向、市场?平时会看b站的游戏分享…现在游戏多是娱乐性的,觉得功能游戏比如模拟、教育等,还有很大的发展空间。游戏比如原神、逆水寒,现在这类3D开放型世界比较受欢迎。
- 如果有机会,什么时候可以上岗?一个月后就可以
总结
- 人生中第一次面试,一面答的比较完整,也比较轻松。二面很多没答上来…很多是问关于原理的。
- 二面的时候不知道为什么…有点紧张,甚至自我介绍都有点卡卡的,傻住了,感觉一面面试官比较好,呜呜┭┮﹏┭┮,因为对于我不会的会解答一二,会学到一些知识,而且没那么紧张,像交流讨论一样。
- 不会也别尬,记得全程微笑!多么痛的领悟!!!不要抿嘴!!!!
|