OpenGL在场景中移动表格

Posted

技术标签:

【中文标题】OpenGL在场景中移动表格【英文标题】:OpenGL moving a table in a scene 【发布时间】:2014-05-05 19:07:30 【问题描述】:

所以我想在我的场景中添加某种形式的交互性并使其能够使用 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】:

我将如何只移动桌子?

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

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

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

【讨论】:

我用你所说的更新代码编辑了 OP,但它仍然不起作用,我做错了什么? @AndyOHart:看起来您正试图接受来自glutSpecialFunc() 回调的字符输入。那是行不通的。将您的 W 案例移动到 glutKeyboardFunc() 回调。 成功了,谢谢 :) 它只移动一次,但是如果按住 w 按钮它会继续移动,我该如何做到这一点?

以上是关于OpenGL在场景中移动表格的主要内容,如果未能解决你的问题,请参考以下文章

◮OpenGL-场景漫游(摄像机/键鼠控制)

如果在加载场景时移动鼠标光标不会消失 - OpenGL 和 GLFW

OpenGL入门8:摄像机

在OpenGL中平移和移动相机的正确方法?

opengl如何实现鼠标场景漫游 视点随着鼠标的移动发生变化 刚刚接触opengl所以不大懂(不用glut的情况下)

OpenGL相机扫射不起作用