diff --git a/brolib/BroLib.vcxproj b/brolib/BroLib.vcxproj
index 56c733e..67cfb8e 100644
--- a/brolib/BroLib.vcxproj
+++ b/brolib/BroLib.vcxproj
@@ -33,9 +33,11 @@
+
+
@@ -58,10 +60,12 @@
+
+
diff --git a/brolib/BroLib.vcxproj.filters b/brolib/BroLib.vcxproj.filters
index cfe5875..7e6fd62 100644
--- a/brolib/BroLib.vcxproj.filters
+++ b/brolib/BroLib.vcxproj.filters
@@ -99,6 +99,12 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
@@ -173,5 +179,11 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
\ No newline at end of file
diff --git a/brolib/BroLib/IRsm.h b/brolib/BroLib/IRsm.h
index d52c929..1c5eb70 100644
--- a/brolib/BroLib/IRsm.h
+++ b/brolib/BroLib/IRsm.h
@@ -40,6 +40,9 @@ class IRsm
std::vector faces;
std::vector children;
+ glm::mat4 matrix1;
+ glm::mat4 matrix2;
+
RsmMeshRenderInfo* renderer;
IMesh* parent;
@@ -52,7 +55,8 @@ class IRsm
child->foreach(callback);
}
- virtual void makeVirtual() {}
+ virtual void calcMatrix1() {}
+ virtual void calcMatrix2() {}
};
template
@@ -63,8 +67,6 @@ class IRsm
inline Mesh* child(int i) { return (Mesh*)children[i]; }
- virtual void calcMatrix1() {}
- virtual void calcMatrix2() {}
void foreach(const std::function*)>& callback)
{
callback(this);
diff --git a/brolib/BroLib/MapRenderer.cpp b/brolib/BroLib/MapRenderer.cpp
index af724eb..f8452b1 100644
--- a/brolib/BroLib/MapRenderer.cpp
+++ b/brolib/BroLib/MapRenderer.cpp
@@ -853,17 +853,8 @@ void MapRenderer::renderMesh(IRsm::IMesh* mesh, const glm::mat4 &matrix, RsmMode
mesh->renderer->vbo->setVertexFormat();
renderer->setVbo(mesh->renderer->vbo, allVerts);
}
- Rsm::Mesh* rsmMesh = dynamic_cast(mesh);
- if (rsmMesh)
- {
- mesh->renderer->matrix = matrix * rsmMesh->matrix1 * rsmMesh->matrix2;
- mesh->renderer->matrixSub = matrix * rsmMesh->matrix1;
- }
- if (rsm2Mesh)
- {
- mesh->renderer->matrix = matrix;
- mesh->renderer->matrixSub = matrix;
- }
+ mesh->renderer->matrix = matrix * mesh->matrix1 * mesh->matrix2;
+ mesh->renderer->matrixSub = matrix * mesh->matrix1;
}
if (rsmMesh && (!rsmMesh->frames.empty() || rsmMesh->matrixDirty))
diff --git a/brolib/BroLib/Rsm.cpp b/brolib/BroLib/Rsm.cpp
index da2578f..dfb1edb 100644
--- a/brolib/BroLib/Rsm.cpp
+++ b/brolib/BroLib/Rsm.cpp
@@ -164,8 +164,8 @@ void Rsm::updateMatrices()
bbrange = (bbmin + bbmax) / 2.0f;
- dynamic_cast(rootMesh)->calcMatrix1();
- dynamic_cast(rootMesh)->calcMatrix2();
+ rootMesh->calcMatrix1();
+ rootMesh->calcMatrix2();
diff --git a/brolib/BroLib/Rsm.h b/brolib/BroLib/Rsm.h
index d54e209..89b3135 100644
--- a/brolib/BroLib/Rsm.h
+++ b/brolib/BroLib/Rsm.h
@@ -55,8 +55,6 @@ class Rsm : public IRsm
glm::vec3 bbmax;
glm::vec3 bbrange;
- glm::mat4 matrix1;
- glm::mat4 matrix2;
void calcMatrix1();
void calcMatrix2();
bool matrixDirty = true;
diff --git a/brolib/BroLib/Rsm2.cpp b/brolib/BroLib/Rsm2.cpp
index 35ce4d8..f616a9b 100644
--- a/brolib/BroLib/Rsm2.cpp
+++ b/brolib/BroLib/Rsm2.cpp
@@ -9,6 +9,7 @@ Rsm2::Rsm2(const std::string& fileName)
this->fileName = fileName;
renderer = NULL;
loaded = false;
+ rootMesh = nullptr;
if (fileName.substr(fileName.size() - 5) != ".rsm2")
return;
@@ -44,6 +45,12 @@ Rsm2::Rsm2(const std::string& fileName)
loaded = true;
}
+ if (rootMesh)
+ {
+ rootMesh->calcMatrix1();
+ rootMesh->calcMatrix2();
+ }
+
}
@@ -185,6 +192,25 @@ void Rsm2::load0203(blib::util::StreamInFile* rsmFile)
+void Rsm2::Mesh::calcMatrix1()
+{
+ matrix1 = glm::mat4();
+ matrix1 = glm::translate(matrix1, pos);
+ for (unsigned int i = 0; i < children.size(); i++)
+ child(i)->calcMatrix1();
+}
+void Rsm2::Mesh::calcMatrix2()
+{
+ matrix2 = glm::mat4();
+
+
+ matrix2 *= offset;
+
+ for (unsigned int i = 0; i < children.size(); i++)
+ child(i)->calcMatrix2();
+}
+
+
std::string Rsm2::readString(blib::util::StreamInFile* file)
{
int len = file->readInt();
diff --git a/brolib/BroLib/Rsm2.h b/brolib/BroLib/Rsm2.h
index 384e0d7..d4c3a2c 100644
--- a/brolib/BroLib/Rsm2.h
+++ b/brolib/BroLib/Rsm2.h
@@ -6,10 +6,13 @@
class Rsm2 : public IRsm
{
public:
- class Mesh : public IMesh
+ class Mesh : public IRsm::Mesh
{
public:
std::vector textures;
+
+ void calcMatrix1();
+ void calcMatrix2();
};
class Face : public IRsm::Face
{
diff --git a/vs2015/Release/Browedit.exe b/vs2015/Release/Browedit.exe
index 9b7dba5..f1a218c 100644
Binary files a/vs2015/Release/Browedit.exe and b/vs2015/Release/Browedit.exe differ