资源简介
opengl开发的一个3D五指棋游戏,源码注释详细
代码片段和文件信息
#include // 为了使用c的输出函数
#include
#include // 为了使用strlen
// 以下全局变量用于控制动画的状态和速度
float RotateAngle = 0.0f; // 绕y轴旋转的角度
float Azimuth = 45.0; // 绕x轴旋转的角度,初始45度
float AngleStepSize = 3.0f; // 角度变化间隔(3度)
const float AngleStepMax = 10.0f;
const float AngleStepMin = 0.1f;
int WireframeOn = 0; // 当等于1时为线框模式
//用以处理“普通”按键事件
void myKeyboardFunc( unsigned char key int x int y )
{
switch ( key ) {
case ‘w‘:
WireframeOn = 1-WireframeOn;
if ( WireframeOn ) {
glPolygonMode ( GL_FRONT_AND_BACK GL_LINE ); // 仅显示线框
}
else {
glPolygonMode ( GL_FRONT_AND_BACK GL_FILL ); // 显示实心多边形
}
glutPostRedisplay();
break;
case ‘R‘:
AngleStepSize *= 1.5;
if (AngleStepSize>AngleStepMax ) {
AngleStepSize = AngleStepMax;
}
break;
case ‘r‘:
AngleStepSize /= 1.5;
if (AngleStepSize AngleStepSize = AngleStepMin;
}
break;
case 27: // Esc 键
exit(1);
}
}
//用于处理“特殊”按键事件
void mySpecialKeyFunc( int key int x int y )
{
switch ( key ) {
case GLUT_KEY_UP:
Azimuth += AngleStepSize;
if ( Azimuth > 80.0f ) {
Azimuth = 80.0f;
}
break;
case GLUT_KEY_DOWN:
Azimuth -= AngleStepSize;
if ( Azimuth < 30.0f ) {
Azimuth = 30.0f;
}
break;
case GLUT_KEY_LEFT:
RotateAngle += AngleStepSize;
if ( RotateAngle > 180.0f ) {
RotateAngle -= 360.0f;
}
break;
case GLUT_KEY_RIGHT:
RotateAngle -= AngleStepSize;
if ( RotateAngle < -180.0f ) {
RotateAngle += 360.0f;
}
break;
}
glutPostRedisplay();
}
void drawScene(void)
{
// 清除渲染窗口内容
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode( GL_MODELVIEW ); // 当前矩阵影响物体的位置
glLoadIdentity(); // 初始化为恒等矩阵
glTranslatef( 0.0 0.0 -70.0 ); // 从原点平移(原点在观察者前方)
glRotatef( RotateAngle 0.0 1.0 0.0 ); // 绕y轴旋转)
glRotatef( Azimuth 1.0 0.0 0.0 ); // 设置方位角度(绕x轴旋转角度)
// 显示绘制管线内容,交换缓存
glutSwapBuffers();
}
// 初始化OpenGL的一些属性
void initRendering()
{
glEnable( GL_DEPTH_TEST ); // 深度检测必须打开
glCullFace( GL_BACK ); // 这两行代码将导致背面不会显示
glEnable( GL_CULL_FACE );
glClearColor(0.5 0.5 0.5 1.0); // 背景色设为灰色
}
// 当窗口大小改变时调用
// wh - 窗口的宽度和高度(以像素为单位)
void resizeWindow(int w int h)
{
GLdouble aspectRatio = (double)w / (double)h; // 新的宽高比
// 定义窗口中用于OpenGL渲染的部分
glViewport( 0 0 w h ); // 视口使用整个窗口
// 设置投影观察矩阵:透视投影
// 这种处理方法的缺点是窗口的宽高比可能与我们希望观察到的场景的宽高比可能不同
h = (h==0) ? 1 : h; // 防止除0
// 设置观察条件
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective(15.0 aspectRatio 15.0 100.0 );
}
int main( int argc char** argv )
{
glutInit(&argc argv);
// 我们准备使用动画,所有采用双缓存
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
// 窗口位置(相对于左上角),窗口尺寸(宽度和高度)
glutInitWindowPosition( 10 60 );
glutInitWindowSize( 360 360 );
glutCreateWindow( “五子棋“ );
// 初始化OpenGL
initRendering();
// 设置用于处理键盘按键的回
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3952 2011-04-01 12:03 五子棋\gobang.cpp
文件 3401 2011-04-01 11:46 五子棋\gobang.dsp
文件 537 2011-04-01 11:47 五子棋\gobang.dsw
目录 0 2011-04-01 12:05 五子棋
----------- --------- ---------- ----- ----
7890 4
- 上一篇:分支限界法 最小权顶点覆盖问题
- 下一篇:RLC测试仪程序+proteus仿真
相关资源
- 使用Qt实现的阴影映射源代码
- 3DS文件在OpenGL中的读取和显示源代码
- 计算机图形学.pdf
- glaux系列包
- 基于openGL开发的射击小游戏
- lighthouse3d GLSL的英文教程,很适合入门
- 一个用OpenGL完成的下雨模拟程序
- 利用OpenGL绘制一个简单场景:比如球
- 基于OpenGL的三维旋转算法及其在计算
- OpenGL入门教程pdf(最基础)
- opengl实现三维图形变换
- 采用VC及Opengl基于四叉树及LOD算法的室
- 基于OpenGL和LOD技术的三维地形及洪水
- 实战OpenGL三维可视化系统开发与源码
- Breakout.zip
- OpenGL安装包最完全
- OpenGL ES 2.0编程指南中文版
- opengl es 2.0 programming guide
- opengl实现的简单三维场景漫游
- 基于openGL的3D教室场景
- OpenGL安装包全
- OpenGL中32位和64位的GlAux.lib和GlAux.h文件
- OpenGL所需头文件和库文件.rar
- OpenGL glad
- OpenGL ES2.0开发库
- GLSL教程 pdf版
- GLSL在OPENGL中使用的
- opengl编程glsl-着色器
- 光照太阳系.zip
- labview的Opengl实现
评论
共有 条评论