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;
|
|
|
|
}
|