OpenGL中的3D立方体网格
Posted
技术标签:
【中文标题】OpenGL中的3D立方体网格【英文标题】:Grid of 3D cubes in OpenGL 【发布时间】:2020-09-21 12:21:16 【问题描述】:我来这里是为了获得有关 OpenGL 中 3D 立方体网格的帮助。现在我只有以下代码的二维网格:
glBegin(GL_QUADS);
for (GLfloat i = -5.5; i <= 5.5; i += .001)
glVertex3f(i, 0, 5.5); glVertex3f(i, 0, -5.5);
glVertex3f(5.5, 0, i); glVertex3f(5.5, 0, i);
glEnd();
它创建了许多二维立方体来形成一个网格
【问题讨论】:
【参考方案1】:如果您想在立即模式下执行此操作 (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,
1, 1, -1,
-1, 1, -1,
-1, -1, -1,
1, -1, 1,
1, 1, 1,
-1, -1, 1,
-1, 1, 1,
;
static const int surfaces[] = 0,1,2,3, 3,2,7,6, 6,7,5,4, 4,5,1,0, 1,5,7,2, 4,0,3,6;
static const float colors[] = 1,0,0, 0,1,0, 0,0,1, 1,1,0, 1,0,1, 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();
【讨论】:
感谢您的帮助...我运行它并显示立方体网格但是我如何在 x 轴上旋转它使其看起来像地面?现在它垂直显示,我尝试了 glRotatef 但它不旋转:(。 @StrugglerglTranslatef(x, y, 0.0f);
-> glTranslatef(x, 0.0f, y);
太好了,我也想到了!!!非常感谢您的帮助...以上是关于OpenGL中的3D立方体网格的主要内容,如果未能解决你的问题,请参考以下文章