glTranslate和glRotate未按预期工作
glTranslate and glRotate not working as expected
我使用glRotate和glTranslate函数来围绕模型本身旋转。当我运行我的程序时,我的模型会围绕它旁边的一个点旋转
private static final float[] mesh = {
-0.5f, 0.5f,-0f,
-0.5f, -0.5f, -0,
0.5f, -0.5f, 0f,
0.5f, 0.5f, 0f,
-0.5f, 0.5f,-1f,
-0.5f, -0.5f, -1f,
0.5f, -0.5f, -1f,
0.5f, 0.5f, -1f,
};
private static final byte[] indices = {
0, 2, 1,
0, 3, 2,
1,2,6,
6,5,1,
4,5,6,
6,7,4,
2,3,6,
6,3,7,
0,7,3,
0,4,7,
0,1,5,
0,5,4
};
这是我旋转模型的函数:
glRotatef(rotation.x,1,0,0);
glRotatef(rotation.y,0,1,0);
glRotatef(rotation.z,0,0,1);`
我正在使用LWJGL,但我可以很好地阅读C++。
由于您的代码还不完整,我不得不猜测一下,但我怀疑您做了以下操作。
你在z方向上做了0.5的平移,使你的物体居中或围绕原点,然后你应用旋转。期望它围绕现在位于对象内的原点旋转。有道理,但不幸的是OpenGL不是这样工作的。
当你平移物体时,整个坐标系都会随之平移。所以当你绕原点旋转时,原点仍然是物体旁边的一个点。
你必须颠倒顺序。因此,首先旋转对象,然后平移对象。请注意,当你旋转对象时,坐标系也会随之旋转,因此无论你旋转了多少对象,你需要平移的量和方向在z方向上都是0.5。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- glTranslate和glRotate未按预期工作