在OpenGL中创建一个简单的形状(Shape在数据结构中)

时间:2014-02-09 15:22:50

标签: c++ variables opengl data-structures

当我按左箭头键时,我想让身体(方形)向左移动。不幸的是,它存在于数据结构中,我不知道在void SpecialKeys(int key, int x, int y)部分放置什么以使其移动。

#include <vector>
#include <time.h>

using namespace std;

#include "Glut_Setup.h"



**struct Vertex
{
float x,y,z;
};
Vertex Body []=
{
(-0.5, -2, 0),
(0.5, -2, 0),
(0.5, -3, 0),
(-0.5, -3, 0)
};**




void GameScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);





glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 1.0);
glVertex3f(-0.5, -2, 0);
glVertex3f(0.5, -2, 0);
glVertex3f(0.5, -3, 0); 
glVertex3f(-0.5, -3, 0);
glEnd();







glutSwapBuffers();
}

void Keys(unsigned char key, int x, int y)
{
switch(key)
{

}
}

**void SpecialKeys(int key, int x, int y)
{
switch(key)
{
}
}**

2 个答案:

答案 0 :(得分:1)

你只需要调用glTranslatef。

glClear(GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(delta_x, delta_y, -100.f);
//draw here
glPopMatrix();

答案 1 :(得分:1)

在OpenGL中,通常有两种移动对象的方法:glMatrices或直接操作变量。

OpenGL提供函数glTranslatef()。如果您了解矩阵,那么它在3d空间中的作用是将tx or ty or tz添加到向量中的相应组件。在OpenGL中,这发生在幕后,因此为了使用glTranslate对象,您将执行以下操作:

glPushMatrix();
glTranslatef(1.0, 0, 0);

//drawing code

glPopMatrix();

您绘制的每个顶点将乘以矩阵以执行变换。

第二种方法是直接操作对象的组件。为此,您需要在绘图代码中使用变量,例如:

glVertex3f(vx, vy, vz);
glVertex3f(vx + 1.0, vy - 1.0, vz); // not a real example, just get the idea

然后,当您想要在正x轴上移动顶点时,只需将数量添加到vx:

vx+=0.5;

下次绘制对象时,它将使用vx的新值。

简单的谷歌搜索可以为您提供如何响应键输入的答案: http://www.opengl.org/documentation/specs/glut/spec3/node54.html 但无论如何,这是一个关于它是如何工作的想法:

switch(key)
{
case GLUT_KEY_RIGHT:
vx++;
break;
}