123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #include "Private.h"
- #include "TransformVisitor.h"
- #include "Group.h"
- #include "Shape3D.h"
- #include "Sound.h"
- #include "Camera.h"
- #include "Light.h"
- #include "BillBoard.h"
- #include "CollisionBounds.h"
- #include "Polygon.h"
- #include "EMath.h"
- TransformVisitor * TransformVisitor::p_TransformVisitor = NULL;
- TransformVisitor::TransformVisitor() {
- p_GroupCamera = NULL;
- }
- TransformVisitor::~TransformVisitor() {
- p_TransformVisitor = NULL;
- }
- TransformVisitor * TransformVisitor::getInstance() {
- if (p_TransformVisitor == NULL) {
- p_TransformVisitor = new TransformVisitor();
- }
- return p_TransformVisitor;
- }
- void TransformVisitor::setCamera(Group * g) {
- p_GroupCamera = g;
- }
- void TransformVisitor::empty() {
- }
- void TransformVisitor::visit(Group* g) {
-
- if (g->m_iProperties & EM_GROUP_NO_TRANSFORM) return;
- if (g->m_iProperties & EM_GROUP_TRANSFORM_ONCE) {
- g->unsetProperty(EM_GROUP_TRANSFORM_ONCE);
- g->setProperty(EM_GROUP_NO_TRANSFORM);
- }
-
- if (g->p_Parent == NULL) {
-
- EMath::matrixMulti(g->m_mtxSrc, EMath::identityMatrix, g->m_mtxTrans);
- } else {
- EMath::matrixMulti(g->m_mtxSrc, g->p_Parent->m_mtxTrans, g->m_mtxTrans);
- }
-
-
- vector<Shape3D*>::iterator shapeIter = g->m_vShape3D.begin();
- vector<Shape3D*>::iterator shapeEnd = g->m_vShape3D.end();
- for ( ; shapeIter != shapeEnd; ++shapeIter) {
-
- vector<Polygon3D*>::iterator polyIter = (*shapeIter)->m_vPolygon.begin();
- vector<Polygon3D*>::iterator polyEnd = (*shapeIter)->m_vPolygon.end();
-
-
- for ( ; polyIter != polyEnd; ++polyIter) {
-
-
- EMathApplyMatrixRot(g->m_mtxTrans, (*polyIter)->m_nmlSrc, (*polyIter)->m_nmlTrans);
-
-
-
- }
-
-
- vector<Vertex3D>::iterator srcIter = (*shapeIter)->m_vVtxSrc.begin();
- vector<Vertex3D>::iterator srcEnd = (*shapeIter)->m_vVtxSrc.end();
- vector<Vertex3D>::iterator transIter = (*shapeIter)->m_vVtxTrans.begin();
- vector<Vertex3D>::iterator nmlSrcIter = (*shapeIter)->m_vNmlSrc.begin();
- vector<Vertex3D>::iterator nmlTransIter = (*shapeIter)->m_vNmlTrans.begin();
-
-
-
-
-
-
-
-
-
-
-
- for ( ; srcIter != srcEnd;
- ++srcIter, ++transIter, ++nmlSrcIter, ++nmlTransIter) {
-
-
- EMathApplyMatrix(g->m_mtxTrans, (*srcIter), (*transIter));
- EMathApplyMatrixRot(g->m_mtxTrans, (*nmlSrcIter), (*nmlTransIter));
-
-
-
-
- EM_COUT_D("TransformVisitor::visit() " << srcIter <<" "<<
- (*srcIter).x <<" "<< (*srcIter).y <<" "<< (*srcIter).z <<" -> "<<
- (*transIter).x <<" "<< (*transIter).y <<" "<< (*transIter).z, 0);
- }
- }
-
-
-
- if (g->p_BillBoard != NULL) {
- EMath::applyMatrix(g->m_mtxTrans, g->p_BillBoard->m_vtxSrc, g->p_BillBoard->m_vtxTrans);
- }
-
- if (g->p_Light != NULL) {
- EMath::applyMatrix(g->m_mtxTrans, g->p_Light->m_vtxSrc, g->p_Light->m_vtxTrans);
- }
-
- if (g->p_CollisionBounds != NULL) {
- g->p_CollisionBounds->transform(g->m_mtxTrans);
- }
- }
|