首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-02-06 
求解:OpenGL 画多边形的动画程序一个用OpenGL 画多边形的动画程序出错。 没有显示结果,不知为什么 ,没有照

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

一个用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;

}






结果如下求解:OpenGL 画多角形的动画程序

请问哪里出错了。 c
[解决办法]
lz 你先少画点
看看
opencv不懂
[解决办法]
搜网络教程“学OpenGL编3D游戏”。
[解决办法]
画多边形的步骤有多少,比较我们了解的也少,你把步骤列出来,然后一步一步排查,咱们不都是干这行的,就是蛋疼,慢慢来吧哥们

热点排行