为什么要使用glTranslatef?为什么不改变渲染条件呢? 我用C++和OpenL编写了一个简单的PACMN游戏。我本来打算使用glTranslatef函数,但仅仅更改绘图函数使用的单词似乎更简单。我想知道,你为什么要/应该使用glTranslatef
这里有一个快速的例子,说明了为什么要使用glTranslatef?为什么不改变渲染条件呢? 我用C++和OpenL编写了一个简单的PACMN游戏。我本来打算使用glTranslatef函数,但仅仅更改绘图函数使用的单词似乎更简单。我想知道,你为什么要/应该使用glTranslatef,c++,opengl,sdl,C++,Opengl,Sdl,这里有一个快速的例子,说明了glTranslatef和简单地更改co-ords glPushMatrix() glTranslatef(10,0,0) draw() glPopMatrix() 或 我唯一的猜测是它们实际上是一样的,这完全是偏好。你能启发我吗 编辑 请注意,我只是在谈论翻译功能。关于缩放和旋转的所有内容都是无关的,我只是在谈论翻译。(这是因为在没有glTranslatef函数的情况下,翻译很容易,而其他两个函数在没有它们的函数的情况下更复杂)在传统OpenGL矩阵操作命令中,例
glTranslatef
和简单地更改co-ords
glPushMatrix()
glTranslatef(10,0,0)
draw()
glPopMatrix()
或
我唯一的猜测是它们实际上是一样的,这完全是偏好。你能启发我吗
编辑
请注意,我只是在谈论翻译功能。关于缩放和旋转的所有内容都是无关的,我只是在谈论翻译。(这是因为在没有
glTranslatef
函数的情况下,翻译很容易,而其他两个函数在没有它们的函数的情况下更复杂)在传统OpenGL矩阵操作命令中,例如glTranslate,更改当前位于所选矩阵堆栈顶部的矩阵
例如,当您选择MODELVIEW作为当前堆栈并调用glTranslate时,当前MODELVIEW矩阵将替换为M_current*M_translation
您的代码可以有效地对提交到GL的顶点执行额外的平移,但与向x坐标添加恒定偏移不同,可能会有额外的变换,如旋转、缩放,甚至可能有一个或多个平移已编码在当前MODELVIEW矩阵中
因此,不,除非您当前的MODELVIEW矩阵不是标识,否则这两者通常是不等价的
但是,如果您的唯一目的是平移顶点,并且不再更改位置,则可以添加恒定偏移
如果您只需要翻译,则可以在着色器中进行翻译,而不会出现任何问题。通过这种方式,您可以通过统一设置动态更改偏移。如果添加恒定偏移量并将数据上载到VBO,然后需要再次更改,则需要更新缓冲区,这对带宽和内存事务是不必要的浪费。是否知道调用glTranslate,glRotate和glScale改变maxtrix堆栈,而只是向某个坐标添加一个偏移量,不会吗?是的,但我没有想到这一点。所以你指出,通过改变当前矩阵,你可以移动/旋转/缩放在该矩阵中绘制的所有内容,对吗?你绘制的所有内容都会乘以madelview矩阵,所以在移动/旋转/缩放调用之后,绘制的所有内容都会受到这些变换的影响。你可以看看这个:确切地说,这将简化移动/旋转/缩放许多对象。谢谢你们指出这一点。
//Assuming the draw function took co-ords
draw(x+10 ,y ,z)