求解:OpenGL 画多边形的动画程序

hetengfei_ 2013-01-14 04:38:44

一个用OpenGL 画多边形的动画程序出错。 没有显示结果,不知为什么 ,
没有照书,自已定就不行了。

//

#include "stdafx.h"
#include <stdlib.h>
#define GLUT_DISABLE_ATEXIT_HACK //1
#include <stdio.h>
#include<windows.h> //2
#include<GL/gl.h>
#include<GL/glu.h>
#include "glut.h"//注要顺序:// 3
#include<math.h>
#define PI 3.1415926536f
#define WIDTH 400
#define HEIGHT 400



GLfloat angle = 0.0f;
//
void setNormal(GLfloat* Point1, GLfloat* Point2, GLfloat* Point3) ;
static int list = -1;
void myDisplay()
{
glMatrixMode(GL_PROJECTION); //声明准备进行投影方面的操作
glLoadIdentity(); // init 当前距阵
gluPerspective(90.0f, 1.0f, 1.0f, 20.0f); // 怎么看/ 参数(解度,宽高比,近,远)
glMatrixMode(GL_MODELVIEW); //声明准备进行view模式 方面的操作
glLoadIdentity(); //init 当前距阵
gluLookAt(0.0, 0.0, -5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
if( list == -1 )
{
///定义4面体的顶点:
GLfloat
PointA[] = { 0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6},
PointB[] = {-0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6},
PointC[] = { 0.0f, -sqrt(6.0f)/12, sqrt(3.0f)/3},
PointD[] = { 0.0f, sqrt(6.0f)/4, 0};

///光原

GLfloat lightPosition[] = {0.0f, -5.0f, -10.0f, 1.0f};//位置
//漫反射,所得到的光的强度
GLfloat lightAmbient[] = {0.0f, 0.0f, 0.0f, 1.0f};
//照射到粗糙表面时经过漫反射,所得到的光的强度
GLfloat lightDiffuse[] = {1.0f, 1.0f, 1.0f, 0.6f};
//照射到光滑表面时经过镜面反射,所得到的光的强度
GLfloat lightSpecular[] = {0.8f, 0.7f, 0.82f, 1.0f};

//村质:
GLfloat matAmbient[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat matDiffuse[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat matSpecular[] = {0.4f, 0.4f, 0.5f, 1.0f};
GLfloat matEmission[] = {0.5f, 0.2f, 0.7f, 1.0f};
GLfloat matShininess = 0.5f;


list = glGenLists(1); //建立LISG list 表示list 可用参数表示创建一个。
glNewList(list, GL_COMPILE); //创建List 开始记录,记录到id=list 的列表中:
//设置光源
{

glLightfv(GL_LIGHT0, GL_POSITION,lightPosition);
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient); //最终遗留在整个光照环境中的强度
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); //照射到粗糙表面时经过漫反射,所得到的光的强度
glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular); //照射到光滑表面时经过镜面反射,所得到的光的强度

glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
}
//设置材质特性:
{



glMaterialfv(GL_FRONT, GL_AMBIENT, matAmbient); // //最终遗留在整个光照环境中的强度
glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiffuse); //散射颜色
glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular); //材质的镜面反射颜色
glMaterialfv(GL_FRONT, GL_EMISSION, matEmission); //材质的发射光颜色
glMaterialf (GL_FRONT, GL_SHININESS, matShininess); //镜面反射指数
}
//下面画多边形:--空间4边形,4面体:
{


glBegin(GL_TRIANGLES);
setNormal(PointA,PointB,PointC);
//ABC
glVertex3fv(PointA);
glVertex3fv(PointB);
glVertex3fv(PointC);
//ABD
setNormal(PointA,PointB,PointD);

glVertex3fv(PointA);
glVertex3fv(PointB);
glVertex3fv(PointD);
//ACD
setNormal(PointA,PointC,PointD);

glVertex3fv(PointA);
glVertex3fv(PointC);
glVertex3fv(PointD);
//bCD
setNormal(PointB,PointC,PointD);
glVertex3fv(PointB);
glVertex3fv(PointC);
glVertex3fv(PointD);
glEnd();

}
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// 已经创建了显示列表,在每次绘制正四面体时将调用它
glPushMatrix();
glRotatef(angle, 2, 1, 0);
glCallList(list); //调用List
glPopMatrix();
glutSwapBuffers();
glFlush();
}
///当CPU 有空时调用!
void myIdle(void) {
++angle;
if( angle >= 360.0f )
angle = 0.0f;
myDisplay();
}
//设置三角平面的法线:
void setNormal(GLfloat* Point1, GLfloat* Point2, GLfloat* Point3)
{
GLfloat normal[3];
int i;
for(i=0; i<3; ++i)
normal[i] = (Point1[i]+Point2[i]+Point3[i]) / 3;
glNormal3fv(normal);
}
///入口
int _tmain(int argc, char* argv[])
{
//SetVSyncState(true);

glutInit(&argc, argv); //初化
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); //glut 的模式:
glutInitWindowPosition(200, 200); //窗体位置
glutInitWindowSize(WIDTH, HEIGHT); //窗体大小
glutCreateWindow("OpenGL 窗口"); //创建一个window ,他的text==OpenGL 窗口
glutDisplayFunc(&myDisplay); //为当前窗口设置显示回调函数
glutIdleFunc(&myIdle);
glutMainLoop();
return 0;

}






结果如下

请问哪里出错了。
...全文
138 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
derekrose 2013-01-14
  • 打赏
  • 举报
回复
画多边形的步骤有多少,比较我们了解的也少,你把步骤列出来,然后一步一步排查,咱们不都是干这行的,就是蛋疼,慢慢来吧哥们
赵4老师 2013-01-14
  • 打赏
  • 举报
回复
搜网络教程“学OpenGL编3D游戏”。
jimette 2013-01-14
  • 打赏
  • 举报
回复
lz 你先少画点 看看 opencv不懂

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧