OpenGL立方体带黑白格格纹理有光照可以鼠标键盘交互c文件

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用方法:新建一个工程,把以下代码拷贝到类文件里。#include "stdafx.h"

#include

#include

GLfloat light0_pos[4] = {0.00f, 0.00f, 1.00f, 0.0f};

typedef struct materialStruct {

GLfloat ambient[4];

GLfloat diffuse[4];

GLfloat specular[4];

GLfloat shininess;

} materialStruct;

typedef struct lightingStruct {

GLfloat ambient[4];

GLfloat diffuse[4];

GLfloat specular [4];

} lightingStruct;

materialStruct colorCubeMaterials = {

{0.2, 0.2, 0.2, 1.0},

{0.8, 0.8, 0.8, 1.0},

{0.0, 0.0, 0.0, 1.0},

1.0

};

materialStruct brassMaterials = {

{0.33, 0.22, 0.03, 1.0},

{0.78, 0.57, 0.11, 1.0},

{0.99, 0.91, 0.81, 1.0},

27.8

};

materialStruct redPlasticMaterials = {

{0.3, 0.0, 0.0, 1.0},

{0.9, 0.0, 0.0, 1.0},

{0.8, 0.6, 0.6, 1.0},

32.0

};

materialStruct whiteShinyMaterials = {

{1.0, 1.0, 1.0, 1.0},

{1.0, 1.0, 1.0, 1.0},

{1.0, 1.0, 1.0, 1.0},

100.0

};

lightingStruct whiteLighting = {

{0.0, 0.0, 0.0, 1.0},

{1.0, 1.0, 1.0, 1.0},

{1.0, 1.0, 1.0, 1.0}

};

materialStruct *currentMaterials;

lightingStruct *currentLighting;

GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},

{1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0},

{1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};

GLfloat normals[][3] = {{0.0,0.0,-1.0},{0.0,1.0,0.0},

{-1.0,0.0,0.0}, {1.0,0.0,0.0}, {0.0,0.0,1.0},

{0.0,-1.0,0.0}};

GLfloat colors[][4] = {{1.0,1.0,1.0,1.0}, {1.0,1.0,1.0,1.0}, {1.0,1.0,1.0,1.0}, {1.0,1.0,1.0,1.0}, {1.0,1.0,1.0,1.0},

{1.0,1.0,1.0,1.0}, {1.0,1.0,1.0,1.0}, {1.0,1.0,1.0,1.0}};

void polygon(int a, int b, int c , int d)

{

glBegin(GL_POLYGON);

glColor4fv(colors[a]);

glTexCoord2f(0.0,0.0);

glVertex3fv(vertices[a]);

glColor4fv(colors[b]);

glTexCoord2f(0.0,1.0);

glVertex3fv(vertices[b]);

glColor4fv(colors[c]);

glTexCoord2f(1.0,1.0);

glVertex3fv(vertices[c]);

glColor4fv(colors[d]);

glTexCoord2f(1.0,0.0);

glVertex3fv(vertices[d]);

glEnd();

}

void colorcube(void)

{

glNormal3fv(normals[0]);

polygon(0,3,2,1);

glNormal3fv(normals[1]);

polygon(2,3,7,6);

glNormal3fv(normals[2]);

polygon(0,4,7,3);

glNormal3fv(normals[3]);

polygon(1,2,6,5);

glNormal3fv(normals[4]);

polygon(4,5,6,7);

glNormal3fv(normals[5]);

polygon(0,1,5,4);

}

static GLfloat theta[] = {0.0,0.0,0.0};

static GLint axis = 1;

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glRotatef(theta[0], 1.0, 0.0, 0.0);

glRotatef(theta[1], 0.0, 1.0, 0.0);

glRotatef(theta[2], 0.0, 0.0, 1.0);

colorcube();

glutSwapBuffers();

}

void spinCube()

{

theta[axis] += 0.01;

if( theta[axis] > 360.0 ) theta[axis] -= 360.0;

glutPostRedisplay();

}

void mouse(int btn, int state, int x, int y)

{

if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) axis = 0;

if(btn==GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) axis = 1;

if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) axis = 2; }

相关文档
最新文档