资源简介
opengl开发的一个3D五指棋游戏,源码注释详细
![](http://www.nz998.com/pic/37963.jpg)
代码片段和文件信息
#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仿真
相关资源
- OpenGL参考手册
- Qt Creator opengl实现四元数鼠标控制轨迹
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- opengl室内场景的绘制,包括碰撞检测
评论
共有 条评论