我有一个小问题,我做了一个非常基本的VBO立方体。它可以工作,但是当我尝试移动它(glTranslatef(时,它会变得混乱。
图像: https://i.stack.imgur.com/9RcEo.jpg
法典: http://pastebin.com/hKp0u0QQ
为什么会这样?此外,如果有人看到纹理问题的解决方案,那将是很好的:)
感谢您阅读:)
从评论中包括以进行澄清
我正在使用 3 个 for 循环来生成一个大立方体 (16*16*16( 但他们的位置搞砸了:/
for (int x = 0; x < 16; x++)
{
for (int y = 0; y < 16; y++)
{
for (int z = 0; z < 16; z++)
{
VBOrender(x, y, z);
}
}
}
我相信,问题来自您对glTranslate
的使用。
例如,我们有 3 个立方体。我们希望将它们画在(0,0,0)
、(1,0,0)
、(2,0,0)
。根据您对glTranslate
的使用,将发生以下情况:
Cube 1
将在调用glTranslate(0,0,0)
时在(0,0,0)
处绘制。
Cube 2
将在调用glTranslate(1,0,0)
时在(1,0,0)
处绘制。
Cube 3
将在调用glTranslate(2,0,0)
时(3,0,0)
绘制。
你有没有发现出了什么问题?
glTranslate
是从当前矩阵转换而来的,而不是原点。因此,您需要在每次调用VBOrender
结束时将矩阵重置回原(0,0,0)
。所以:
{
glTranslate(x,y,z);
// ...
glTranslate(-x,-y,-z);
}
我建议使用某种矩阵堆栈或创建自己的矩阵堆栈,以避免将来出现此类问题。