在PC环境下用OPENGL做一个不断旋转和由小到大变化的五彩立方体
来源:互联网 发布:2017年最热网络词 编辑:程序博客网 时间:2024/04/29 21:55
//#include "glos.h"
#include<windows.h>//这个必须包含,要不然会有很多H文件报错出来!!!
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
/* 定义旋转和比例因子的初始值 */
GLfloat step=0.0,s=0.1;
/* 定义立方体的顶点坐标值 */
static GLfloat p1[]={0.5,-0.5,-0.5}, p2[]={0.5,0.5,-0.5},
p3[]={0.5,0.5,0.5}, p4[]={0.5,-0.5,0.5},
p5[]={-0.5,-0.5,0.5}, p6[]={-0.5,0.5,0.5},
p7[]={-0.5,0.5,-0.5}, p8[]={-0.5,-0.5,-0.5};
/* 定义立方体的顶点方向值 */
static GLfloat m1[]={1.0,0.0,0.0}, m2[]={-1.0,0.0,0.0},
m3[]={0.0,1.0,0.0}, m4[]={0.0,-1.0,0.0},
m5[]={0.0,0.0,1.0}, m6[]={0.0,0.0,-1.0};
/* 定义立方体的顶点颜色值 */
static GLfloat c1[]={0.0,0.0,1.0}, c2[]={0.0,1.0,1.0},
c3[]={1.0,1.0,1.0}, c4[]={1.0,0.0,1.0},
c5[]={1.0,0.0,0.0}, c6[]={1.0,1.0,0.0},
c7[]={0.0,1.0,0.0}, c8[]={1.0,1.0,1.0};
void myinit(void);
void CALLBACK myReshape(GLsizei w, GLsizei h);
void CALLBACK stepDisplay (void);
void CALLBACK startIdleFunc (AUX_EVENTREC *event);
void CALLBACK stopIdleFunc (AUX_EVENTREC *event);
void CALLBACK display(void);
void DrawColorBox(void);
void myinit(void)
{
GLfloat light_ambient[]={0.3,0.2,0.5};
GLfloat light_diffuse[]={1.0,1.0,1.0};
GLfloat light_position[] = { 2.0, 2.0, 2.0, 1.0 };
GLfloat light1_ambient[]={0.3,0.3,0.2};
GLfloat light1_diffuse[]={1.0,1.0,1.0};
GLfloat light1_position[] = { -2.0, -2.0, -2.0, 1.0 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
}
void CALLBACK display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
s+=0.005;
if(s>1.0)s=0.1;
glPushMatrix();
glScalef(s,s,s);
glRotatef(step,0.0,1.0,0.0);
glRotatef(step,0.0,0.0,1.0);
glRotatef(step,1.0,0.0,0.0);
DrawColorBox();
glPopMatrix();
glFlush();
auxSwapBuffers(); /* 交换缓存 */
}
void CALLBACK stepDisplay (void)
{
step = step + 1.0;
if (step > 360.0)
step = step - 360.0;
display();
}
void CALLBACK startIdleFunc (AUX_EVENTREC *event)
{
auxIdleFunc(stepDisplay);
}
void CALLBACK stopIdleFunc (AUX_EVENTREC *event)
{
auxIdleFunc(0);
}
void CALLBACK myReshape(GLsizei w, GLsizei h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
1.50*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
else
glOrtho (-1.5*(GLfloat)w/(GLfloat)h,
1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity ();
}
void DrawColorBox(void)
{
glBegin (GL_QUADS);
glColor3fv(c1);
glNormal3fv(m1);
glVertex3fv(p1);
glColor3fv(c2);
glVertex3fv(p2);
glColor3fv(c3);
glVertex3fv(p3);
glColor3fv(c4);
glVertex3fv(p4);
glColor3fv(c5);
glNormal3fv(m5);
glVertex3fv(p5);
glColor3fv(c6);
glVertex3fv(p6);
glColor3fv(c7);
glVertex3fv(p7);
glColor3fv(c8);
glVertex3fv(p8);
glColor3fv(c5);
glNormal3fv(m3);
glVertex3fv(p5);
glColor3fv(c6);
glVertex3fv(p6);
glColor3fv(c3);
glVertex3fv(p3);
glColor3fv(c4);
glVertex3fv(p4);
glColor3fv(c1);
glNormal3fv(m4);
glVertex3fv(p1);
glColor3fv(c2);
glVertex3fv(p2);
glColor3fv(c7);
glVertex3fv(p7);
glColor3fv(c8);
glVertex3fv(p8);
glColor3fv(c2);
glNormal3fv(m5);
glVertex3fv(p2);
glColor3fv(c3);
glVertex3fv(p3);
glColor3fv(c6);
glVertex3fv(p6);
glColor3fv(c7);
glVertex3fv(p7);
glColor3fv(c1);
glNormal3fv(m6);
glVertex3fv(p1);
glColor3fv(c4);
glVertex3fv(p4);
glColor3fv(c5);
glVertex3fv(p5);
glColor3fv(c8);
glVertex3fv(p8);
glEnd();
}
void main(void)
{
auxInitDisplayMode (AUX_DOUBLE | AUX_RGBA); /* 设置双缓存和RGBA颜色模式*/
auxInitPosition (0, 0, 500,400);
auxInitWindow ("Double_Buffer_Animation");
myinit();
auxReshapeFunc (myReshape);
auxIdleFunc (stepDisplay);
auxMouseFunc (AUX_LEFTBUTTON, AUX_MOUSEDOWN, startIdleFunc);
auxMouseFunc (AUX_RIGHTBUTTON, AUX_MOUSEDOWN, stopIdleFunc);
auxMainLoop(display);
}
以上程序运行结果是在屏幕上显示一个不断旋转和由小到大变化的五彩立方体。
在PC环境下VS2005 IDE下建立工程----------//glut库!!!
//1111-----H头文件-----gl.h++++glu.h++++glaux.h
//2222-----LIB库文件----glu32.lib++++glaux.lib++++OpenGL32.Lib
glu32.lib glaux.lib OpenGL32.Lib
//3333-----dll库文件----glmf32.dll++++glu32.dll++++opengl32.dll
- 在PC环境下用OPENGL做一个不断旋转和由小到大变化的五彩立方体
- OpenGL旋转立方体的实现
- OpenGL显示中文和旋转立方体贴图
- 一个旋转立方体和以立方体为目标的旋转相机
- OpenGL纹理贴图 旋转的立方体
- OpenGL -- 多颜色的立方体旋转
- 适应不断变化的环境
- OpenGL-绘制旋转立方体
- 用 OpenGL 编一个立方体
- 3D变化——旋转的立方体
- three.js 画一个旋转的立方体
- 如何在VC6或者VC7下用 ATL做一个OpenGL的(COM)控件?
- OpenGL绘制旋转立方体实例
- OpenGL绘制旋转立方体实例
- OpenGL绘制旋转立方体实例
- openGl画一个简单的立方体
- 用webgl绘制一个彩色旋转立方体
- Opengl学习笔记1 -- 做一个透视立方体
- 关于信号量与线程互斥锁的区别与实现
- SQL注入漏洞全接触--进阶篇
- SERV-U8.1中文显示问题
- 1人30天44587行代码,分享舍得网开发过程
- [ASP]自定义可拖动列宽,自动截断和隐藏内容,已及固定表头和列的gridview[技术备份一]
- 在PC环境下用OPENGL做一个不断旋转和由小到大变化的五彩立方体
- 第一节 一个最简单的Struts2实例
- Eclipse以及MyEclipse中防止代码格式化时出现换行的情况
- SQL注入漏洞全接触--高级篇
- 编译源文件的时候出错处理
- SQL SERVER – 2005 – Database Table Partitioning Tutorial – How to Horizontal Partition Database Table
- 文件增删复制
- SQL注入法攻击一日通
- 查看SQL 数据库的连接