2012-05-18 90 views
-4

我想用OpenGl功能在C++中绘制一个坚实的立方体,但是我想将它绘制在期望的位置,例如glVertex3f(20,5,-35)。我如何在给定的位置绘制一个立方体?C++中的OpenGl实体立方体

+1

1.你有什么试过的? (告诉我们代码!) 2.您在哪里遇到问题? – tzaman

+1

添加到什么tzaman说:http://mattgemmell.com/2008/12/08/what-have-you-tried/ – Samveen

回答

2

glTranslatef(x,y,z)。谷歌它,我认为也有2D版本。但是这会将参考帧转换为堆栈。如果需要设置更复杂的转换,则需要调用glpopmatrix和glpushmatrix。小心拼写和使用这些。

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)解决discribed在另一个答案。喜欢这个功能:

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(); 
    } 

这个功能还不够完美,但它应该足够了。快乐的编码!

+1

我建议尽可能使用过剩。它们具有可以轻松制作实心立方体或线立方体的功能。 glutSolidCobe(glDouble size); – pippin1289