Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要使用glTranslatef?为什么不改变渲染条件呢? 我用C++和OpenL编写了一个简单的PACMN游戏。我本来打算使用glTranslatef函数,但仅仅更改绘图函数使用的单词似乎更简单。我想知道,你为什么要/应该使用glTranslatef_C++_Opengl_Sdl - Fatal编程技术网

为什么要使用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)