📄 testmorphcontroller.cpp
字号:
// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement. The various license agreements may be found at
// the Magic Software web site. This file is subject to the license
//
// FREE SOURCE CODE
// http://www.magic-software.com/License.html/free.pdf
#include "TestMorphController.h"
//---------------------------------------------------------------------------
MgcApplication* MgcApplication::Create ()
{
return new TestMorphController;
}
//---------------------------------------------------------------------------
TestMorphController::TestMorphController ()
:
MgcApplication("TestMorphController",640,480,0,2)
{
MeasureTime();
m_fBaseTime = -1.0;
m_fCurrTime = -1.0;
}
//---------------------------------------------------------------------------
bool TestMorphController::Initialize ()
{
m_spkCamera = new MgcOglCamera(640,480);
m_spkCamera->SetFrustum(1.0,1000.0,-0.55,0.55,0.4125,-0.4125);
MgcVector3 kCLoc(0.0,0.0,0.0);
MgcVector3 kCLeft(0.0,0.0,-1.0);
MgcVector3 kCUp(0.0,1.0,0.0);
MgcVector3 kCDir(1.0,0.0,0.0);
m_spkCamera->SetFrame(kCLoc,kCLeft,kCUp,kCDir);
m_spkRenderer = new MgcOglRenderer(GetWindowHandle(),640,480);
m_spkRenderer->SetBackgroundColor(MgcColor(0.5f,0.0f,1.0f));
m_spkRenderer->SetCamera(m_spkCamera);
MgcStream kStream;
bool bResult = kStream.Load("sneeze.mgc");
assert( bResult );
assert( kStream.GetObjectCount() == 1 );
assert( MgcIsExactlyClass(MgcNode,kStream.GetObjectAt(0)) );
m_spkScene = (MgcNode*) kStream.GetObjectAt(0);
m_spkWireframeState = new MgcWireframeState;
m_spkScene->SetRenderState(m_spkWireframeState);
MgcZBufferState* pkZBufferState = new MgcZBufferState;
pkZBufferState->Enabled() = true;
pkZBufferState->Writeable() = true;
pkZBufferState->Compare() = MgcZBufferState::CF_LEQUAL;
m_spkScene->SetRenderState(pkZBufferState);
MgcMaterialState* pkMaterial = new MgcMaterialState;
pkMaterial->Ambient() = MgcColor(0.5,0.5,0.5);
pkMaterial->Diffuse() = MgcColor(0.99607,0.83920,0.67059);
pkMaterial->Specular() = MgcColor(0.8,0.8,0.8);
m_spkScene->SetRenderState(pkMaterial);
MgcDirectionalLight* pkLight = new MgcDirectionalLight;
pkLight->Direction() = MgcVector3::UNIT_X;
pkLight->Ambient() = MgcColor(0.125,0.125,0.125);
pkLight->Diffuse() = MgcColor(1.0,1.0,1.0);
MgcLightState* pkLightState = new MgcLightState;
pkLightState->Attach(pkLight);
m_spkScene->SetRenderState(pkLightState);
m_spkCamera->Update();
m_spkScene->UpdateGS(0.0);
m_spkScene->UpdateRS();
return true;
}
//---------------------------------------------------------------------------
void TestMorphController::Terminate ()
{
m_spkWireframeState = 0;
m_spkCamera = 0;
m_spkRenderer = 0;
m_spkScene = 0;
}
//---------------------------------------------------------------------------
void TestMorphController::OnIdle ()
{
MeasureTime();
// update the morph animation
if ( m_fBaseTime == -1.0 )
{
m_fBaseTime = (MgcReal) GetCurrentTimeInSeconds();
m_fCurrTime = m_fBaseTime;
}
else
{
m_fCurrTime = (MgcReal) GetCurrentTimeInSeconds();
}
m_spkScene->UpdateGS(m_fCurrTime - m_fBaseTime);
// draw the scene
m_spkRenderer->ClearBuffers();
m_spkRenderer->Draw(m_spkScene);
m_spkRenderer->DisplayBackBuffer();
DrawFrameRate();
DisplayStatistics();
UpdateClicks();
}
//---------------------------------------------------------------------------
bool TestMorphController::WmChar (char cCharCode, long lModifiers)
{
switch ( cCharCode )
{
case '0': // reset frame rate measurements
ResetTime();
return true;
case 'w':
m_spkWireframeState->Enabled() = !m_spkWireframeState->Enabled();
return true;
case 'q':
case 'Q':
case VK_ESCAPE:
PostMessage(GetWindowHandle(),WM_DESTROY,0,0);
return true;
}
return false;
}
//---------------------------------------------------------------------------
void TestMorphController::DisplayStatistics ()
{
char acMsg[256];
MgcReal fDTime = m_fCurrTime - m_fBaseTime;
sprintf(acMsg,"time = %6.2f",fDTime);
unsigned int uiPane = 1;
HWND hStatusWnd = GetStatusWindowHandle();
SendMessage(hStatusWnd,SB_SETTEXT,(WPARAM)uiPane,(LPARAM)acMsg);
SendMessage(hStatusWnd,WM_PAINT,0,0);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -