为什么我的opengl程序画不出立方体?

#include<GL/glut.h>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<window... #include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#define ColoredVertex(c,v)do{glVertex3fv(v);}while(0);//

GLfloat angle = 0.0f;
void myDisplay()
{
static int list = 0;

if (list == 0)
{
GLfloat
PointA[] = { -1.0f, 1.0f, 1.0f },
PointB[] = { 1.0f, 1.0f, 1.0f },
PointC[] = { 1.0f, -1.0f, 1.0f },
PointD[] = { -1.0f, -1.0f, 1.0f },
PointE[] = { -1.0f, 1.0f, -1.0f },
PointF[] = { -1.0f, -1.0f, -1.0f },
PointG[] = { 1.0f, -1.0f, -1.0f },
PointH[] = { 1.0f, 1.0f, -1.0f };

GLfloat
ColorR[] = { 1, 0, 0 }, //定义四个面的颜色
ColorG[] = { 0, 1, 0 },
ColorB[] = { 0, 0, 0 },
ColorY[] = { 0, 0, 0 };

list = glGenLists(1);
glNewList(list, GL_COMPILE);//显示列表函数原型
glBegin(GL_QUADS);
ColoredVertex(ColorR, PointA);
ColoredVertex(ColorG, PointB);
ColoredVertex(ColorB, PointC);
ColoredVertex(ColorB, PointD);

ColoredVertex(ColorR, PointE);
ColoredVertex(ColorG, PointF);
ColoredVertex(ColorY, PointD);
ColoredVertex(ColorR, PointA);

ColoredVertex(ColorG, PointB);
ColoredVertex(ColorR, PointC);
ColoredVertex(ColorY, PointG);
ColoredVertex(ColorR, PointH);

ColoredVertex(ColorR, PointH);
ColoredVertex(ColorB, PointG);
ColoredVertex(ColorY, PointF);
ColoredVertex(ColorB, PointE);

ColoredVertex(ColorR, PointE);
ColoredVertex(ColorG, PointA);
ColoredVertex(ColorY, PointB);
ColoredVertex(ColorR, PointH);

ColoredVertex(ColorR, PointC);
ColoredVertex(ColorY, PointD);
ColoredVertex(ColorY, PointF);
ColoredVertex(ColorR, PointG);
glEnd();
glEndList(); //替换列表函数
glEnable(GL_DEPTH_TEST);//启用深度测试

}

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清除缓存
glPushMatrix();//保存当前矩阵
glRotatef(angle, 1.0,5, 0);//根据参数进行旋转(角度和位置)
glCallList(list);//执行显示列表
glPopMatrix();//弹出栈顶的矩阵
glutSwapBuffers();//交换两个缓冲区指针
}
void myIdle()
{
++angle;
if (angle >= 180.0f) //当旋转角度为360度时置零(即转一圈)
angle = 0.0f;
myDisplay();

}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(200, 200);
glutInitWindowSize(1800, 1800);
glutCreateWindow("opengl窗口");
glutDisplayFunc(&myDisplay);
glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
}
展开
 我来答
开阳曦39
2014-10-23 · TA获得超过180个赞
知道答主
回答量:44
采纳率:0%
帮助的人:63.2万
展开全部

你的代码中因为没有进行适当放缩,导致正方体无法正常显示。

可以使用:

glScalef(0.5,0.5,0.5);

后观察效果。

另外,代码之中存在两处错误:

第一,绕序问题,推测你使用逆时针正面绕序。这样的话,则需要改正ABCD面为:

ColoredVertex(ColorR, PointB);
ColoredVertex(ColorG, PointA);
ColoredVertex(ColorB, PointD);
ColoredVertex(ColorB, PointC);

第二:

#define ColoredVertex(c,v)do{glColor3fv(c);glVertex3fv(v);}while(0);

这个宏中既然定义了颜色参数,就把它用上。

最后效果为:


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式