Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
956 lines
28 KiB
C++
956 lines
28 KiB
C++
#include "CCameraScript.h"
|
||
#include "SceneManager.h"
|
||
#include "SceneStateMgr.h"
|
||
|
||
|
||
extern D3DXVECTOR3 g_vecCube[8];
|
||
extern WORD g_vecCubeIndex[36];
|
||
|
||
|
||
CCameraScript::CCameraScript() {
|
||
|
||
m_pDevice = CSceneManager::GetDevice();
|
||
m_pDevice->GetTransform(D3DTS_VIEW, &m_matBeforeView);
|
||
InitCameraScript();
|
||
m_iFixCount = 0;
|
||
m_bBackWord = false;
|
||
m_bInitPos = false;
|
||
|
||
|
||
|
||
}
|
||
CCameraScript::~CCameraScript() {
|
||
|
||
m_lstEvent.clear();
|
||
m_lstPosSpline.clear();
|
||
m_lstLookSpline.clear();
|
||
|
||
m_pDevice->SetTransform(D3DTS_VIEW, &m_matBeforeView);
|
||
|
||
}
|
||
void CCameraScript::ReWindFix() {
|
||
if(m_iFixCount > 0)
|
||
m_iFixCount--;
|
||
else
|
||
m_iFixCount = (m_iEventNum - 1);
|
||
}
|
||
|
||
void CCameraScript::Rewind() {
|
||
if(m_iBeforeEvent > 0)
|
||
m_iBeforeEvent--;
|
||
else
|
||
m_iBeforeEvent = (m_iEventNum - 1);
|
||
m_fRunFrame = m_lstEvent[m_iBeforeEvent].m_fFrame;
|
||
|
||
}
|
||
|
||
void CCameraScript::FoWindFix() {
|
||
if(m_iFixCount < (m_iEventNum - 1))
|
||
m_iFixCount++;
|
||
else
|
||
m_iFixCount = 0;
|
||
|
||
}
|
||
|
||
void CCameraScript::Fowind() {
|
||
if(m_iBeforeEvent < (m_iEventNum-1))
|
||
m_iBeforeEvent++;
|
||
else
|
||
m_iBeforeEvent = 0;
|
||
m_fRunFrame = m_lstEvent[m_iBeforeEvent].m_fFrame;
|
||
}
|
||
void CCameraScript::Jump(int iEvent) {
|
||
|
||
if((iEvent >= 0) && (iEvent < m_iEventNum)) {
|
||
m_iBeforeEvent = iEvent;
|
||
m_fRunFrame = m_lstEvent[m_iBeforeEvent].m_fFrame;
|
||
}
|
||
}
|
||
void CCameraScript::InitFrame() {
|
||
// m_bStart = false;
|
||
m_dwBeforeTick = 0;
|
||
m_fRunFrame = 0.0f;
|
||
m_iBeforeEvent = 0;
|
||
|
||
|
||
}
|
||
|
||
void CCameraScript::PlayScript(int iRoll,int iLoop,bool bFixPos) {
|
||
|
||
int i;
|
||
if(m_bStart == false)
|
||
return;
|
||
|
||
if(m_lstEvent.empty())
|
||
return;
|
||
|
||
m_dwCurrentTick = timeGetTime();
|
||
float fSkipFrame = 0.0f;
|
||
|
||
if(m_dwBeforeTick == 0) { // ù ½ÃÀÛ ÇÁ·¹ÀÓ
|
||
fSkipFrame = 0;
|
||
m_matBeforePos = *(CSceneManager::m_ViewCamera->GetMatPosition());
|
||
m_matBeforeView2 = CSceneManager::m_ViewCamera->m_matView;
|
||
}
|
||
else {
|
||
fSkipFrame = ((int)m_dwCurrentTick - (int)m_dwBeforeTick) / (float)CAMERAFRAMESTEP;
|
||
}
|
||
|
||
//m_fRunFrame += fSkipFrame;
|
||
m_fRunFrame += 0.6f;
|
||
|
||
if(iRoll == 0) { // Play
|
||
|
||
if(m_fRunFrame < m_lstEvent[m_iBeforeEvent].m_fFrame )
|
||
{
|
||
m_fRunFrame = m_lstEvent[m_iBeforeEvent].m_fFrame;
|
||
}
|
||
|
||
i = m_iBeforeEvent + 1;
|
||
|
||
for( i; i < m_iEventNum; i++ ) {
|
||
if(m_fRunFrame >= m_lstEvent[i].m_fFrame) {
|
||
m_iBeforeEvent = i;
|
||
}
|
||
}
|
||
|
||
if((m_iEventNum - 1) == m_iBeforeEvent) { // Looping ó¸®
|
||
if(iLoop == 1) {
|
||
m_iBeforeEvent = 0;
|
||
m_dwBeforeTick = 0;
|
||
m_fRunFrame = 0.0f;
|
||
|
||
}
|
||
else { // Looping X
|
||
m_iBeforeEvent = m_iEventNum - 1;
|
||
m_fRunFrame = m_lstEvent[m_iBeforeEvent].m_fFrame;
|
||
m_bStart = false;
|
||
InitFrame();
|
||
if(bFixPos)
|
||
{
|
||
CSceneManager::m_ViewCamera->SetMatView(m_matBeforeView2);
|
||
CSceneManager::m_ViewCamera->SetMatPosition(m_matBeforePos);
|
||
CSceneManager::m_ViewCamera->MoveFrustum();
|
||
CSceneManager::m_ViewCamera->SetVecPosition(vector3(m_matBeforePos._41,m_matBeforePos._42,m_matBeforePos._43));
|
||
}
|
||
|
||
}
|
||
}
|
||
float fInterpol;
|
||
if(m_iBeforeEvent == (m_iEventNum - 1))
|
||
fInterpol = 1.0f;
|
||
else {
|
||
fInterpol = (float)(m_fRunFrame - m_lstEvent[m_iBeforeEvent].m_fFrame) / (m_lstEvent[m_iBeforeEvent + 1].m_fFrame - m_lstEvent[m_iBeforeEvent].m_fFrame);
|
||
}
|
||
m_CurrentEvent.m_fFrame = m_fRunFrame;
|
||
|
||
|
||
// Interpolation¿¡ µû¸¥ º¸°£
|
||
D3DXVECTOR3 vecInterpol;
|
||
|
||
D3DXVECTOR3 vecInterPos;
|
||
D3DXVECTOR3 vecInterLook;
|
||
D3DXVECTOR3 vecInterUp;
|
||
|
||
switch(m_lstEvent[m_iBeforeEvent].m_iInterpolation) {
|
||
case C_LINE:
|
||
|
||
if(fInterpol < 0.000001f) {
|
||
vecInterPos = m_lstEvent[m_iBeforeEvent].m_vecCameraPos;
|
||
vecInterLook = m_lstEvent[m_iBeforeEvent].m_vecCameraLook;
|
||
vecInterUp = m_lstEvent[m_iBeforeEvent].m_vecCameraUp;
|
||
}
|
||
else {
|
||
|
||
int PosStart = m_lstEvent[m_iBeforeEvent].m_iPosStart;
|
||
int iInterpolNum = m_lstEvent[m_iBeforeEvent].m_iPosEnd - m_lstEvent[m_iBeforeEvent].m_iPosStart;
|
||
iInterpolNum *= fInterpol;
|
||
vecInterPos = m_lstPosSpline[ PosStart + iInterpolNum];
|
||
|
||
PosStart = m_lstEvent[m_iBeforeEvent].m_iLookStart;
|
||
iInterpolNum = m_lstEvent[m_iBeforeEvent].m_iLookEnd - m_lstEvent[m_iBeforeEvent].m_iLookStart;
|
||
iInterpolNum *= fInterpol;
|
||
vecInterLook = m_lstLookSpline[ PosStart + iInterpolNum];
|
||
|
||
/* vecInterpol = m_lstEvent[m_iBeforeEvent + 1].m_vecCameraPos - m_lstEvent[m_iBeforeEvent].m_vecCameraPos;
|
||
vecInterPos = m_lstEvent[m_iBeforeEvent].m_vecCameraPos + (vecInterpol * fInterpol);
|
||
|
||
vecInterpol = m_lstEvent[m_iBeforeEvent + 1].m_vecCameraLook - m_lstEvent[m_iBeforeEvent].m_vecCameraLook;
|
||
vecInterLook = m_lstEvent[m_iBeforeEvent].m_vecCameraLook + (vecInterpol * fInterpol);
|
||
*/
|
||
vecInterpol = m_lstEvent[m_iBeforeEvent + 1].m_vecCameraUp - m_lstEvent[m_iBeforeEvent].m_vecCameraUp;
|
||
vecInterUp = m_lstEvent[m_iBeforeEvent].m_vecCameraUp + (vecInterpol * fInterpol);
|
||
|
||
}
|
||
|
||
break;
|
||
case C_BEZIER1: // Á¦¾îÁ¡ 3
|
||
if(fInterpol < 0.000001f) {
|
||
vecInterPos = m_lstEvent[m_iBeforeEvent].m_vecCameraPos;
|
||
vecInterLook = m_lstEvent[m_iBeforeEvent].m_vecCameraLook;
|
||
vecInterUp = m_lstEvent[m_iBeforeEvent].m_vecCameraUp;
|
||
}
|
||
else {
|
||
|
||
int PosStart = m_lstEvent[m_iBeforeEvent].m_iPosStart;
|
||
int iInterpolNum = m_lstEvent[m_iBeforeEvent].m_iPosEnd - m_lstEvent[m_iBeforeEvent].m_iPosStart;
|
||
iInterpolNum *= fInterpol;
|
||
vecInterPos = m_lstPosSpline[ PosStart + iInterpolNum];
|
||
|
||
PosStart = m_lstEvent[m_iBeforeEvent].m_iLookStart;
|
||
iInterpolNum = m_lstEvent[m_iBeforeEvent].m_iLookEnd - m_lstEvent[m_iBeforeEvent].m_iLookStart;
|
||
iInterpolNum *= fInterpol;
|
||
vecInterLook = m_lstLookSpline[ PosStart + iInterpolNum];
|
||
|
||
|
||
float fInterpol2 = fInterpol * fInterpol;
|
||
/* vecInterPos = m_lstEvent[m_iBeforeEvent].m_vecCameraPos * ((1.0f - fInterpol) * (1.0f - fInterpol))
|
||
+ (m_lstEvent[m_iBeforeEvent].m_vecControlPoint[0] * 2 * (1.0f - fInterpol) * fInterpol ) + (m_lstEvent[m_iBeforeEvent + 1].m_vecCameraPos * fInterpol2);
|
||
vecInterLook = m_lstEvent[m_iBeforeEvent].m_vecCameraLook * ((1.0f - fInterpol) * (1.0f - fInterpol))
|
||
+ (m_lstEvent[m_iBeforeEvent].m_vecControlPoint[0] * 2 * (1.0f - fInterpol) * fInterpol ) + (m_lstEvent[m_iBeforeEvent + 1].m_vecCameraLook * fInterpol2);*/
|
||
vecInterUp = m_lstEvent[m_iBeforeEvent].m_vecCameraUp * ((1.0f - fInterpol) * (1.0f - fInterpol))
|
||
+ (m_lstEvent[m_iBeforeEvent].m_vecControlPoint[0] * 2 * (1.0f - fInterpol) * fInterpol ) + (m_lstEvent[m_iBeforeEvent + 1].m_vecCameraUp * fInterpol2);
|
||
|
||
|
||
}
|
||
break;
|
||
/*case C_BEZIER2: // Á¦¾îÁ¡ 4
|
||
if(fInterpol < 0.000001f) {
|
||
vecInterPos = m_lstEvent[m_iBeforeEvent].m_vecCameraPos;
|
||
vecInterLook = m_lstEvent[m_iBeforeEvent].m_vecCameraLook;
|
||
vecInterUp = m_lstEvent[m_iBeforeEvent].m_vecCameraUp;
|
||
}
|
||
else {
|
||
|
||
|
||
}
|
||
break;*/
|
||
default:
|
||
break;
|
||
|
||
};
|
||
|
||
m_CurrentEvent.m_vecCameraPos = vecInterPos;
|
||
m_CurrentEvent.m_vecCameraLook = vecInterLook;
|
||
m_CurrentEvent.m_vecCameraUp = D3DXVECTOR3(0.0f,1.0f,0.0f);
|
||
|
||
|
||
}
|
||
|
||
D3DXMatrixLookAtLH(&m_matCurrentFrame,
|
||
&(m_CurrentEvent.m_vecCameraPos),&(m_CurrentEvent.m_vecCameraLook),&(m_CurrentEvent.m_vecCameraUp));
|
||
|
||
m_dwBeforeTick = m_dwCurrentTick = timeGetTime();
|
||
|
||
}
|
||
|
||
bool CCameraScript::SaveScript(char *strFileName) {
|
||
|
||
if((strFileName != NULL) && strlen(strFileName) > 1) {
|
||
FILE *fp = fopen(strFileName,"wb");
|
||
if(fp != NULL) {
|
||
float fVersion = CAMERASCRIPTVERSION;
|
||
fwrite((float *)&fVersion,sizeof(float),1,fp);
|
||
fwrite((int *)&m_iEventNum,sizeof(int),1,fp);
|
||
fwrite((CCameraEvent *)&(m_lstEvent[0]),sizeof(CCameraEvent),m_iEventNum,fp);
|
||
fclose(fp);
|
||
|
||
}
|
||
else {
|
||
return false;
|
||
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
bool CCameraScript::LoadScript(char *strFileName) {
|
||
|
||
if((strFileName != NULL) && strlen(strFileName) > 1) {
|
||
float fVersion = 0.0f;
|
||
|
||
char strPath[256] = {0};
|
||
|
||
strcpy(strPath,EFFECTSCRIPTPATH);
|
||
strcat(strPath,strFileName);
|
||
|
||
|
||
FILE *fp = fopen(strPath,"rb");
|
||
if(fp != NULL) {
|
||
fread((float *)&fVersion,sizeof(float),1,fp);
|
||
if((fVersion >= 0.9f) && (fVersion <= 1.1f)) {
|
||
int i;
|
||
|
||
fread((int *)&m_iEventNum,sizeof(int),1,fp);
|
||
|
||
for( i = 0; i < m_iEventNum; i++ ) {
|
||
CCameraEvent EmptyNode;
|
||
m_lstEvent.push_back(EmptyNode);
|
||
}
|
||
|
||
fread((CCameraEvent *)&(m_lstEvent[0]),sizeof(CCameraEvent),m_iEventNum,fp);
|
||
}
|
||
fclose(fp);
|
||
m_iInsertLook = 1;
|
||
CreateSpline();
|
||
|
||
}
|
||
else {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
void CCameraScript::InitCameraScript(bool bInitPos,D3DXVECTOR3 vecInitPos,D3DXVECTOR3 vecInitLook) {
|
||
m_lstEvent.clear();
|
||
m_iEventNum = 0;
|
||
m_iBeforeEvent = 0;
|
||
m_fRunFrame = 0.0f;
|
||
|
||
m_dwBeforeTick = 0;
|
||
m_bStart = false;
|
||
|
||
m_lstPosSpline.clear();
|
||
m_bCreateSpline = false;
|
||
|
||
m_lstLookSpline.clear();
|
||
m_bCreateLookSpline = false;
|
||
m_iInsertLook = 0;
|
||
m_iFixCount = 0;
|
||
|
||
m_bInitPos = bInitPos;
|
||
m_vecCameraInitPos = vecInitPos;
|
||
m_vecCameraInitLook = vecInitLook;
|
||
|
||
|
||
|
||
|
||
}
|
||
int CCameraScript::GetFixCount(int &iIndex,float &fFrame) {
|
||
if(m_lstEvent.size() > m_iFixCount)
|
||
{
|
||
iIndex = m_lstEvent[m_iFixCount].m_iIndex;
|
||
fFrame = m_lstEvent[m_iFixCount].m_fFrame;
|
||
}
|
||
else
|
||
{
|
||
iIndex = 0;
|
||
fFrame = 0;
|
||
}
|
||
|
||
return m_iFixCount;
|
||
|
||
}
|
||
void CCameraScript::FixLook(int iEvent,D3DXVECTOR3 vecLook) {
|
||
m_lstEvent[iEvent].m_vecCameraLook = vecLook;
|
||
|
||
}
|
||
void CCameraScript::InsertLookPos(D3DXVECTOR3 vecLook) {
|
||
|
||
if(m_iInsertLook >= m_lstEvent.size()) {
|
||
MessageBox(NULL,"Look Pos Ãʰú ","error",MB_OK);
|
||
|
||
return;
|
||
}
|
||
m_lstEvent[m_iInsertLook].m_vecCameraLook = vecLook;
|
||
m_iInsertLook++;
|
||
|
||
char tmp[256]= {0};
|
||
|
||
int iNum = m_iInsertLook - m_lstEvent.size();
|
||
sprintf(tmp,"%d °³ÀÇ Target Point ¸¦ ´õ ÂïÀ»¼ö ÀÖ½À´Ï´Ù.",iNum);
|
||
MessageBox(NULL,tmp,"msg",MB_OK);
|
||
|
||
}
|
||
int CCameraScript::InsertEvent( D3DXVECTOR3 vecPos,D3DXVECTOR3 vecLook,D3DXVECTOR3 vecUp,float fFrame,int iInterpol ) {
|
||
|
||
CCameraEvent Node;
|
||
|
||
Node.m_iIndex = m_iEventNum;
|
||
Node.m_iInterpolation = iInterpol;
|
||
Node.m_vecCameraPos = vecPos;
|
||
Node.m_vecCameraLook = vecLook;
|
||
Node.m_vecCameraUp = vecUp;
|
||
Node.m_fFrame = fFrame;
|
||
|
||
m_lstEvent.push_back(Node);
|
||
|
||
return m_iEventNum++;
|
||
}
|
||
void CCameraScript::FixEvent(int iEvent,D3DXVECTOR3 vecPos,D3DXVECTOR3 vecLook,D3DXVECTOR3 vecUp)
|
||
{
|
||
if((iEvent< 0) || (iEvent >= m_iEventNum) )
|
||
return;
|
||
m_lstEvent[iEvent].m_vecCameraPos = vecPos;
|
||
m_lstEvent[iEvent].m_vecCameraLook = vecLook;
|
||
m_lstEvent[iEvent].m_vecCameraUp = vecUp;
|
||
|
||
}
|
||
void CCameraScript::FixEvent( int iEvent,D3DXVECTOR3 vecPos,D3DXVECTOR3 vecLook,D3DXVECTOR3 vecUp,float fFrame,int iInterpol ) {
|
||
if((iEvent< 0) || (iEvent >= m_iEventNum) )
|
||
return;
|
||
m_lstEvent[iEvent].m_vecCameraPos = vecPos;
|
||
m_lstEvent[iEvent].m_vecCameraLook = vecLook;
|
||
m_lstEvent[iEvent].m_vecCameraUp = vecUp;
|
||
m_lstEvent[iEvent].m_fFrame = fFrame;
|
||
m_lstEvent[iEvent].m_iInterpolation = iInterpol;
|
||
}
|
||
void CCameraScript::DeleteEvent(float fFrame,int iInterpol) {
|
||
|
||
if(m_iEventNum <= 0)
|
||
return;
|
||
int i;
|
||
|
||
for( i = 0 ; i < m_iEventNum; i++ )
|
||
{
|
||
if(((m_lstEvent[i].m_fFrame - fFrame) + (float)(m_lstEvent[i].m_iInterpolation - iInterpol)) <= 0.001f) {
|
||
m_lstEvent.erase(&(m_lstEvent[i]));
|
||
m_iEventNum--;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
void CCameraScript::DeleteEvent(int iIndex) {
|
||
|
||
if((iIndex <= 0) || (iIndex >= m_iEventNum))
|
||
return;
|
||
int i;
|
||
|
||
for( i = 0 ; i < m_iEventNum; i++ )
|
||
{
|
||
if(i == iIndex) {
|
||
m_lstEvent.erase(&(m_lstEvent[i]));
|
||
m_iEventNum--;
|
||
|
||
InitFrame();
|
||
m_iFixCount = 0;
|
||
if(m_iInsertLook >= m_iEventNum)
|
||
m_iInsertLook = (m_iEventNum - 1);
|
||
m_bCreateLookSpline = false;
|
||
m_bCreateSpline = false;
|
||
m_bStart = false;
|
||
|
||
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
void CCameraScript::BackWordEvent() // Event¸¦ µÇµ¹¸°´Ù.
|
||
{
|
||
int iCurrent;
|
||
int iBackCurrent;
|
||
|
||
m_bBackWord = !m_bBackWord;
|
||
|
||
D3DXVECTOR3 vecTmpSwap;
|
||
|
||
|
||
for(int i = 0; i < floor((float)m_iEventNum / 2.0f); i++ )
|
||
{
|
||
iCurrent = i;
|
||
iBackCurrent = (m_iEventNum - 1) - i;
|
||
|
||
if(iCurrent != iBackCurrent)
|
||
{
|
||
vecTmpSwap = m_lstEvent[iCurrent].m_vecCameraLook;
|
||
m_lstEvent[iCurrent].m_vecCameraLook = m_lstEvent[iBackCurrent].m_vecCameraLook;
|
||
m_lstEvent[iBackCurrent].m_vecCameraLook = vecTmpSwap;
|
||
|
||
|
||
vecTmpSwap = m_lstEvent[iCurrent].m_vecCameraPos;
|
||
m_lstEvent[iCurrent].m_vecCameraPos = m_lstEvent[iBackCurrent].m_vecCameraPos;
|
||
m_lstEvent[iBackCurrent].m_vecCameraPos = vecTmpSwap;
|
||
|
||
vecTmpSwap = m_lstEvent[iCurrent].m_vecCameraUp;
|
||
m_lstEvent[iCurrent].m_vecCameraUp = m_lstEvent[iBackCurrent].m_vecCameraUp;
|
||
m_lstEvent[iBackCurrent].m_vecCameraUp = vecTmpSwap;
|
||
|
||
}
|
||
|
||
|
||
}
|
||
if(m_bInitPos)
|
||
{
|
||
D3DXVECTOR3 vecUp = D3DXVECTOR3(0.0f,1.0f,0.0f);
|
||
FixEvent(m_iEventNum -1,m_vecCameraInitPos,m_vecCameraInitLook,vecUp);
|
||
FixEvent(m_iEventNum -2,m_vecCameraInitPos,m_vecCameraInitLook,vecUp);
|
||
}
|
||
|
||
}
|
||
void CCameraScript::SetPlay(bool bFlag,bool bBack,bool bStartPos) {
|
||
m_bStart = bFlag;
|
||
if(bBack && bFlag)
|
||
{
|
||
if(!m_bBackWord)
|
||
{
|
||
BackWordEvent();
|
||
m_iInsertLook = 1;
|
||
CreateSpline();
|
||
}
|
||
}
|
||
else if(bFlag)
|
||
{
|
||
if(m_bBackWord)
|
||
{
|
||
BackWordEvent();
|
||
m_iInsertLook = 1;
|
||
CreateSpline();
|
||
}
|
||
}
|
||
if(bStartPos && bFlag && !bBack) // Start pos ºÎÅÍ º¸°£ ½ÃÀÛ(0 ÇÁ·¹ÀÓ À̺¥Æ® ¼öÁ¤)
|
||
{
|
||
|
||
matrix *matPos= CSceneManager::GetCamera()->GetMatPosition();
|
||
vector3 vecCameraToward = CSceneManager::GetCamera()->GetViewTowardVector();
|
||
//vector3 vecCameraUp = CSceneManager::GetCamera()->GetViewUpVector();
|
||
|
||
D3DXVECTOR3 vecCameraSPos = D3DXVECTOR3(matPos->_41,matPos->_42,matPos->_43);
|
||
D3DXVECTOR3 vecCameraSLook = D3DXVECTOR3(vecCameraSPos.x + vecCameraToward.x * 50.0f,vecCameraSPos.y + vecCameraToward.y* 50.0f,vecCameraSPos.z + vecCameraToward.z* 50.0f);
|
||
//D3DXVECTOR3 vecCameraSUp = D3DXVECTOR3(vecCameraUp.x,vecCameraUp.y,vecCameraUp.z);
|
||
|
||
D3DXVECTOR3 vecCameraSUp = D3DXVECTOR3(0.0f,1.0f,0.0f);
|
||
FixEvent(0,vecCameraSPos,vecCameraSLook,vecCameraSUp);
|
||
m_iInsertLook = 1;
|
||
CreateSpline();
|
||
|
||
}
|
||
|
||
InitFrame();
|
||
if(bFlag == false) {
|
||
CSceneManager::m_ViewCamera->SetMatView(m_matBeforeView2);
|
||
CSceneManager::m_ViewCamera->SetMatPosition(m_matBeforePos);
|
||
CSceneManager::m_ViewCamera->MoveFrustum();
|
||
CSceneManager::m_ViewCamera->SetVecPosition(vector3(m_matBeforePos._41,m_matBeforePos._42,m_matBeforePos._43));
|
||
|
||
}
|
||
}
|
||
void CCameraScript::RenderPos_Up() {
|
||
|
||
int i;
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_LIGHTING,FALSE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TFACTOR);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
||
|
||
m_pDevice->SetVertexShader(D3DFVF_XYZ);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
|
||
D3DXMATRIX identity;
|
||
D3DXMATRIX worldTm;
|
||
|
||
m_pDevice->GetTransform(D3DTS_WORLD,&worldTm);
|
||
for( i = 0; i < m_iEventNum; i++ ) {
|
||
D3DXMatrixIdentity(&identity);
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&identity);
|
||
|
||
identity._41 = m_lstEvent[i].m_vecCameraPos.x + m_lstEvent[i].m_vecCameraUp.x * 50.0f;
|
||
identity._42 = m_lstEvent[i].m_vecCameraPos.y + m_lstEvent[i].m_vecCameraUp.y * 50.0f;
|
||
identity._43 = m_lstEvent[i].m_vecCameraPos.z + m_lstEvent[i].m_vecCameraUp.z * 50.0f;
|
||
|
||
identity._11 = 1.0f;
|
||
identity._22 = 1.0f;
|
||
identity._33 = 1.0f;
|
||
|
||
if(i == m_iFixCount) {
|
||
identity._11 = 9.0f;
|
||
identity._22 = 9.0f;
|
||
identity._33 = 9.0f;
|
||
|
||
}
|
||
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&identity);
|
||
|
||
if((i != 0) && ( i != (m_iEventNum -1)))
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xffff4444);
|
||
else
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xffffffff);
|
||
|
||
|
||
if(i == m_iFixCount) {
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xff0000ff);
|
||
}
|
||
|
||
m_pDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST,
|
||
0,8,12,g_vecCubeIndex,D3DFMT_INDEX16,g_vecCube,sizeof(D3DXVECTOR3));
|
||
|
||
identity._41 = m_lstEvent[i].m_vecCameraPos.x;
|
||
identity._42 = m_lstEvent[i].m_vecCameraPos.y;
|
||
identity._43 = m_lstEvent[i].m_vecCameraPos.z;
|
||
|
||
identity._11 = 1.0f;
|
||
identity._22 = 1.0f;
|
||
identity._33 = 1.0f;
|
||
|
||
if(i == m_iFixCount) {
|
||
identity._11 = 9.0f;
|
||
identity._22 = 9.0f;
|
||
identity._33 = 9.0f;
|
||
|
||
}
|
||
|
||
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&identity);
|
||
|
||
if((i != 0) && ( i != (m_iEventNum -1)))
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xffff0000);
|
||
else
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xffffffff);
|
||
|
||
if(i == m_iFixCount) {
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xff0000ff);
|
||
}
|
||
|
||
m_pDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST,
|
||
0,8,12,g_vecCubeIndex,D3DFMT_INDEX16,g_vecCube,sizeof(D3DXVECTOR3));
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FOGENABLE,FALSE);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FOGENABLE,TRUE);
|
||
|
||
}
|
||
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&worldTm);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
|
||
}
|
||
void CCameraScript::RenderLook() {
|
||
|
||
int i;
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_LIGHTING,FALSE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TFACTOR);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
||
|
||
m_pDevice->SetVertexShader(D3DFVF_XYZ);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
|
||
D3DXMATRIX identity;
|
||
D3DXMATRIX worldTm;
|
||
|
||
m_pDevice->GetTransform(D3DTS_WORLD,&worldTm);
|
||
for( i = 0; i < m_iEventNum; i++ ) {
|
||
|
||
D3DXMatrixIdentity(&identity);
|
||
|
||
identity._41 = m_lstEvent[i].m_vecCameraLook.x;
|
||
identity._42 = m_lstEvent[i].m_vecCameraLook.y;
|
||
identity._43 = m_lstEvent[i].m_vecCameraLook.z;
|
||
|
||
identity._11 = 10.0f;
|
||
identity._22 = 10.0f;
|
||
identity._33 = 10.0f;
|
||
if(i == m_iFixCount) {
|
||
identity._11 = 15.0f;
|
||
identity._22 = 15.0f;
|
||
identity._33 = 15.0f;
|
||
|
||
|
||
}
|
||
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&identity);
|
||
|
||
if((i != 0) && ( i != (m_iEventNum -1)))
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xffffff00);
|
||
else
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xffffffff);
|
||
|
||
if(i == m_iFixCount) {
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xff0000ff);
|
||
}
|
||
|
||
m_pDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST,
|
||
0,8,12,g_vecCubeIndex,D3DFMT_INDEX16,g_vecCube,sizeof(D3DXVECTOR3));
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FOGENABLE,FALSE);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FOGENABLE,TRUE);
|
||
|
||
}
|
||
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&worldTm);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
|
||
}
|
||
void CCameraScript::RenderLookSpline() {
|
||
|
||
if((m_lstLookSpline.size() <= 0) || (m_bCreateLookSpline == false))
|
||
return;
|
||
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_LIGHTING,FALSE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TFACTOR);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
||
|
||
m_pDevice->SetVertexShader(D3DFVF_XYZ);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
|
||
D3DXMATRIX identity;
|
||
D3DXMATRIX worldTm;
|
||
|
||
m_pDevice->GetTransform(D3DTS_WORLD,&worldTm);
|
||
int iSplineNum = m_lstLookSpline.size();
|
||
|
||
|
||
D3DXMatrixIdentity(&identity);
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&identity);
|
||
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xffffff00);
|
||
|
||
m_pDevice->DrawPrimitiveUP(D3DPT_LINESTRIP,(iSplineNum - 1),&(m_lstLookSpline[0]),sizeof(D3DXVECTOR3));
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FOGENABLE,TRUE);
|
||
|
||
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&worldTm);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
|
||
}
|
||
|
||
void CCameraScript::RenderPosSpline() {
|
||
|
||
if((m_lstPosSpline.size() <= 0) || (m_bCreateSpline == false))
|
||
return;
|
||
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_LIGHTING,FALSE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TFACTOR);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
||
|
||
m_pDevice->SetVertexShader(D3DFVF_XYZ);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
|
||
D3DXMATRIX identity;
|
||
D3DXMATRIX worldTm;
|
||
|
||
m_pDevice->GetTransform(D3DTS_WORLD,&worldTm);
|
||
int iSplineNum = m_lstPosSpline.size();
|
||
|
||
|
||
D3DXMatrixIdentity(&identity);
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&identity);
|
||
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xff00ffff);
|
||
|
||
m_pDevice->DrawPrimitiveUP(D3DPT_LINESTRIP,(iSplineNum - 1),&(m_lstPosSpline[0]),sizeof(D3DXVECTOR3));
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FOGENABLE,TRUE);
|
||
|
||
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&worldTm);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
|
||
}
|
||
void CCameraScript::RenderLine() {
|
||
|
||
int i;
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_LIGHTING,FALSE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TFACTOR);
|
||
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
|
||
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
|
||
|
||
m_pDevice->SetVertexShader(D3DFVF_XYZ);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
|
||
D3DXMATRIX identity;
|
||
D3DXMATRIX worldTm;
|
||
|
||
m_pDevice->GetTransform(D3DTS_WORLD,&worldTm);
|
||
for( i = 0; i < m_iEventNum; i++ ) {
|
||
|
||
D3DXVECTOR3 vecUp = D3DXVECTOR3(m_lstEvent[i].m_vecCameraPos.x + m_lstEvent[i].m_vecCameraUp.x * 50.0f,
|
||
m_lstEvent[i].m_vecCameraPos.y + m_lstEvent[i].m_vecCameraUp.y * 50.0f,
|
||
m_lstEvent[i].m_vecCameraPos.z + m_lstEvent[i].m_vecCameraUp.z * 50.0f);
|
||
D3DXVECTOR3 vecPos = D3DXVECTOR3(m_lstEvent[i].m_vecCameraPos.x,
|
||
m_lstEvent[i].m_vecCameraPos.y,
|
||
m_lstEvent[i].m_vecCameraPos.z);
|
||
|
||
D3DXVECTOR3 vecLook = D3DXVECTOR3(m_lstEvent[i].m_vecCameraLook.x,
|
||
m_lstEvent[i].m_vecCameraLook.y,
|
||
m_lstEvent[i].m_vecCameraLook.z);
|
||
|
||
|
||
D3DXVECTOR3 vecLinePos[2];
|
||
vecLinePos[0] = vecUp;
|
||
vecLinePos[1] = vecPos;
|
||
/* vecLinePos[2] = vecPos;
|
||
vecLinePos[3] = vecLook;
|
||
*/
|
||
|
||
D3DXMatrixIdentity(&identity);
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&identity);
|
||
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0xff000000);
|
||
m_pDevice->DrawPrimitiveUP(D3DPT_LINELIST,1,vecLinePos,sizeof(D3DXVECTOR3));
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_FOGENABLE,TRUE);
|
||
|
||
}
|
||
|
||
m_pDevice->SetTransform(D3DTS_WORLD,&worldTm);
|
||
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
|
||
CSceneStateMgr::_SetD3DRenderState(D3DRS_ZENABLE,TRUE);
|
||
|
||
}
|
||
void CCameraScript::CreateSpline() {
|
||
|
||
m_lstPosSpline.clear();
|
||
m_lstLookSpline.clear();
|
||
|
||
|
||
float fU,fU2,fU3;
|
||
float i,j;
|
||
|
||
for( i = 0; i < (m_iEventNum); i++ ) {
|
||
m_lstEvent[i].m_iPosStart = m_lstPosSpline.size();
|
||
|
||
for(j = 0;j < CAMERASPLINEUNIT;j++) {
|
||
fU = (float)j / (float)CAMERASPLINEUNIT;
|
||
fU2 = fU * fU;
|
||
fU3 = fU2 * fU;
|
||
D3DXVECTOR3 vecNode;
|
||
|
||
vecNode.x = ( (-1 * fU3 + 3 * fU2 - 3*fU + 1) *
|
||
m_lstEvent[(i == 0) ? 0 : (i - 1)].m_vecCameraPos.x +
|
||
(3* fU3 - 6 * fU2 + 0 * fU + 4) *
|
||
m_lstEvent[i + 0].m_vecCameraPos.x +
|
||
(-3* fU3 + 3 * fU2 + 3 * fU + 1) *
|
||
m_lstEvent[(i <= (m_iEventNum - 2)) ? i + 1 : i].m_vecCameraPos.x +
|
||
(1* fU3 + 0 * fU2 + 0 * fU + 0) *
|
||
m_lstEvent[(i <= (m_iEventNum - 3)) ? i + 2 : i].m_vecCameraPos.x) / 6.0f;
|
||
vecNode.y = ( (-1 * fU3 + 3 * fU2 - 3*fU + 1) *
|
||
m_lstEvent[(i == 0) ? 0 : (i - 1)].m_vecCameraPos.y +
|
||
(3* fU3 - 6 * fU2 + 0 * fU + 4) *
|
||
m_lstEvent[i + 0].m_vecCameraPos.y +
|
||
(-3* fU3 + 3 * fU2 + 3 * fU + 1) *
|
||
m_lstEvent[(i <= (m_iEventNum - 2)) ? i + 1 : i].m_vecCameraPos.y +
|
||
(1* fU3 + 0 * fU2 + 0 * fU + 0) *
|
||
m_lstEvent[(i <= (m_iEventNum - 3)) ? i + 2 : i].m_vecCameraPos.y) / 6.0f;
|
||
vecNode.z = ( (-1 * fU3 + 3 * fU2 - 3*fU + 1) *
|
||
m_lstEvent[(i == 0) ? 0 : (i - 1)].m_vecCameraPos.z +
|
||
(3* fU3 - 6 * fU2 + 0 * fU + 4) *
|
||
m_lstEvent[i + 0].m_vecCameraPos.z +
|
||
(-3* fU3 + 3 * fU2 + 3 * fU + 1) *
|
||
m_lstEvent[(i <= (m_iEventNum - 2)) ? i + 1 : i].m_vecCameraPos.z +
|
||
(1* fU3 + 0 * fU2 + 0 * fU + 0) *
|
||
m_lstEvent[(i <= (m_iEventNum - 3)) ? i + 2 : i].m_vecCameraPos.z) / 6.0f;
|
||
|
||
m_lstPosSpline.push_back(vecNode);
|
||
|
||
}
|
||
m_lstEvent[i].m_iPosEnd = m_lstPosSpline.size();
|
||
}
|
||
m_bCreateSpline = true;
|
||
if(m_iInsertLook <= 0)
|
||
{
|
||
m_bCreateLookSpline = false;
|
||
return;
|
||
}
|
||
else {
|
||
|
||
for( i = 0; i < (m_iEventNum); i++ ) {
|
||
m_lstEvent[i].m_iLookStart = m_lstLookSpline.size();
|
||
for(j = 0;j < CAMERASPLINEUNIT;j++) {
|
||
fU = (float)j / (float)CAMERASPLINEUNIT;
|
||
fU2 = fU * fU;
|
||
fU3 = fU2 * fU;
|
||
D3DXVECTOR3 vecNode;
|
||
|
||
vecNode.x = ( (-1 * fU3 + 3 * fU2 - 3*fU + 1) *
|
||
m_lstEvent[(i == 0) ? 0 : (i - 1)].m_vecCameraLook.x +
|
||
(3* fU3 - 6 * fU2 + 0 * fU + 4) *
|
||
m_lstEvent[i + 0].m_vecCameraLook.x +
|
||
(-3* fU3 + 3 * fU2 + 3 * fU + 1) *
|
||
m_lstEvent[(i <= (m_iEventNum - 2)) ? i + 1 : i].m_vecCameraLook.x +
|
||
(1* fU3 + 0 * fU2 + 0 * fU + 0) *
|
||
m_lstEvent[(i <= (m_iEventNum - 3)) ? i + 2 : i].m_vecCameraLook.x) / 6.0f;
|
||
vecNode.y = ( (-1 * fU3 + 3 * fU2 - 3*fU + 1) *
|
||
m_lstEvent[(i == 0) ? 0 : (i - 1)].m_vecCameraLook.y +
|
||
(3* fU3 - 6 * fU2 + 0 * fU + 4) *
|
||
m_lstEvent[i + 0].m_vecCameraLook.y +
|
||
(-3* fU3 + 3 * fU2 + 3 * fU + 1) *
|
||
m_lstEvent[(i <= (m_iEventNum - 2)) ? i + 1 : i].m_vecCameraLook.y +
|
||
(1* fU3 + 0 * fU2 + 0 * fU + 0) *
|
||
m_lstEvent[(i <= (m_iEventNum - 3)) ? i + 2 : i].m_vecCameraLook.y) / 6.0f;
|
||
vecNode.z = ( (-1 * fU3 + 3 * fU2 - 3*fU + 1) *
|
||
m_lstEvent[(i == 0) ? 0 : (i - 1)].m_vecCameraLook.z +
|
||
(3* fU3 - 6 * fU2 + 0 * fU + 4) *
|
||
m_lstEvent[i + 0].m_vecCameraLook.z +
|
||
(-3* fU3 + 3 * fU2 + 3 * fU + 1) *
|
||
m_lstEvent[(i <= (m_iEventNum - 2)) ? i + 1 : i].m_vecCameraLook.z +
|
||
(1* fU3 + 0 * fU2 + 0 * fU + 0) *
|
||
m_lstEvent[(i <= (m_iEventNum - 3)) ? i + 2 : i].m_vecCameraLook.z) / 6.0f;
|
||
|
||
m_lstLookSpline.push_back(vecNode);
|
||
|
||
}
|
||
m_lstEvent[i].m_iLookEnd = m_lstLookSpline.size();
|
||
}
|
||
}
|
||
m_bCreateLookSpline = true;
|
||
|
||
}
|