VBO职位问题OpenGL,C ++

时间:2014-04-15 17:24:48

标签: opengl vbo

我有一个小问题,我做了一个非常基本的VBO立方体。 它有效,但是当我试图移动它(glTranslatef)时,它会变得混乱。

图:     http://imgur.com/8mhQm40

代码:     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); 
        } 
    } 
 } 

1 个答案:

答案 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);
}

我建议使用某种矩阵堆栈或创建自己的矩阵堆栈,以避免将来出现类似问题。