• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签: 3D五指棋  Opengl  

资源简介

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


评论

共有 条评论