added new test mesh that is rotated,
translation from model is now applied, still need to draw all modl from one mesh
This commit is contained in:
parent
e509b1e11c
commit
ea07ead94f
|
@ -62,10 +62,6 @@ private:
|
||||||
double dTranslationY;
|
double dTranslationY;
|
||||||
double dTranslationZ;
|
double dTranslationZ;
|
||||||
|
|
||||||
//matrices
|
|
||||||
glm::mat4 m4x4Model;
|
|
||||||
glm::mat4 m4x4View;
|
|
||||||
glm::mat4 m4x4Projection;
|
|
||||||
// ==============================
|
// ==============================
|
||||||
|
|
||||||
// camera
|
// camera
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "Object.h"
|
#include "Object.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#define PI (4.0*atan(1.0))
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -276,12 +277,18 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list<ChunkHeader*>& c
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempScale[1]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempScale[1]), sizeof(float));
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempScale[2]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempScale[2]), sizeof(float));
|
||||||
|
|
||||||
//TODO: rotation value is wrong
|
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempRotation[0]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempRotation[0]), sizeof(float));
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempRotation[1]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempRotation[1]), sizeof(float));
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempRotation[2]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempRotation[2]), sizeof(float));
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempRotation[3]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempRotation[3]), sizeof(float));
|
||||||
|
|
||||||
|
//calculate x,y,z rotation
|
||||||
|
tempRotation[0] = atan2(2 * (tempRotation[0] * tempRotation[1] + tempRotation[2] * tempRotation[3]),
|
||||||
|
1 - 2 * (pow(tempRotation[1], 2) + pow(tempRotation[2], 2)));
|
||||||
|
tempRotation[1] = asin(2 * (tempRotation[0] * tempRotation[2] - tempRotation[3] * tempRotation[1]));
|
||||||
|
tempRotation[2] = atan2(2 * (tempRotation[0] * tempRotation[3] + tempRotation[1] * tempRotation[2]),
|
||||||
|
1 - 2 * (pow(tempRotation[2], 2) + pow(tempRotation[3], 2))) - PI;
|
||||||
|
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempTrans[0]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempTrans[0]), sizeof(float));
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempTrans[1]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempTrans[1]), sizeof(float));
|
||||||
fsMesh.read(reinterpret_cast<char*>(&tempTrans[2]), sizeof(float));
|
fsMesh.read(reinterpret_cast<char*>(&tempTrans[2]), sizeof(float));
|
||||||
|
|
|
@ -74,10 +74,6 @@ void OpenGLController::initDefault()
|
||||||
dTranslationY = 0;
|
dTranslationY = 0;
|
||||||
dTranslationZ = 5;
|
dTranslationZ = 5;
|
||||||
|
|
||||||
m4x4Model = glm::mat4(1.0f);
|
|
||||||
m4x4View = glm::mat4(1.0f);
|
|
||||||
m4x4Projection = glm::mat4(1.f);
|
|
||||||
|
|
||||||
fFOV = 45.0f;
|
fFOV = 45.0f;
|
||||||
fMinView = 0.1f;
|
fMinView = 0.1f;
|
||||||
fMaxView = 100.0f;
|
fMaxView = 100.0f;
|
||||||
|
@ -160,21 +156,28 @@ void OpenGLController::setCallbackFunctions()
|
||||||
|
|
||||||
glm::mat4 OpenGLController::getMVPMatrix()
|
glm::mat4 OpenGLController::getMVPMatrix()
|
||||||
{
|
{
|
||||||
m4x4Projection = glm::perspective(fFOV, float(iWidth) / float(iHeight), fMinView, fMaxView);
|
// Projection
|
||||||
m4x4View = glm::lookAt(
|
glm::mat4 m4x4Projection = glm::perspective(fFOV, float(iWidth) / float(iHeight), fMinView, fMaxView);
|
||||||
|
|
||||||
|
// View
|
||||||
|
glm::mat4 m4x4View = glm::lookAt(
|
||||||
glm::vec3(dTranslationX, dTranslationY, dTranslationZ),
|
glm::vec3(dTranslationX, dTranslationY, dTranslationZ),
|
||||||
glm::vec3(dTranslationX, dTranslationY, dTranslationZ - 1),
|
glm::vec3(dTranslationX, dTranslationY, dTranslationZ - 1),
|
||||||
glm::vec3(0, 1, 0)
|
glm::vec3(0, 1, 0)
|
||||||
);
|
);
|
||||||
//m4x4Model = glm::mat4(1.0f);
|
|
||||||
|
|
||||||
|
// Model
|
||||||
//TODO for all
|
//TODO for all
|
||||||
m4x4Model = vModels.front()->m4x4Translation;
|
glm::mat4 m4x4Model = vModels.front()->m4x4Translation;
|
||||||
m4x4Model = glm::rotate(m4x4Model, fRotationX, glm::vec3(1, 0, 0));
|
|
||||||
m4x4Model = glm::rotate(m4x4Model, fRotationY, glm::vec3(0, 1, 0));
|
|
||||||
m4x4Model = glm::rotate(m4x4Model, fRotationZ, glm::vec3(0, 0, 1));
|
|
||||||
|
|
||||||
return m4x4Projection * m4x4View * m4x4Model;
|
// User controlled rotation
|
||||||
|
glm::mat4 m4x4ModelRot = glm::mat4(1.0f);
|
||||||
|
m4x4ModelRot = glm::rotate(m4x4ModelRot, fRotationX, glm::vec3(1, 0, 0));
|
||||||
|
m4x4ModelRot = glm::rotate(m4x4ModelRot, fRotationY, glm::vec3(0, 1, 0));
|
||||||
|
m4x4ModelRot = glm::rotate(m4x4ModelRot, fRotationZ, glm::vec3(0, 0, 1));
|
||||||
|
|
||||||
|
// Return MVP
|
||||||
|
return m4x4Projection * m4x4View * m4x4ModelRot * m4x4Model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@ Feel free to use my code the way you like. But remember i used some public libra
|
||||||
licence, too.
|
licence, too.
|
||||||
|
|
||||||
### To Do
|
### To Do
|
||||||
|
- draw multiple models of one mesh,
|
||||||
|
- crashing sometimes - no idea why,
|
||||||
- bones are not triangulated,
|
- bones are not triangulated,
|
||||||
- nulls are not triangulated,
|
- nulls are not triangulated,
|
||||||
- crash when loading trooper,
|
- crash when loading trooper,
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue