为什么我的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;
} 展开
#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;
} 展开
1个回答
展开全部
你的代码中因为没有进行适当放缩,导致正方体无法正常显示。
可以使用:
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);
这个宏中既然定义了颜色参数,就把它用上。
最后效果为:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询