📄 main.cpp
字号:
}
glEnable( GL_AUTO_NORMAL );
glEnable( GL_NORMALIZE );
// glRotatef( g_RotateWhole, 0.0f, 1.0f, 0.0f );
if( bChangeCamera )
{
gluLookAt( eyex, eyey, eyez, atx, aty, atz, 0.0f, 1.0f, 0.0f );/*设定视点位置*/
}
if( !bChangeCamera )
{
glRotatef( g_RotateWhole, 0.0f, 1.0f, 0.0f );
}
if( iSceneFlag == 1 )
{
displayAllScene();
}
// glCallList( iList_SphereSandAll );//粒子系统测试
/*绘制挖掘机*/
glPushMatrix();
glTranslatef( xpos, 0.0f, zpos );
if( bChangeCamera )
{
glTranslatef( -0.524f, 0.0f, 1.5f );
glRotatef( g_RotateWhole, 0.0f, 1.0f, 0.0f );
glTranslatef( 0.524f, 0.0f, -1.5f );
}
else
{
glRotatef( g_RotateWhole, 0.0f, 1.0f, 0.0f );
}
glScalef( 0.001f, 0.001f, 0.001f );/*将挖掘机缩小1000倍*/
if( !bChangeCamera )
{
glCallList( iList_grab );/*绘制底座*/
}
glPushMatrix();
if( bChangeCamera )
{
glTranslatef( -524.0f, 0.0f, 1500.0f );
glRotatef( g_RotatePingtai, 0.0f, 1.0f, 0.0f );
glTranslatef( 524.0f, 0.0f, -1500.0f );
}
else
{
glTranslatef( 0.0f, 0.0f, 1173.085f );
glRotatef( g_RotatePingtai, 0.0f, 1.0f, 0.0f );
glTranslatef( 0.0f, 0.0f, -1173.085f );
}
glCallList( iList_grab + 1 );/*绘制平台*/
if( !bChangeCamera )
{
glCallList( iList_grab + 2 );/*绘制玻璃*/
}
glPushMatrix();
glCallList( iList_grab + 3 );/*绘制弯臂连接座*/
glCallList( iList_grab + 4 );/*绘制弯臂旋转推杆大端*/
glCallList( iList_grab + 5 );/*绘制弯臂旋转推杆小端*/
glPushMatrix();
glTranslatef( 0.0f, -702.497f, 206.118f );
glRotatef( g_RotateWanbixiayouganda, 1.0f, 0.0f, 0.0f );
glTranslatef( 0.0f, 702.497f, -206.118f );
glCallList( iList_grab + 7 );/*绘制弯臂下油杆大端*/
glPopMatrix();
glPushMatrix();
glTranslatef( 0.0f, -500.845f, 450.916f );
glRotatef( g_RotateWanbi, 1.0f, 0.0f, 0.0f );
glTranslatef( 0.0f, 500.845f, -450.916f );
glCallList( iList_grab + 6 );/*绘制弯臂*/
glPushMatrix();
glTranslatef(0.0f, 495.025f, -482.886f );
glRotatef(g_RotateWanbixiayouganxiao, 1.0f, 0.0f, 0.0);
glTranslatef(0.0f, -495.025f, 482.886f);
glCallList( iList_grab + 8 );/*绘制弯臂下油杆小端*/
glPopMatrix();
glPushMatrix();
glTranslatef(0.0f, 1136.3f, -651.074f);
glRotatef( g_RotateWanbishangyouganda, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, -1136.3f, 651.074f);
glCallList( iList_grab + 9 );/*绘制弯臂上油杆大端*/
glPopMatrix();
glPushMatrix();
glTranslatef( 0.0f, 1122.591f, -2027.993f );
glRotatef( g_RotateQianbi, 1.0f, 0.0f, 0.0f );
glTranslatef( 0.0f, -1122.591f, 2027.993f );
glCallList( iList_grab + 11 );/*绘制前臂*/
glPushMatrix();
glTranslatef(0.0f, 1501.416f, -2543.906f);
glRotatef( g_RotateWanbishangyouganxiao, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, -1501.416f, 2543.906f);
glCallList( iList_grab + 10 );/*绘制弯臂上油杆小端*/
glPopMatrix();
glPushMatrix();
glTranslatef( 0.0f, 1043.418f, -2510.224f );
glRotatef( g_RotateQianyouganda, 1.0f, 0.0f, 0.0f );
glTranslatef( 0.0f, -1043.418f, 2510.224f );
glCallList( iList_grab + 12 );/*绘制前油杆大端*/
glPopMatrix();
glPushMatrix();
glTranslatef( 0.0f, -287.509f, -1744.321f );
glRotatef( g_RotateLiangan1, 1.0f, 0.0f, 0.0f );
glTranslatef( 0.0f, 287.509f, 1744.321f );
glCallList( iList_grab + 14 );/*绘制连杆1*/
glPopMatrix();
glPushMatrix();
glTranslatef( 0.0f, -545.868f, -1648.629f );
glRotatef( g_RotateDou, 1.0f, 0.0f, 0.0f );
glTranslatef( 0.0f, 545.868f, 1648.629f );
glPushMatrix();
glTranslatef( 0.0f, -844.684f, -1652.246f );
glRotatef( g_RotateLiangan2, 1.0f, 0.0f, 0.0f );
glTranslatef( 0.0f, 844.684f, 1652.246f );
glCallList( iList_grab + 15 );/*绘制连杆2*/
glPushMatrix();
glTranslatef( 0.0f, -622.111f, -1977.631f );
glRotatef( g_RotateQianyouganxiao, 1.0f, 0.0f, 0.0f );
glTranslatef( 0.0f, 622.111f, 1977.631f );
glCallList( iList_grab + 13 );/*绘制前油杆小端*/
glPopMatrix();
glPopMatrix();
glCallList( iList_grab + 16 );/*绘制铲斗*/
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();
glPopMatrix();/*挖掘机绘制结束*/
glDisable( GL_NORMALIZE );/*关闭法向自动计算*/
glDisable( GL_AUTO_NORMAL );
SwapBuffers(g_hDC); /* 交换缓冲区*/
}
void displayAllScene( void )
{
/*绘制总场景*/
glPushMatrix();
glScalef( 0.001f, 0.001f, 0.001f );
glTranslatef( 0.0f, -1564.4f, 0.0f );
glCallList( iList_AllScene );
glPopMatrix();/*总场景绘制结束*/
}
void ClearScene( void )
{
if( !bFirstEntryAll )
{
ClearAllScene();
}
if( !bFirstEntryLoad )
{
ClearLoadScene();
}
}
void ClearAllScene( void )
{
/*删除总场景的数据*/
for(int i = 0; i < g_3DModelAllScene.numOfObjects; i++)
{
/*删除所有的变量*/
delete [] g_3DModelAllScene.pObject[i].pFaces;
delete [] g_3DModelAllScene.pObject[i].pNormals;
delete [] g_3DModelAllScene.pObject[i].pVerts;
delete [] g_3DModelAllScene.pObject[i].pTexVerts;
}
}
void ClearLoadScene( void )
{
}
void ClearStatus( void )
{
g_RotateWhole = 0.0f;
g_RotateWanbi = 0.0f;
g_RotateWanbishangyouganda = 0.0f;
g_RotateWanbishangyouganxiao = 0.0f;
g_RotateWanbixiayouganda = 0.0f;
g_RotateWanbixiayouganxiao = 0.0f;
g_RotateQianyouganda = 0.0f;
g_RotateQianyouganxiao = 0.0f;
g_RotateLiangan1 = 0.0f;
g_RotateLiangan2 = 0.0f;
bChangeCamera = true;
bHasObject = false;
g_RotatePingtai = 0.0f;
g_RotateQianbi = 0.0f;
g_RotateDou = 0.0f;
xpos = 0;
zpos = 0;
eyex = -0.524f;
eyez = 1.5f;
}
BOOL CALLBACK HelpDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
{
switch( wParam )
{
case IDOK:
SetCursor( false );
EndDialog( hwndDlg, wParam );
break;
}
}
break;
case WM_KEYDOWN:
switch( wParam )
{
case VK_ESCAPE:
exit( 1 );
EndDialog( hwndDlg, wParam );
break;
}
break;
}
return FALSE;
}
LRESULT CALLBACK WinProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LONG lRet = 0;
PAINTSTRUCT ps;
switch (uMsg)
{
case WM_CREATE:
case WM_SIZE:
if( !g_bFullScreen )
{
SizeOpenGLScreen(LOWORD(lParam),HIWORD(lParam));
GetClientRect(hWnd, &g_rRect);
}
break;
case WM_PAINT:
BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
case WM_KEYDOWN: /* 键盘响应*/
keys[wParam] = true;
switch(wParam) {
case VK_ESCAPE: /* 按下ESC键*/
if( MessageBox(g_hWnd, "确定退出吗?", "退出", MB_YESNO | MB_ICONQUESTION ) == IDYES )
{
PostQuitMessage(0);
}
break;
case 0x41: /* 'a'*/
if( g_RotatePingtai >= 90.0 )
{
}
else
{
g_RotatePingtai += 3.0f;
}
break;
case 0x44:
if( g_RotatePingtai <= -90.0 )
{
}
else
{
g_RotatePingtai -= 3.0f;
}
break;
case 0x43:
bChangeCamera = bChangeCamera ? false : true;
break;
case 0x52:
ClearStatus();
break;
case VK_F1:
ShowCursor( true );
DialogBox( NULL, MAKEINTRESOURCE(IDD_DIALOG_HELP), g_hWnd, (DLGPROC)HelpDlgProc );
// SetFocus( IDOK );
// ShellExecute(NULL, "open", "help.chm", NULL, ".\\", SW_SHOW );
// ShellExecute(NULL, "Open", "help.txt", NULL, ".\\", SW_SHOW );/*显示帮助文档*/
break;
case VK_F2:
ShowCursor( true );
DialogBox( NULL, MAKEINTRESOURCE(IDD_DIALOG_SCENESELECT), g_hWnd, (DLGPROC)SceneSelectProc );
break;
case 0x47:
if( g_RotateQianbi < -10.0f )
{
}
else
{
g_RotateQianbi -= 3.0f;
if( g_RotateQianbi < 0.0f )
{
g_RotateWanbishangyouganda = 0.3f*g_RotateQianbi;
g_RotateWanbishangyouganxiao = -0.7*g_RotateQianbi;
}
else
{
g_RotateWanbishangyouganda = 0.24f*g_RotateQianbi;
if( g_CountWanbishangyouganxiao > 13 )
{
g_RotateWanbishangyouganxiao = -0.73*g_RotateQianbi;
}
else
{
g_RotateWanbishangyouganxiao = -0.70*g_RotateQianbi;
}
g_CountWanbishangyouganxiao --;
}
}
break;
case 0x46:
if( g_RotateQianbi >= 60.0f )
{
}
else
{
g_RotateQianbi += 3.0f;
if( g_RotateQianbi > 0.0f )
{
g_RotateWanbishangyouganda = 0.24f*g_RotateQianbi;
if ( g_CountWanbishangyouganxiao > 13 )
{
g_RotateWanbishangyouganxiao = -0.73*g_RotateQianbi;
}
else
{
g_RotateWanbishangyouganxiao = -0.7*g_RotateQianbi;
}
g_CountWanbishangyouganxiao ++;
}
else
{
g_RotateWanbishangyouganda = 0.3f*g_RotateQianbi;
g_RotateWanbishangyouganxiao = -0.7*g_RotateQianbi;
}
}
break;
case 0x48:
if( g_RotateDou < -30.0f )
{
}
else
{
if( g_RotateDou >= 27.0f )
{
bHasObject = false;
// MessageBox( NULL, "SUCCESS", "NOTE", MB_OK );
}
else
{
bHasObject = true;
}
g_RotateDou -= 3.0f;
g_RotateLiangan2 = -0.6*g_RotateDou;
g_RotateLiangan1 = 0.6*g_RotateDou;
g_RotateQianyouganxiao = 0.5*g_RotateLiangan2;
if( g_RotateQianyouganda > 0 )
{
g_RotateQianyouganda = 0.05*g_RotateDou;
}
else
{
g_RotateQianyouganda = 0.1*g_RotateDou;
}
}
break;
case 0x4A:
if( g_RotateDou > 30.0f )
{
}
else
{
if( g_RotateDou >= 27.0f )
{
bHasObject = false;
// MessageBox( NULL, "SUCCESS", "NOTE", MB_OK );
}
else
{
bHasObject = true;
}
g_RotateDou += 3.0f;
g_RotateLiangan2 = -0.6f*g_RotateDou;
g_RotateLiangan1 = 0.6f*g_RotateDou;
g_RotateQianyouganxiao = 0.5*g_RotateLiangan2;
if( g_RotateQianyouganda > 0 )
{
g_RotateQianyouganda = 0.05*g_RotateDou;
}
else
{
g_RotateQianyouganda = 0.1*g_RotateDou;
}
}
break;
case 0x4C:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -