OpenGL在场景中移动表格

时间:2014-05-05 19:07:31

标签: c opengl graphics rendering glut

所以我想在我的场景中添加某种形式的交互性,然后使用WSAD将其移动到场景中。

创建表的功能是:

void drawTable(){


//texture stuff
glEnable(GL_TEXTURE_2D);

//draw legs
glBindTexture(GL_TEXTURE_2D, tableLegTexture);
drawCube(0.050,0.5,0.060,0,0,0);
drawCube(0.050,0.5,0.060,3,0,0);
drawCube(0.050,0.5,0.060,3,0,-1);
drawCube(0.050,0.5,0.060,0,0,-1);

//draw table top
glBindTexture(GL_TEXTURE_2D, tableTopTexture);
drawCube(2,0.050,1,1.5,0.5,-0.5);

glDisable(GL_TEXTURE_2D);
}

在渲染场景方法中,我有:

glPushMatrix();
    glTranslatef(tableX, tableY, tableZ);
    glTranslatef(-0.5,0,3);
    drawTable();
glPopMatrix();

这是键盘部分:

void pressKey(int key, int xx, int yy){
    switch(key){
        case GLUT_KEY_LEFT : 
            deltaAngle = -0.01f;
            break;  
        case GLUT_KEY_RIGHT : 
            deltaAngle = 0.01f;
            break;  
        case GLUT_KEY_UP : 
            deltaMove = 0.5f;
            break;  
        case GLUT_KEY_DOWN : 
            deltaMove = -0.5f;
            break;  
        case 'W' :
            tableX = tableX + 1;    
            break;
    }
}

所以我想知道。这样做相对简单吗? 我有一种在整个关卡中移动的方法,但这会移动整个场景,所以我不确定如何只移动桌子?

1 个答案:

答案 0 :(得分:2)

  

我怎么会只移动桌子?

在固定翻译之前添加另一个转换:

glPushMatrix();
    glTranslatef( tableX, tableY, tableZ );
    glTranslatef(-0.5,0,3);
    drawTable();
glPopMatrix();

修改键盘回调中的table[X|Y|Z]并重新绘制。