#include "stdafx.h" /* SMorphedMesh.cpp Dynamic-vertexed mesh for vertex changing Created 2006/05, by JiYoung */ //#include #include "SMorphedMesh.h" #include "KViewPort.h" #include "SDebug_Util.h" //====================================================== // MorphedModel //====================================================== MorphedModel::MorphedModel() : KSeqForm() // KSeqForm() { primitive=NULL; K3DMatrixIdentity(m_matResult); K3DMatrixIdentity(m_matRoot); K3DMatrixIdentity(matLocal); K3DMatrixIdentity(m_matWorld); } MorphedModel::~MorphedModel() { this->close(); } void MorphedModel::close() { if (primitive!=NULL) { delete primitive; primitive=NULL; } K3DMatrixIdentity(m_matResult); K3DMatrixIdentity(matLocal); K3DMatrixIdentity(m_matWorld); } void MorphedModel::init(KMeshPrimitive *source) { assert(primitive==NULL); MorphedPrimitive *p=new MorphedPrimitive(); p->init(source); primitive=p; // Copy transform matrix if (source->GetTransform()!=NULL) { setLocalMatrix(source->GetTransform()); } else { K3DMatrixIdentity(matLocal); } // // NOTE : // Mesh가 bone에 붙을때와 그냥 표시될 때, matLocal(?)의 역할이 다르다? // bone에 붙일 수 있는 구조로 변경이 필요할 지도 모름 // 하여간 게임 본체에 잘 붙여 볼 것. // // // Model initialize example // Set origin-position of each vertexes // if (source->GetTransform()!=NULL) { // K3DMatrix out; // float determinant; // if (NULL != K3DMatrixInverse( &out, &determinant, source->GetTransform())) { // matLocal=out; // } // } //matLocal._43+=10.f; // } // // Inherits // int MorphedModel::Process( DWORD dwTime ) { K3DMatrixMultiply( m_matResult, matLocal, m_matTransform); return 0; } void MorphedModel::Render( KViewportObject *viewport, DWORD flag , const K3DMatrix * pAttachMat ) { if (primitive!=NULL) { primitive->SetTransform(&m_matResult, &m_matWorld); viewport->Register( primitive, 0 ); } }