glTranslatef沿对角线移动,而不是在主轴上移动
glTranslatef moves diagonally instead of on major axes
我想在按键时在x轴上移动我的对象。但它看起来像是对角线移动(左右上下)这是我的代码:按键代码 :
switch(key)
{
case 'a':
x++;
break;
case 'b':
x--;
break;
}
在OpenGL部分:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30, 1 , 1 , 1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(100, 100, 100, 0, 0, 0, 0, 1, 0);
glTranslatef(x;0,0);
为什么glTranslatef工作得那么奇怪,我该如何解决这个问题?谢谢。
你很可能在翻译之前轮换。这将旋转整个坐标空间,您的"沿 x 轴平移"实际上将完全不同。
将来,请确保平移、缩放,然后旋转。这样,每个转换都将执行您的预期操作,而不会被先前的转换所操纵。我建议你多研究一下矩阵、坐标空间和 OpenGL。
此外,glTranslatef和其他矩阵堆栈函数已被弃用。看看现代的OpenGL。
编辑:
gluLookAt 做一个旋转来面对看点。因此,涉及轮换。如果您不想要这个,请切换它们。此外,这不是您的完整代码,它缺少glMatrixMode调用。
相关文章:
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- MSVC将仅移动结构参数解释为指针
- 自定义先决条件对移动分配运算符有效吗
- 返回值优化:显式移动还是隐式
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 可以使用移动语义更改或改进此C++代码吗?
- 使lambda不可复制/不可移动
- c++在使用指针时移动语义
- 将QGraphicsItem的移动区域限制在多边形区域内
- SendInput()鼠标移动计算
- 按值 C++ 返回时进行双倍移动
- 移动二维数组中的字符
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 安全到标准:移动会员?
- glTranslatef沿对角线移动,而不是在主轴上移动