资源简介
用C++ 和opengl库函数实现多个雪人,而且可以和键盘交互,利用键盘来控制视角,变换场景
代码片段和文件信息
#include
#include
#include
#include
#include
float angle=0.0deltaAngle = 0.0ratio;
float x=0.0fy=1.75fz=5.0f;
float lx=0.0fly=0.0flz=-1.0f;
GLint snowman_display_list;
int deltaMove = 0;
void changeSize(int w int h)
{
// Prevent a divide by zero when window is too short
// (you cant make a window of zero width).
if(h == 0)
h = 1;
ratio = 1.0f * w / h;
// Reset the coordinate system before modifying
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Set the viewport to be the entire window
glViewport(0 0 w h);
// Set the clipping volume
gluPerspective(45ratio11000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(x y z
x + lxy + lyz + lz
0.0f1.0f0.0f);
}
void drawSnowMan() {
glColor3f(1.0f 1.0f 1.0f);
// Draw Body
glTranslatef(0.0f 0.75f 0.0f);
glutSolidSphere(0.75f2020);
// Draw Head
glTranslatef(0.0f 1.0f 0.0f);
glutSolidSphere(0.25f2020);
// Draw Eyes
glPushMatrix();
glColor3f(0.0f0.0f0.0f);
glTranslatef(0.05f 0.10f 0.18f);
glutSolidSphere(0.05f1010);
glTranslatef(-0.1f 0.0f 0.0f);
glutSolidSphere(0.05f1010);
glPopMatrix();
// Draw Nose
glColor3f(1.0f 0.5f 0.5f);
glRotatef(0.0f1.0f 0.0f 0.0f);
glutSolidCone(0.08f0.5f102);
}
GLuint createDL() {
GLuint snowManDL;
// Create the id for the list
snowManDL = glGenLists(1);
// start list
glNewList(snowManDLGL_COMPILE);
// call the function that contains the rendering commands
drawSnowMan();
// endList
glEndList();
return(snowManDL);
}
void initScene() {
glEnable(GL_DEPTH_TEST);
snowman_display_list = createDL();
}
void orientMe(float ang) {
lx = sin(ang);
lz = -cos(ang);
glLoadIdentity();
gluLookAt(x y z
x + lxy + lyz + lz
0.0f1.0f0.0f);
}
void moveMeFlat(int i) {
x = x + i*(lx)*0.1;
z = z + i*(lz)*0.1;
glLoadIdentity();
gluLookAt(x y z
x + lxy + lyz + lz
0.0f1.0f0.0f);
}
void renderScene(void) {
if (deltaMove)
moveMeFlat(deltaMove);
if (deltaAngle) {
angle += deltaAngle;
orientMe(angle);
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Draw ground
glColor3f(0.9f 0.9f 0.9f);
glBegin(GL_QUADS);
glVertex3f(-100.0f 0.0f -100.0f);
glVertex3f(-100.0f 0.0f 100.0f);
glVertex3f( 100.0f 0.0f 100.0f);
glVertex3f( 100.0f 0.0f -100.0f);
glEnd();
// Draw 36 SnowMen
for(int i = -3; i < 3; i++)
for(int j=-3; j < 3; j++) {
glPushMatrix();
glTranslatef(i*10.00j * 10.0);
glCallList(snowman_display_list);;
glPopMatrix();
}
glutSwapBuffers();
}
void pressKey(int key int x int y) {
switch (key) {
case GLUT_KEY_LEFT : deltaAngle = -0.01f;break;
case GLUT_KEY_RIGHT : deltaAngle = 0.01f;break;
case GLUT_KEY_UP : deltaMove = 1;brea
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 530 2008-03-13 20:33 glutsnowman\glutsnowman.dsw
文件 33792 2008-03-13 20:40 glutsnowman\glutsnowman.ncb
文件 45056 2008-03-13 20:33 glutsnowman\Debug\vc60.pdb
文件 15100 2008-03-13 20:33 glutsnowman\Debug\glutsnowman.obj
文件 204883 2008-03-13 20:33 glutsnowman\Debug\glutsnowman.exe
文件 369664 2008-03-13 20:33 glutsnowman\Debug\glutsnowman.pdb
文件 1305 2008-03-13 20:33 glutsnowman\glutsnowman.plg
文件 3883 2008-03-13 20:40 glutsnowman\glutsnowman.cpp
文件 48640 2008-03-13 20:40 glutsnowman\glutsnowman.opt
文件 4344 2008-03-13 20:40 glutsnowman\glutsnowman.dsp
目录 0 2008-03-13 20:33 glutsnowman\Debug
目录 0 2008-03-13 20:33 glutsnowman
----------- --------- ---------- ----- ----
727197 12
- 上一篇:将数据保存到excel中
- 下一篇:操作系统课程设计 linux文件系统
相关资源
- 将数据保存到excel中
- GPS卫星定位-实时位置计算程序-VC++源
- 使用ifstream和getline读取文件内容[c++
- c++版本自抗扰控制器
- 驱动程序加载
- C++批量处理程序模板
- C++ 高效 屏幕找图 函数源码 终极版
- 超全的网络爬虫资料含源代码c++
- c++用栈实现四则运算
- 超市收银POS机C++
- 纸牌 windows 纸牌
- 获取网络时间校正本地系统时间,C
- windows下 c++实现ping地址源码两种
- 学生成绩管理系统C语言、C++6.0 控制台
- R树的C++实现
- C++简单实现关联规则挖掘中Apriori算法
- 线性回归c++实现
- 开放源码的计算机图形学几何算法包
- Bulls and Cows C++
- 常用数据校验源代码CRC8 CRC16 和校验
- vc++编写的界面源代码
- c++实现四则运算器源码 支持括号
- VC++注册码加密源程序含注册机、解密
- USB 通讯 libusb-win32
- 数据结构类库c++版
- 维吉尼亚加密解密C++实现
- 又一个douglas道格拉斯VC++算法
- 一个双色球彩票随机选号器6+1C++源码
- 家庭收支管理系统基于VC++ ACCESS数据库
- C++实现双向链表完整代码
评论
共有 条评论