我敢肯定,不仅对此有1个答案,而且游戏引擎实际上是在改变内存中的 vector ,还是使用gltransformation?因为一直推送和弹出矩阵效率低下,但是如果您不断修改顶点,就无法使用显示列表。所以我想知道总体上是如何完成的。谢谢

最佳答案

取决于您的目标。

通过设置矩阵可以移动永不更改的对象(也可以使用glRotatef/glTranslatef等实现此目的)。当然,它比逐个顶点转换对象更快。对象存储在DisplayList,VertexArray或VBO中。您可以每次使用glVertex *命令发送整个对象,但是如果对象从不改变,则不需要这样做。

字符(蒙皮/已绑定(bind))使用多种矩阵进行转换,通常由顶点着色器处理。您可以根据需要在CPU上执行此操作,但是除非您拥有非常先进的装配/蒙皮引擎,否则就不需要这样做。

无法在视频卡上完全执行的计算是在CPU上执行的。通常是粒子系统,布料和过程几何,有时是阴影(用于使用模板阴影计算阴影体积)。此类对象通常至少部分存储在内存中,并在CPU上执行转换。这严格取决于硬件。根据视频卡和OpenGL版本的功能,可以在视频卡上执行部分或全部这些任务(不涉及CPU),但并非总是如此。例如,通常无法在GPU上为过程几何(即拓扑会改变每个帧以及顶点位置)构建阴影体积。但是,有一些技巧可以避免这种情况,并且将来的版本可能会改变情况。

08-26 20:10