问题描述
我在这里获得有关OpenGL中3D立方体网格的一些帮助。现在我只有以下代码的2d网格:
glBegin(GL_QUADS);
for (GLfloat i = -5.5; i <= 5.5; i += .001) {
glVertex3f(i,5.5); glVertex3f(i,-5.5);
glVertex3f(5.5,i); glVertex3f(5.5,i);
}
glEnd();
它创建许多2d多维数据集以形成网格
解决方法
如果要在即时模式(glBegin/glEnd
中进行此操作,最简单的方法是使用嵌套循环和和glTranslate
进行模型转换。由于glTranslate
指定了新的转换矩阵并将当前矩阵乘以新矩阵,因此必须使用glPushMatrix
/glPopMatrix
保存和恢复当前矩阵。
编写一个函数(cube
),以绘制唯一的多维数据集,并设置glScale
来修改多维数据集模型的大小:
GLfloat size = 0.2f;
GLfloat gap = size * 0.2f;
for (int i = -5; i < 5; ++i)
{
for (int j = -5; j < 5; ++j)
{
glPushMatrix();
GLfloat x = (size + gap) * (GLfloat)i;
GLfloat y = (size + gap) * (GLfloat)j;
glTranslatef(x,y,0.0f);
glScalef(size*0.5f,size*0.5f,size*0.5f);
cube();
glPopMatrix();
}
}
void cube( void )
{
static const float verticies[] = {
1,-1,1,};
static const int surfaces[] = {0,2,3,7,6,5,4,6};
static const float colors[] = {1,0.5,0};
glBegin(GL_QUADS);
for (int side = 0; side < 6; ++side)
{
glColor3fv(colors + side*3);
for (int corner = 0; corner < 4; corner++)
{
int vi = surfaces[side*4+corner];
glVertex3fv(verticies + vi*3);
}
}
glEnd();
}