游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2013|回复: 0

新手:四面体旋转问题

[复制链接]

3

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2012-2-2 19:53:00 | 显示全部楼层 |阅读模式
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <Windows.h>

#define WIDTH 400
#define HEIGHT 400

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

static GLfloat angle=0.0f;

void myDisplay()
{

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
ColorR[]={1,0,0},
ColorG[]={0,1,0},
ColorB[]={0,0,1},
ColorY[]={1,1,0};

GLfloat light_position[]={0.0f,0.0f,0.0f,1.0f};
GLfloat light_ambient[]={0.0f,0.0f,0.0f,1.0f};
GLfloat light_diffuse[]={1.0f,1.0f,1.0f,1.0f};
GLfloat light_specular[]={1.0f,1.0f,1.0f,1.0f};

GLfloat a_mat_ambient[] = {0.5f, 0.0f, 0.0f, 1.0f};
GLfloat a_mat_diffuse[] = {0.5f, 0.0f, 0.0f, 1.0f};
GLfloat a_mat_specular[] = {1.0f, 0.0f, 0.0f, 1.0f};
GLfloat a_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat a_mat_shininess = 30.0f;

GLfloat b_mat_ambient[] = {0.0f, 0.5f, 0.0f, 1.0f};
GLfloat b_mat_diffuse[] = {0.0f, 0.5f, 0.0f, 1.0f};
GLfloat b_mat_specular[] = {0.0f, 1.0f, 0.0f, 1.0f};
GLfloat b_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat b_mat_shininess = 30.0f;

GLfloat c_mat_ambient[] = {0.0f, 0.0f, 0.5f, 1.0f};
GLfloat c_mat_diffuse[] = {0.0f, 0.0f, 0.5f, 1.0f};
GLfloat c_mat_specular[] = {0.0f, 0.0f, 1.0f, 1.0f};
GLfloat c_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat c_mat_shininess = 30.0f;

GLfloat d_mat_ambient[] = {0.5f, 0.5f, 0.0f, 1.0f};
GLfloat d_mat_diffuse[] = {0.5f, 0.5f, 0.0f, 1.0f};
GLfloat d_mat_specular[] = {1.0f, 1.0f, 0.0f, 1.0f};
GLfloat d_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat d_mat_shininess = 30.0f;

glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);

glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glRotatef(angle,1,0.5,0);

glBegin(GL_TRIANGLES);

//ABC
glMaterialfv(GL_FRONT, GL_AMBIENT, a_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, a_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, a_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, a_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, a_mat_shininess);
glVertex3fv(PointA);

glMaterialfv(GL_FRONT, GL_AMBIENT, b_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, b_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, b_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, b_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, b_mat_shininess);
glVertex3fv(PointB);

glMaterialfv(GL_FRONT, GL_AMBIENT, c_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, c_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, c_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, c_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, c_mat_shininess);
glVertex3fv(PointC);

//ACD
glMaterialfv(GL_FRONT, GL_AMBIENT, a_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, a_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, a_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, a_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, a_mat_shininess);
glVertex3fv(PointA);

glMaterialfv(GL_FRONT, GL_AMBIENT, c_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, c_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, c_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, c_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, c_mat_shininess);
glVertex3fv(PointC);

glMaterialfv(GL_FRONT, GL_AMBIENT, d_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, d_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, d_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, d_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, d_mat_shininess);
glVertex3fv(PointD);

//CBD
glMaterialfv(GL_FRONT, GL_AMBIENT, c_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, c_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, c_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, c_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, c_mat_shininess);
glVertex3fv(PointC);

glMaterialfv(GL_FRONT, GL_AMBIENT, b_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, b_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, b_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, b_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, b_mat_shininess);
glVertex3fv(PointB);

glMaterialfv(GL_FRONT, GL_AMBIENT, d_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, d_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, d_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, d_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, d_mat_shininess);
glVertex3fv(PointD);

//BAD
glMaterialfv(GL_FRONT, GL_AMBIENT, b_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, b_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, b_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, b_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, b_mat_shininess);
glVertex3fv(PointB);

glMaterialfv(GL_FRONT, GL_AMBIENT, a_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, a_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, a_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, a_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, a_mat_shininess);
glVertex3fv(PointA);

glMaterialfv(GL_FRONT, GL_AMBIENT, d_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, d_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, d_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION, d_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, d_mat_shininess);
glVertex3fv(PointD);

glutSwapBuffers();

Sleep(16);
}

void myIdle(void)
{
angle+=1.0f;
if(angle>=360.0f)
{
angle=0.0f;
}
myDisplay();
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400,400);
glutCreateWindow("OpenGL学习");
glutDisplayFunc(&myDisplay);
glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
}

这个本来是个示例显示列表的程序,效果是一个旋转的四面体,我想增加光照效果,但是不知道法线的计算怎么往显示列表里加,于是就把显示列表里的东西都拿出来了,结果改成这样以后四面体不转了。新手求指导……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 10:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表