-4

我正在尝试使用 OpenGl 功能在 C++ 中绘制一个实心立方体,但我想将它绘制在所需的位置,例如glVertex3f(20,5,-35). 如何在给定位置绘制一个实心立方体?

4

2 回答 2

2

glTranslatef(x, y, z)。谷歌一下,我想也有2D版本。但这会将参考帧从堆栈中转换出来。如果需要设置更复杂的转换,则需要调用 glpopmatrix 和 glpushmatrix。小心那些拼写和用法。

于 2012-05-18T19:04:05.690 回答
2

要匹配您的问题并在 OpenGL(兼容性配置文件)中绘制立方体,您可以使用以下代码:

    void drawCube(float x, float y, float z) 
    {
    glBegin(GL_QUADS); 
    glVertex3f(-1.0f+x, -1.0f+y, -1.0f+z);
    glVertex3f(1.0f+x, -1.0f+y, -1.0f+z);
    glVertex3f(1.0f+x, 1.0f+y, -1.0f+z);
    glVertex3f(-1.0f+x, 1.0f+y, -1.0f+z);

    glVertex3f(-1.0f+x, -1.0f+y, -1.0f+z);
    glVertex3f(-1.0f+x, -1.0f+y, 1.0f+z);
    glVertex3f(-1.0f+x, 1.0f+y, -1.0f+z);
    glVertex3f(-1.0f+x, 1.0f+y, 1.0f+z);

    glVertex3f(-1.0f+x, -1.0f+y, -1.0f+z);
    glVertex3f(-1.0f+x, -1.0f+y, 1.0f+z);
    glVertex3f(1.0f+x, -1.0f+y, 1.0f+z);
    glVertex3f(1.0f+x, -1.0f+y, -1.0f+z);

    glVertex3f(-1.0f+x, -1.0f+y, 1.0f+z);
    glVertex3f(1.0f+x, -1.0f+y, 1.0f+z);
    glVertex3f(1.0f+x, 1.0f+y, 1.0f+z);
    glVertex3f(-1.0f+x, 1.0f+y, 1.0f+z);

    glVertex3f(-1.0f+x, -1.0f+y, 1.0f+z);
    glVertex3f(1.0f+x, -1.0f+y, 1.0f+z);
    glVertex3f(1.0f+x, 1.0f+y, 1.0f+z);
    glVertex3f(-1.0f+x, 1.0f+y, 1.0f+z);

    glVertex3f(-1.0f+x, 1.0f+y, -1.0f+z);
    glVertex3f(-1.0f+x, 1.0f+y, 1.0f+z);
    glVertex3f(1.0f+x, 1.0f+y, 1.0f+z);
    glVertex3f(1.0f+x, 1.0f+y, -1.0f+z);

    glEnd();
     }

我不推荐这个功能,而是使用glTranslatef(x, y, z)另一个答案中描述的解决方案。喜欢这个功能:

    void drawCube(float x, float y, float z) 
    {
        glPushMatrix();
        glTranslatef(x, y, z);

        glBegin(GL_QUADS); 
        glVertex3f(-1.0f,-1.0f ,-1.0f);
        glVertex3f(1.0f, -1.0f, -1.0f);
        glVertex3f(1.0f, 1.0f, -1.0f);
        glVertex3f(-1.0f, 1.0f, -1.0f);

        glVertex3f(-1.0f, -1.0f, -1.0f);
        glVertex3f(-1.0f, -1.0f, 1.0f);
        glVertex3f(-1.0f, 1.0f, -1.0f);
        glVertex3f(-1.0f, 1.0f, 1.0f);

        glVertex3f(-1.0f, -1.0f, -1.0f);
        glVertex3f(-1.0f, -1.0f, 1.0f);
        glVertex3f(1.0f, -1.0f, 1.0f);
        glVertex3f(1.0f, -1.0f, -1.0f);

        glVertex3f(-1.0f, -1.0f, 1.0f);
        glVertex3f(1.0f, -1.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, 1.0f);
        glVertex3f(-1.0f, 1.0f, 1.0f);

        glVertex3f(-1.0f,-1.0f ,1.0f );
        glVertex3f(1.0f, -1.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, 1.0f);
        glVertex3f(-1.0f, 1.0f, 1.0f);

        glVertex3f(-1.0f, 1.0f, -1.0f);
        glVertex3f(-1.0f, 1.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, -1.0f);
        glEnd();

        glPopMatrix();
    }

这个功能远非完美,但应该足够了。快乐编码!

于 2012-05-18T20:02:40.700 回答