Changeset 408 for cafu/trunk
- Timestamp:
- 10/14/11 11:54:40 (7 months ago)
- Location:
- cafu/trunk
- Files:
-
- 2 added
- 2 removed
- 6 modified
-
CaWE/MapHelperModel.cpp (modified) (3 diffs)
-
CaWE/MapModel.cpp (modified) (3 diffs)
-
CaWE/ModelEditor/ModelDocument.cpp (modified) (2 diffs)
-
Libs/Models/Loader.cpp (modified) (1 diff)
-
Libs/Models/Loader_dummy.cpp (added)
-
Libs/Models/Loader_dummy.hpp (added)
-
Libs/Models/Model_dummy.cpp (deleted)
-
Libs/Models/Model_dummy.hpp (deleted)
-
Libs/Models/Model_proxy.cpp (modified) (4 diffs)
-
Libs/SConscript (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
cafu/trunk/CaWE/MapHelperModel.cpp
r285 r408 34 34 #include "Math3D/BoundingBox.hpp" 35 35 #include "Math3D/Matrix3x3.hpp" 36 #include "Models/Model_dummy.hpp"37 36 #include "EditorMaterialManager.hpp" 38 37 #include "MaterialSystem/Renderer.hpp" … … 107 106 108 107 // TODO: Cache! 109 if (dynamic_cast<const ModelDummyT*>(m_ModelProxy.GetRealModel())==NULL) 110 { 111 const cf::math::AnglesfT Angles=m_ParentEntity->GetAngles(); 112 113 // The 3D bounds are the bounds of the oriented model's first sequence, so that frustum culling works properly in the 3D view. 114 Vector3fT VerticesBB[8]; 115 m_ModelProxy.GetBB(GetSequenceNr(), 0.0f).GetCornerVertices(VerticesBB); 116 117 // Rotate all eight vertices. 118 for (unsigned long VertexNr=0; VertexNr<8; VertexNr++) 119 VerticesBB[VertexNr]=VerticesBB[VertexNr].GetRotX(Angles[ROLL]).GetRotY(-Angles[PITCH]).GetRotZ(Angles[YAW]); 120 121 // Build a new BB of the rotated BB. 122 BoundingBox3fT RotBB(VerticesBB[0]); 123 124 for (unsigned long VertexNr=1; VertexNr<8; VertexNr++) 125 RotBB.Insert(VerticesBB[VertexNr]); 126 127 RotBB.Min+=Origin; 128 RotBB.Max+=Origin; 129 130 return RotBB; 131 } 132 133 return BoundingBox3fT(Origin-Vector3fT(10, 10, 10), Origin+Vector3fT(10, 10, 10)); 108 const cf::math::AnglesfT Angles=m_ParentEntity->GetAngles(); 109 110 // The 3D bounds are the bounds of the oriented model's first sequence, so that frustum culling works properly in the 3D view. 111 Vector3fT VerticesBB[8]; 112 m_ModelProxy.GetBB(GetSequenceNr(), 0.0f).GetCornerVertices(VerticesBB); 113 114 // Rotate all eight vertices. 115 for (unsigned long VertexNr=0; VertexNr<8; VertexNr++) 116 VerticesBB[VertexNr]=VerticesBB[VertexNr].GetRotX(Angles[ROLL]).GetRotY(-Angles[PITCH]).GetRotZ(Angles[YAW]); 117 118 // Build a new BB of the rotated BB. 119 BoundingBox3fT RotBB(VerticesBB[0]); 120 121 for (unsigned long VertexNr=1; VertexNr<8; VertexNr++) 122 RotBB.Insert(VerticesBB[VertexNr]); 123 124 RotBB.Min+=Origin; 125 RotBB.Max+=Origin; 126 127 return RotBB; 134 128 } 135 129 … … 150 144 UpdateModelCache(); 151 145 152 if (dynamic_cast<const ModelDummyT*>(m_ModelProxy.GetRealModel())==NULL) 146 const Vector3fT ViewPoint=Renderer.GetViewWin3D().GetCamera().Pos; 147 const float ModelDist=length(Origin-ViewPoint); 148 149 if (Options.view3d.AnimateModels) 150 m_ModelFrameNr=m_ModelProxy.AdvanceFrameNr(SequenceNr, m_ModelFrameNr, float(m_Timer.GetSecondsSinceLastCall())); 151 152 if (ModelDist < float(Options.view3d.ModelDistance)) 153 153 { 154 const Vector3fT ViewPoint=Renderer.GetViewWin3D().GetCamera().Pos; 155 const float ModelDist=length(Origin-ViewPoint); 156 157 if (Options.view3d.AnimateModels) 158 m_ModelFrameNr=m_ModelProxy.AdvanceFrameNr(SequenceNr, m_ModelFrameNr, float(m_Timer.GetSecondsSinceLastCall())); 159 160 if (ModelDist<float(Options.view3d.ModelDistance)) 161 { 162 const cf::math::AnglesfT Angles=m_ParentEntity->GetAngles(); 163 const float CAFU_ENG_SCALE=25.4f; 164 165 MatSys::Renderer->SetCurrentAmbientLightColor(1.0f, 1.0f, 1.0f); 166 MatSys::Renderer->PushMatrix(MatSys::RendererI::MODEL_TO_WORLD); 167 168 MatSys::Renderer->Translate(MatSys::RendererI::MODEL_TO_WORLD, Origin[0], Origin[1], Origin[2]); 169 MatSys::Renderer->RotateZ (MatSys::RendererI::MODEL_TO_WORLD, Angles[YAW ]); 170 MatSys::Renderer->RotateY (MatSys::RendererI::MODEL_TO_WORLD, -Angles[PITCH]); 171 MatSys::Renderer->RotateX (MatSys::RendererI::MODEL_TO_WORLD, Angles[ROLL ]); 172 173 m_ModelProxy.Draw(SequenceNr, m_ModelFrameNr, CAFU_ENG_SCALE*ModelDist, NULL); 174 175 MatSys::Renderer->PopMatrix(MatSys::RendererI::MODEL_TO_WORLD); 176 177 if (m_ParentEntity->IsSelected()) Renderer.RenderBox(GetBB(), Options.colors.Selection, false /* Solid? */); 178 return; 179 } 154 const cf::math::AnglesfT Angles=m_ParentEntity->GetAngles(); 155 const float CAFU_ENG_SCALE=25.4f; 156 157 MatSys::Renderer->SetCurrentAmbientLightColor(1.0f, 1.0f, 1.0f); 158 MatSys::Renderer->PushMatrix(MatSys::RendererI::MODEL_TO_WORLD); 159 160 MatSys::Renderer->Translate(MatSys::RendererI::MODEL_TO_WORLD, Origin[0], Origin[1], Origin[2]); 161 MatSys::Renderer->RotateZ (MatSys::RendererI::MODEL_TO_WORLD, Angles[YAW ]); 162 MatSys::Renderer->RotateY (MatSys::RendererI::MODEL_TO_WORLD, -Angles[PITCH]); 163 MatSys::Renderer->RotateX (MatSys::RendererI::MODEL_TO_WORLD, Angles[ROLL ]); 164 165 m_ModelProxy.Draw(SequenceNr, m_ModelFrameNr, CAFU_ENG_SCALE*ModelDist, NULL); 166 167 MatSys::Renderer->PopMatrix(MatSys::RendererI::MODEL_TO_WORLD); 168 169 if (m_ParentEntity->IsSelected()) Renderer.RenderBox(GetBB(), Options.colors.Selection, false /* Solid? */); 180 170 } 181 182 // Did not render the real model (either because we only have a dummy model, 183 // or the distance was too great), thus render a replacement bounding-box. 184 Renderer.RenderBox(GetBB(), 185 m_ParentEntity->IsSelected() ? Options.colors.Selection : m_ParentEntity->GetColor(Options.view2d.UseGroupColors), true /* Solid? */); 171 else 172 { 173 // Did not render the real model (the distance was too great), thus render a replacement bounding-box. 174 Renderer.RenderBox(GetBB(), 175 m_ParentEntity->IsSelected() ? Options.colors.Selection : m_ParentEntity->GetColor(Options.view2d.UseGroupColors), true /* Solid? */); 176 } 186 177 } 187 178 -
cafu/trunk/CaWE/MapModel.cpp
r285 r408 31 31 #include "Renderer3D.hpp" 32 32 33 #include "Models/Model_dummy.hpp"34 33 #include "MaterialSystem/Renderer.hpp" 35 34 #include "MaterialSystem/Mesh.hpp" … … 159 158 { 160 159 // TODO: Cache! 161 if (dynamic_cast<const ModelDummyT*>(m_Model.GetRealModel())==NULL) 162 { 163 // The 3D bounds are the bounds of the oriented model's first sequence, so that frustum culling works properly in the 3D view. 164 Vector3fT VerticesBB[8]; 165 m_Model.GetBB(m_SeqNumber, 0.0f).GetCornerVertices(VerticesBB); 166 167 // Rotate all eight vertices. 168 for (unsigned long VertexNr=0; VertexNr<8; VertexNr++) 169 VerticesBB[VertexNr]=VerticesBB[VertexNr].GetRotX(m_Angles[ROLL]).GetRotY(m_Angles[PITCH]).GetRotZ(m_Angles[YAW]); 170 171 // Build a new BB of the rotated BB. 172 BoundingBox3fT RotBB(VerticesBB[0]); 173 174 for (unsigned long VertexNr=1; VertexNr<8; VertexNr++) 175 RotBB.Insert(VerticesBB[VertexNr]); 176 177 RotBB.Min=RotBB.Min*m_Scale+m_Origin; 178 RotBB.Max=RotBB.Max*m_Scale+m_Origin; 179 180 return RotBB; 181 } 182 183 return BoundingBox3fT(m_Origin-Vector3fT(10, 10, 10), m_Origin+Vector3fT(10, 10, 10)); 160 // The 3D bounds are the bounds of the oriented model's first sequence, so that frustum culling works properly in the 3D view. 161 Vector3fT VerticesBB[8]; 162 m_Model.GetBB(m_SeqNumber, 0.0f).GetCornerVertices(VerticesBB); 163 164 // Rotate all eight vertices. 165 for (unsigned long VertexNr=0; VertexNr<8; VertexNr++) 166 VerticesBB[VertexNr]=VerticesBB[VertexNr].GetRotX(m_Angles[ROLL]).GetRotY(m_Angles[PITCH]).GetRotZ(m_Angles[YAW]); 167 168 // Build a new BB of the rotated BB. 169 BoundingBox3fT RotBB(VerticesBB[0]); 170 171 for (unsigned long VertexNr=1; VertexNr<8; VertexNr++) 172 RotBB.Insert(VerticesBB[VertexNr]); 173 174 RotBB.Min=RotBB.Min*m_Scale+m_Origin; 175 RotBB.Max=RotBB.Max*m_Scale+m_Origin; 176 177 return RotBB; 184 178 } 185 179 … … 209 203 void MapModelT::Render3D(Renderer3DT& Renderer) const 210 204 { 211 if (dynamic_cast<const ModelDummyT*>(m_Model.GetRealModel())==NULL) 205 const Vector3fT ViewPoint=Renderer.GetViewWin3D().GetCamera().Pos; 206 const float ModelDist=length(m_Origin-ViewPoint); 207 208 if (Options.view3d.AnimateModels && m_Animated) 209 m_FrameNumber=m_Model.AdvanceFrameNr(m_SeqNumber, m_FrameNumber, float(m_Timer.GetSecondsSinceLastCall())*m_FrameTimeScale); 210 211 if (ModelDist<float(Options.view3d.ModelDistance)) 212 212 { 213 const Vector3fT ViewPoint=Renderer.GetViewWin3D().GetCamera().Pos; 214 const float ModelDist=length(m_Origin-ViewPoint); 215 216 if (Options.view3d.AnimateModels && m_Animated) 217 m_FrameNumber=m_Model.AdvanceFrameNr(m_SeqNumber, m_FrameNumber, float(m_Timer.GetSecondsSinceLastCall())*m_FrameTimeScale); 218 219 if (ModelDist<float(Options.view3d.ModelDistance)) 220 { 221 const float CAFU_ENG_SCALE=25.4f; 222 223 MatSys::Renderer->SetCurrentAmbientLightColor(1.0f, 1.0f, 1.0f); 224 MatSys::Renderer->PushMatrix(MatSys::RendererI::MODEL_TO_WORLD); 225 226 MatSys::Renderer->Translate(MatSys::RendererI::MODEL_TO_WORLD, m_Origin.x, m_Origin.y, m_Origin.z); 227 MatSys::Renderer->RotateZ (MatSys::RendererI::MODEL_TO_WORLD, m_Angles[YAW ]); 228 MatSys::Renderer->RotateY (MatSys::RendererI::MODEL_TO_WORLD, m_Angles[PITCH]); 229 MatSys::Renderer->RotateX (MatSys::RendererI::MODEL_TO_WORLD, m_Angles[ROLL ]); 230 MatSys::Renderer->Scale (MatSys::RendererI::MODEL_TO_WORLD, m_Scale); 231 232 m_Model.Draw(m_SeqNumber, m_FrameNumber, CAFU_ENG_SCALE*ModelDist, NULL); 233 234 MatSys::Renderer->PopMatrix(MatSys::RendererI::MODEL_TO_WORLD); 235 236 if (IsSelected()) Renderer.RenderBox(GetBB(), Options.colors.Selection, false /* Solid? */); 237 } 238 else 239 { 240 // Did not render the real model (the distance was too great), thus render a replacement bounding-box. 241 Renderer.RenderBox(GetBB(), 242 IsSelected() ? Options.colors.Selection : GetColor(Options.view2d.UseGroupColors), true /* Solid? */); 243 } 213 const float CAFU_ENG_SCALE=25.4f; 214 215 MatSys::Renderer->SetCurrentAmbientLightColor(1.0f, 1.0f, 1.0f); 216 MatSys::Renderer->PushMatrix(MatSys::RendererI::MODEL_TO_WORLD); 217 218 MatSys::Renderer->Translate(MatSys::RendererI::MODEL_TO_WORLD, m_Origin.x, m_Origin.y, m_Origin.z); 219 MatSys::Renderer->RotateZ (MatSys::RendererI::MODEL_TO_WORLD, m_Angles[YAW ]); 220 MatSys::Renderer->RotateY (MatSys::RendererI::MODEL_TO_WORLD, m_Angles[PITCH]); 221 MatSys::Renderer->RotateX (MatSys::RendererI::MODEL_TO_WORLD, m_Angles[ROLL ]); 222 MatSys::Renderer->Scale (MatSys::RendererI::MODEL_TO_WORLD, m_Scale); 223 224 m_Model.Draw(m_SeqNumber, m_FrameNumber, CAFU_ENG_SCALE*ModelDist, NULL); 225 226 MatSys::Renderer->PopMatrix(MatSys::RendererI::MODEL_TO_WORLD); 227 228 if (IsSelected()) Renderer.RenderBox(GetBB(), Options.colors.Selection, false /* Solid? */); 244 229 } 245 230 else 246 231 { 247 // Did not render the real model ( we only have a dummy model), thus render a replacement bounding-box.232 // Did not render the real model (the distance was too great), thus render a replacement bounding-box. 248 233 Renderer.RenderBox(GetBB(), 249 234 IsSelected() ? Options.colors.Selection : GetColor(Options.view2d.UseGroupColors), true /* Solid? */); -
cafu/trunk/CaWE/ModelEditor/ModelDocument.cpp
r406 r408 31 31 #include "Models/Loader_cmdl.hpp" 32 32 #include "Models/Loader_dlod.hpp" 33 #include "Models/Loader_dummy.hpp" 33 34 #include "Models/Loader_fbx.hpp" 34 35 #include "Models/Loader_lwo.hpp" … … 270 271 else if (cf::String::EndsWith(fn, "cmdl" )) { LoaderCafuT Loader(fn, Flags); return new CafuModelT(Loader); } 271 272 else if (cf::String::EndsWith(fn, "dae" )) { LoaderFbxT Loader(fn, UserCbs, Flags); return new CafuModelT(Loader); } 273 else if (cf::String::EndsWith(fn, "dummy" )) { LoaderDummyT Loader(fn, Flags); return new CafuModelT(Loader); } 272 274 else if (cf::String::EndsWith(fn, "dxf" )) { LoaderFbxT Loader(fn, UserCbs, Flags); return new CafuModelT(Loader); } 273 275 else if (cf::String::EndsWith(fn, "fbx" )) { LoaderFbxT Loader(fn, UserCbs, Flags); return new CafuModelT(Loader); } -
cafu/trunk/Libs/Models/Loader.cpp
r358 r408 149 149 Mat.PolygonMode =MaterialT::Wireframe; 150 150 // Mat.DepthOffset =-1.0f; 151 Mat.DiffMapComp =MapCompositionT("file-not-found", "."); 151 152 // Mat.RedGen =ExpressionT(1.0f); 152 Mat.UseMeshColors =true;153 // Mat.TwoSided =true; // Required e.g. for terrains being selected.153 // Mat.UseMeshColors =true; // Mesh colors aren't used for rendering models, but unfortunately required for rendering wire-frame without diffuse-map texture image. 154 Mat.TwoSided =true; // For wire-frame, render the backsides as well. 154 155 Mat.meta_EditorSave=EditorSave; 155 156 -
cafu/trunk/Libs/Models/Model_proxy.cpp
r406 r408 23 23 #include "Loader_cmdl.hpp" 24 24 #include "Loader_dlod.hpp" 25 #include "Loader_dummy.hpp" 25 26 #include "Loader_lwo.hpp" 26 27 #include "Loader_md5.hpp" 27 28 #include "Loader_mdl.hpp" 28 29 #include "Model_cmdl.hpp" 29 #include "Model_dummy.hpp"30 30 #include "Model_proxy.hpp" 31 31 #include "String.hpp" … … 80 80 ModelPoolManagerT() 81 81 { 82 ModelPool .PushBack(new ModelDummyT("dummy")); 82 LoaderDummyT Loader("dummy"); 83 84 ModelPool .PushBack(new CafuModelT(Loader)); 83 85 ModelPoolCounts.PushBack(1); 84 86 } … … 134 136 else if (cf::String::EndsWith(FileName, "md5mesh")) { LoaderMd5T Loader(FileName); NewModel=new CafuModelT(Loader); } 135 137 // else if (cf::String::EndsWith(FileName, "obj" )) { LoaderFbxT Loader(FileName); NewModel=new CafuModelT(Loader); } 136 else throw ModelT::LoadError();138 else { LoaderDummyT Loader(FileName); NewModel=new CafuModelT(Loader); } 137 139 138 140 // LoaderAssimpT Loader(fn, Flags); … … 143 145 // Okay, the model could not be loaded for some reason. 144 146 // Do just substitute a dummy model for now. 145 NewModel=new ModelDummyT(FileName); 147 LoaderDummyT Loader(FileName); 148 149 NewModel=new CafuModelT(Loader); 146 150 } 147 151 -
cafu/trunk/Libs/SConscript
r406 r408 13 13 FileSys/FileManImpl.cpp FileSys/FileSys_LocalPath.cpp FileSys/FileSys_ZipArchive_GV.cpp FileSys/File_local.cpp FileSys/File_memory.cpp FileSys/Password.cpp 14 14 MapFile.cpp 15 Models/Loader.cpp Models/Loader_ase.cpp Models/Loader_ dlod.cpp Models/Loader_cmdl.cpp Models/Loader_lwo.cpp Models/Loader_md5.cpp15 Models/Loader.cpp Models/Loader_ase.cpp Models/Loader_cmdl.cpp Models/Loader_dlod.cpp Models/Loader_dummy.cpp Models/Loader_lwo.cpp Models/Loader_md5.cpp 16 16 Models/Loader_mdl.cpp Models/AnimPose.cpp 17 Models/Model_cmdl.cpp Models/Model_ dummy.cpp Models/Model_proxy.cpp17 Models/Model_cmdl.cpp Models/Model_proxy.cpp 18 18 Network/Network.cpp ParticleEngine/ParticleEngineMS.cpp PlatformAux.cpp Terrain/Terrain.cpp 19 19 TextParser/TextParser.cpp
