📄 main.cpp
字号:
//==============================================================
//==============================================================
//= main.cpp ===================================================
//= Original coders: Trent Polack (trent@voxelsoft.com) =
//==============================================================
//= demo1_1: main program source. =
//==============================================================
//==============================================================
//--------------------------------------------------------------
//--------------------------------------------------------------
//- INCLUDES ---------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "../Base Code/gl_app.h"
#include "../Base Code/math_ops.h"
#include "../Base Code/camera.h"
#include "ROAM.h"
#include "resource.h"
//--------------------------------------------------------------
//--------------------------------------------------------------
//- STRUCTURES -------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
enum FRACTAL_ALGORITHM
{
FAULT_FORMATION= 0,
MIDPOINT_DISPLACEMENT
};
//--------------------------------------------------------------
//--------------------------------------------------------------
//- GLOBALS ----------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
const int g_iScreenWidth = 640;
const int g_iScreenHeight= 480;
int g_iMouseX, g_iMouseY;
float g_fMovementSpeed= 0.05f;
float g_fMouseSensitivity= 1.0f;
CGL_APP g_glApp;
CCAMERA g_camera;
CROAM g_ROAM;
//--------------------------------------------------------------
//--------------------------------------------------------------
//- DEFINITIONS ------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
// Name: DemoInit - global
// Description: Initiate the things needed for the demo
// Arguments: None
// Return Value: A boolean variable: -true: successful initiation
// -false: unsuccessful initiation
//--------------------------------------------------------------
bool DemoInit( void )
{
srand( GetCurrentTime( ) );
g_glApp.Init( 10, 10, g_iScreenWidth, g_iScreenHeight, 16, "Demo 1_1: Sample Win32 Demo", IDI_ICON1, IDR_MENU1 );
g_glApp.CreateTTFont( "Lucida Console", 16 );
//set the clear color (background) to black
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
glDisable( GL_TEXTURE_2D ); //disable two dimensional texture mapping
glDisable( GL_LIGHTING ); //disable lighting
glDisable( GL_BLEND ); //disable blending
glEnable( GL_DEPTH_TEST ); //enable depth testing
glShadeModel( GL_SMOOTH ); //enable smooth shading
glClearDepth( 1.0 ); //depth buffer setup
glDepthFunc( GL_LEQUAL ); //set the type of depth test
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); //the nicest perspective look
//initialize the ROAM system
g_ROAM.Init( );
//set the camera's position
g_camera.SetPosition( 0.0f, 2.0f, -2.0f );
g_camera.m_fYaw += 175;
g_camera.m_fPitch-= 40;
//the initiation was successful
g_log.Write( LOG_SUCCESS, "INITIATION SUCCESSFUL" );
return true;
}
//--------------------------------------------------------------
// Name: DemoRender - global
// Description: The rendering procedure (that is passed to GLUT)
// Arguments: None
// Return Value: None
//--------------------------------------------------------------
void DemoRender( void )
{
//clear the color and depth buffers
g_glApp.BeginRendering( );
//reset the modelview matrix
glLoadIdentity( );
//setup the viewing matrix
g_camera.ComputeViewMatrix( );
g_camera.SetViewMatrix( );
//render the simple terrain!
g_ROAM.Update( g_camera.m_vecEyePos );
g_ROAM.Render( );
//render some text to the screen
glDisable( GL_TEXTURE_2D );
g_glApp.BeginTextMode( );
//render the number of frames per second
g_glApp.Print( g_iScreenWidth-175, g_iScreenHeight-50, CVECTOR( 0.0f, 1.0f, 0.0f),
"FPS: %7.0f", g_glApp.GetFPS( ) );
//render the number of vertices per frame
g_glApp.Print( g_iScreenWidth-175, g_iScreenHeight-65, CVECTOR( 0.0f, 1.0f, 0.0f),
"Vertices: %d", g_ROAM.GetNumVertsPerFrame( ) );
//render how many triangles are getting rendered per second
g_glApp.Print( g_iScreenWidth-175, g_iScreenHeight-80, CVECTOR( 0.0f, 1.0f, 0.0f),
"Tris/S: %d", g_ROAM.GetNumTrisPerFrame( ) );
//render how many million triangles are rendered per second
g_glApp.Print( g_iScreenWidth-175, g_iScreenHeight-95, CVECTOR( 0.0f, 1.0f, 0.0f),
"MTris/S: %.3f", ( g_ROAM.GetNumTrisPerFrame( )*g_glApp.GetFPS( ) )/1000000.0f );
g_glApp.EndTextMode( );
//force a render finish, and then swap buffers
g_glApp.EndRendering( );
}
//--------------------------------------------------------------
// Name: DemoShutdown - global
// Description: Runs all of the shutdown procedures that are needed
// Arguments: None
// Return Value: A boolean variable: -true: successful shutdown
// -false: unsuccessful shutdown
//--------------------------------------------------------------
bool DemoShutdown( void )
{
//exit the program
g_glApp.DestroyFont( );
g_glApp.Shutdown( );
g_log.Write( LOG_SUCCESS, "SHUTDOWN SUCCESSFUL" );
return true;
}
//--------------------------------------------------------------
// Name: KeyboardInput - global
// Description: Gathers keyboard input
// Arguments: -ucKey: the button being pressed
// -iX, iY: indicates the m_vecEyePos of the mouse
// at the time of the event
// Return Value: None
//--------------------------------------------------------------
bool DemoInput( void )
{
static int iToggleWait;
//only move when a button is down (makes life so much easier)
if( g_glApp.MouseDown( MK_LBUTTON ) || g_glApp.MouseDown( MK_RBUTTON ) )
{
g_camera.m_fYaw += ( ( float )g_glApp.GetMouseX( )-g_iMouseX )*g_fMouseSensitivity;
g_camera.m_fPitch-= ( ( float )g_glApp.GetMouseY( )-g_iMouseY )*g_fMouseSensitivity;
}
//always update the mouse coordinates, so that when the user wants to move
//the view (hold down a button), we don't get a very wierd view "jump"
g_iMouseX= g_glApp.GetMouseX( );
g_iMouseY= g_glApp.GetMouseY( );
iToggleWait++;
//exit the program
if( g_glApp.KeyDown( VK_ESCAPE ) )
{
PostQuitMessage( 0 );
return false;
}
//exit the program
if( g_glApp.KeyDown( 'Q' ) )
{
PostQuitMessage( 0 );
return false;
}
//move forward
if( g_glApp.KeyDown( VK_UP ) )
g_camera.m_vecEyePos+= g_camera.m_vecForward*g_fMovementSpeed;
//move backward
else if( g_glApp.KeyDown( VK_DOWN ) )
g_camera.m_vecEyePos-= g_camera.m_vecForward*g_fMovementSpeed;
//strafe right
if( g_glApp.KeyDown( VK_RIGHT ) )
g_camera.m_vecEyePos+= g_camera.m_vecSide*g_fMovementSpeed;
//strafe left
else if( g_glApp.KeyDown( VK_LEFT ) )
g_camera.m_vecEyePos-= g_camera.m_vecSide*g_fMovementSpeed;
return true;
}
//--------------------------------------------------------------
// Name: WinMain - global
// Description: The equivalant to Main( ) in console apps
// Arguments: Just some default arguments that windows requires
// Return Value: An integer variable
//--------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
//Do all of the Initiation stuff
if( !DemoInit( ) )
return false;
while( true )
{
if( !g_glApp.HandleMessages( ) )
break;
if( g_glApp.IsActive( )==APP_ACTIVE )
{
//check input
if( !DemoInput( ) )
break;
//rendering loop
DemoRender( );
}
}
//Shut the game down
DemoShutdown( );
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -