我有一个小问题,我做了一个非常基本的VBO立方体。 它有效,但是当我试图移动它(glTranslatef)时,它会变得混乱。
代码: 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);
}
}
}
答案 0 :(得分:1)
我认为,问题在于您使用glTranslate
。
作为一个例子,我们有3个立方体。我们希望在(0,0,0)
,(1,0,0)
,(2,0,0)
绘制它们。根据您对glTranslate
的使用,将发生以下情况:
Cube 1
将在(0,0,0)
时抽取,因为glTranslate(0,0,0)
已被吸引。
Cube 2
将在(1,0,0)
时抽取,因为glTranslate(1,0,0)
已被吸引。
Cube 3
将在(3,0,0)
时抽取,因为glTranslate(2,0,0)
已被吸引。
glTranslate
从当前矩阵转换而不是原点。因此,您需要在每次调用(0,0,0)
时结束时将矩阵重置为原点VBOrender
。所以:
{
glTranslate(x,y,z);
// ...
glTranslate(-x,-y,-z);
}
我建议使用某种矩阵堆栈或创建自己的矩阵堆栈,以避免将来出现类似问题。