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 和 GLFW