gpt4 book ai didi

c++ - 为什么要使用 glTranslatef?为什么不直接更改渲染坐标?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:45 26 4
gpt4 key购买 nike

我正在使用 C++ 使用 OpenGL 和 SDL 制作一个简单的 Pacman 游戏。我打算使用 glTranslatef 函数,但仅更改绘图函数使用的坐标似乎更简单。我想知道,你为什么/应该使用 glTranslatef

这里有一个简单的例子,既有 glTranslatef 又有简单地改变坐标

glPushMatrix()
glTranslatef(10,0,0)
draw()
glPopMatrix()

//Assuming the draw function took co-ords
draw(x+10 ,y ,z)

我唯一的猜测是它们实际上是相同的,这只是偏好。能教教我吗?

编辑

请注意,我只是在谈论翻译功能。关于缩放和旋转的一切都是无关紧要的,我只是在谈论翻译。 (这是因为没有 glTranslatef 函数翻译很容易,而其他两个没有它们的函数更复杂)

最佳答案

在传统的 OpenGL 矩阵操作命令中,例如 glTranslate,更改当前位于所选矩阵堆栈顶部的矩阵。

例如,当您选择 MODELVIEW 作为当前堆栈并调用 glTranslate 时,当前模型 View 矩阵将替换为 M_current * M_translation。

您的代码有效地对提交给 GL 的顶点执行了额外的转换,但是,与向您的 x 坐标添加常量偏移量相比,可能会有额外的转换,例如旋转、缩放,甚至可能已经编码在一个或多个转换中您当前的 MODELVIEW 矩阵。

所以不,除非您当前的 MODELVIEW 矩阵不是恒等式,否则两者通常不等价。

但是,如果您的唯一目的是平移您的顶点并且不再改变位置,您可以添加一个常量偏移量。

如果您只需要转换,您可以在着色器中毫无问题地完成。这样您就可以通过制服动态更改偏移量。如果您添加常量偏移并将数据上传到 VBO,之后需要再次更改它,则需要更新缓冲区,这只是对带宽和内存事务的不必要浪费。

关于c++ - 为什么要使用 glTranslatef?为什么不直接更改渲染坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com