为什么要使用glTranslatef?为什么不直接更改渲染词呢
Why use glTranslatef? Why not just change the rendering co-ords?
我正在用OpenGL和SDL用C++制作一个简单的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时,当前模型视图矩阵将替换为M_current*M_translation。
您的代码可以有效地对提交到GL的顶点执行额外的平移,但与向x坐标添加恒定偏移不同,可能会有额外的转换,如旋转、缩放,甚至可能有一个或多个已编码在当前MODELVIEW矩阵中的平移。
所以不,除非你当前的MODELVIEW矩阵不是恒等式,否则两者通常是不等价的。
但是,如果您的唯一意图是平移顶点并且不再更改位置,则可以添加恒定偏移。
如果您只需要平移,则可以在着色器内部无任何问题地进行平移。通过这种方式,您可以通过统一动态地更改偏移。如果您添加了一个常量偏移并将数据上传到VBO,然后需要再次更改,则需要更新缓冲区,这只是对带宽和内存事务的不必要浪费。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为"adjacent"变量赋值时出现问题
- C++为构建时间获取QDateTime的可靠方法
- 努力将整数转换为链表。不知道我在这里做错了什么
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 为char数组调整zlib-zpipe
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 如何在c++中为模板函数实例创建快捷方式
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- #为""定义宏;静态";针对不同的上下文
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什