Working with obj model format
This commit is contained in:
parent
21301652ce
commit
476a1e23f7
3
Game.cpp
3
Game.cpp
@ -36,6 +36,9 @@ namespace ZL
|
|||||||
|
|
||||||
VertexDataStruct colorCubeMesh;
|
VertexDataStruct colorCubeMesh;
|
||||||
VertexRenderStruct colorCubeMeshMutable;
|
VertexRenderStruct colorCubeMeshMutable;
|
||||||
|
|
||||||
|
VertexDataStruct testObjMesh;
|
||||||
|
VertexRenderStruct testObjMeshMutable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
Game.h
2
Game.h
@ -108,5 +108,7 @@ namespace ZL
|
|||||||
|
|
||||||
extern VertexDataStruct colorCubeMesh;
|
extern VertexDataStruct colorCubeMesh;
|
||||||
extern VertexRenderStruct colorCubeMeshMutable;
|
extern VertexRenderStruct colorCubeMeshMutable;
|
||||||
|
extern VertexDataStruct testObjMesh;
|
||||||
|
extern VertexRenderStruct testObjMeshMutable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
1208
ObjLoader.cpp
Normal file
1208
ObjLoader.cpp
Normal file
File diff suppressed because it is too large
Load Diff
5
ObjLoader.h
Normal file
5
ObjLoader.h
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Renderer.h"
|
||||||
|
|
||||||
|
ZL::VertexDataStruct LoadFromObjFile(const std::string& fileName);
|
||||||
37
Renderer.cpp
37
Renderer.cpp
@ -274,31 +274,46 @@ namespace ZL {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VertexRenderStruct::RotateByMatrix(Matrix3f m)
|
void VertexDataStruct::Scale(float scale)
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < PositionData.size(); i++)
|
||||||
for (int i = 0; i < data.PositionData.size(); i++)
|
|
||||||
{
|
{
|
||||||
data.PositionData[i] = MultVectorMatrix(data.PositionData[i], m);
|
PositionData[i] = PositionData[i] * scale;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < data.NormalData.size(); i++)
|
void VertexDataStruct::SwapZandY()
|
||||||
{
|
{
|
||||||
data.NormalData[i] = MultVectorMatrix(data.NormalData[i], m);
|
for (int i = 0; i < PositionData.size(); i++)
|
||||||
|
{
|
||||||
|
auto value = PositionData[i].v[1];
|
||||||
|
PositionData[i].v[1] = PositionData[i].v[2];
|
||||||
|
PositionData[i].v[2] = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < data.TangentData.size(); i++)
|
void VertexDataStruct::RotateByMatrix(Matrix3f m)
|
||||||
{
|
{
|
||||||
data.TangentData[i] = MultVectorMatrix(data.TangentData[i], m);
|
|
||||||
|
for (int i = 0; i < PositionData.size(); i++)
|
||||||
|
{
|
||||||
|
PositionData[i] = MultVectorMatrix(PositionData[i], m);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < data.BinormalData.size(); i++)
|
for (int i = 0; i < NormalData.size(); i++)
|
||||||
{
|
{
|
||||||
data.BinormalData[i] = MultVectorMatrix(data.BinormalData[i], m);
|
NormalData[i] = MultVectorMatrix(NormalData[i], m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < TangentData.size(); i++)
|
||||||
|
{
|
||||||
|
TangentData[i] = MultVectorMatrix(TangentData[i], m);
|
||||||
|
}
|
||||||
|
|
||||||
RefreshVBO();
|
for (int i = 0; i < BinormalData.size(); i++)
|
||||||
|
{
|
||||||
|
BinormalData[i] = MultVectorMatrix(BinormalData[i], m);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VertexRenderStruct::AssignFrom(const VertexDataStruct& v)
|
void VertexRenderStruct::AssignFrom(const VertexDataStruct& v)
|
||||||
|
|||||||
@ -48,6 +48,11 @@ namespace ZL {
|
|||||||
std::vector<Vector3f> TangentData;
|
std::vector<Vector3f> TangentData;
|
||||||
std::vector<Vector3f> BinormalData;
|
std::vector<Vector3f> BinormalData;
|
||||||
std::vector<Vector3f> ColorData;
|
std::vector<Vector3f> ColorData;
|
||||||
|
|
||||||
|
void RotateByMatrix(Matrix3f m);
|
||||||
|
|
||||||
|
void Scale(float scale);
|
||||||
|
void SwapZandY();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VertexRenderStruct
|
struct VertexRenderStruct
|
||||||
@ -63,8 +68,6 @@ namespace ZL {
|
|||||||
std::shared_ptr<VBOHolder> colorVBO;
|
std::shared_ptr<VBOHolder> colorVBO;
|
||||||
void RefreshVBO();
|
void RefreshVBO();
|
||||||
|
|
||||||
void RotateByMatrix(Matrix3f m);
|
|
||||||
|
|
||||||
void AssignFrom(const VertexDataStruct& v);
|
void AssignFrom(const VertexDataStruct& v);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
61
main.cpp
61
main.cpp
@ -1,6 +1,7 @@
|
|||||||
#include "TextureManager.h"
|
#include "TextureManager.h"
|
||||||
#include "ShaderManager.h"
|
#include "ShaderManager.h"
|
||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
|
#include "ObjLoader.h"
|
||||||
|
|
||||||
#include "Physics.h"
|
#include "Physics.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -131,6 +132,40 @@ namespace ZL
|
|||||||
|
|
||||||
glViewport(0, 0, Env::width, Env::height);
|
glViewport(0, 0, Env::width, Env::height);
|
||||||
|
|
||||||
|
renderer.shaderManager.PushShader(defaultShaderName);
|
||||||
|
renderer.RenderUniform1i(textureUniformName, 0);
|
||||||
|
|
||||||
|
renderer.EnableVertexAttribArray(vPositionName);
|
||||||
|
renderer.EnableVertexAttribArray(vTexCoordName);
|
||||||
|
|
||||||
|
renderer.PushPerspectiveProjectionMatrix(1.0 / 6.0, static_cast<float>(Env::width) / static_cast<float>(Env::height), 1, 1000);
|
||||||
|
renderer.PushMatrix();
|
||||||
|
|
||||||
|
renderer.LoadIdentity();
|
||||||
|
|
||||||
|
renderer.TranslateMatrix({ 0,0, -100 });
|
||||||
|
|
||||||
|
|
||||||
|
renderer.RotateMatrix(QuatFromRotateAroundX(-M_PI / 3.0));
|
||||||
|
|
||||||
|
GameObjects::testObjMeshMutable.AssignFrom(GameObjects::testObjMesh);
|
||||||
|
GameObjects::testObjMeshMutable.data.RotateByMatrix(QuatToMatrix(QuatFromRotateAroundZ(gs.rotateTimer * M_PI / 3.0)));
|
||||||
|
GameObjects::testObjMeshMutable.RefreshVBO();
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, GameObjects::backgroundTexturePtr->getTexID());
|
||||||
|
renderer.DrawVertexRenderStruct(GameObjects::testObjMeshMutable);
|
||||||
|
|
||||||
|
renderer.PopMatrix();
|
||||||
|
|
||||||
|
renderer.PopProjectionMatrix();
|
||||||
|
|
||||||
|
renderer.DisableVertexAttribArray(vColorName);
|
||||||
|
renderer.DisableVertexAttribArray(vTexCoordName);
|
||||||
|
|
||||||
|
renderer.shaderManager.PopShader();
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
renderer.shaderManager.PushShader(colorShaderName);
|
renderer.shaderManager.PushShader(colorShaderName);
|
||||||
|
|
||||||
//renderer.RenderUniform1i(textureUniformName, 0);
|
//renderer.RenderUniform1i(textureUniformName, 0);
|
||||||
@ -140,20 +175,14 @@ namespace ZL
|
|||||||
renderer.EnableVertexAttribArray(vColorName);
|
renderer.EnableVertexAttribArray(vColorName);
|
||||||
|
|
||||||
renderer.PushPerspectiveProjectionMatrix(1.0 / 6.0, static_cast<float>(Env::width)/ static_cast<float>(Env::height), 10, 10000);
|
renderer.PushPerspectiveProjectionMatrix(1.0 / 6.0, static_cast<float>(Env::width)/ static_cast<float>(Env::height), 10, 10000);
|
||||||
|
|
||||||
|
|
||||||
renderer.PushMatrix();
|
renderer.PushMatrix();
|
||||||
|
|
||||||
renderer.LoadIdentity();
|
renderer.LoadIdentity();
|
||||||
|
|
||||||
//renderer.RotateMatrix(QuatFromRotateAroundZ(gs.rotateTimer * M_PI / 3.0));
|
|
||||||
|
|
||||||
|
|
||||||
renderer.TranslateMatrix({ 0,0, -1000 });
|
renderer.TranslateMatrix({ 0,0, -1000 });
|
||||||
|
|
||||||
//
|
|
||||||
renderer.RotateMatrix(QuatFromRotateAroundX(-M_PI / 3.0));
|
|
||||||
|
|
||||||
|
renderer.RotateMatrix(QuatFromRotateAroundX(-M_PI / 3.0));
|
||||||
|
|
||||||
GameObjects::colorCubeMeshMutable.AssignFrom(GameObjects::colorCubeMesh);
|
GameObjects::colorCubeMeshMutable.AssignFrom(GameObjects::colorCubeMesh);
|
||||||
GameObjects::colorCubeMeshMutable.RotateByMatrix(QuatToMatrix(QuatFromRotateAroundZ(gs.rotateTimer * M_PI / 3.0)));
|
GameObjects::colorCubeMeshMutable.RotateByMatrix(QuatToMatrix(QuatFromRotateAroundZ(gs.rotateTimer * M_PI / 3.0)));
|
||||||
@ -162,22 +191,12 @@ namespace ZL
|
|||||||
|
|
||||||
renderer.PopMatrix();
|
renderer.PopMatrix();
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
DrawBackground();
|
|
||||||
|
|
||||||
DrawPipes();
|
|
||||||
|
|
||||||
DrawBird();
|
|
||||||
|
|
||||||
DrawUi();*/
|
|
||||||
|
|
||||||
renderer.PopProjectionMatrix();
|
renderer.PopProjectionMatrix();
|
||||||
|
|
||||||
renderer.DisableVertexAttribArray(vColorName);
|
renderer.DisableVertexAttribArray(vColorName);
|
||||||
renderer.DisableVertexAttribArray(vPositionName);
|
renderer.DisableVertexAttribArray(vPositionName);
|
||||||
|
|
||||||
renderer.shaderManager.PopShader();
|
renderer.shaderManager.PopShader();*/
|
||||||
|
|
||||||
CheckGlError();
|
CheckGlError();
|
||||||
|
|
||||||
@ -271,6 +290,12 @@ namespace ZL
|
|||||||
GameObjects::colorCubeMeshMutable.data = CreateCube3D(5.0);
|
GameObjects::colorCubeMeshMutable.data = CreateCube3D(5.0);
|
||||||
GameObjects::colorCubeMeshMutable.RefreshVBO();
|
GameObjects::colorCubeMeshMutable.RefreshVBO();
|
||||||
|
|
||||||
|
GameObjects::testObjMesh = LoadFromObjFile("./chair_01.obj");
|
||||||
|
GameObjects::testObjMesh.Scale(10);
|
||||||
|
GameObjects::testObjMesh.SwapZandY();
|
||||||
|
GameObjects::testObjMeshMutable.data = GameObjects::testObjMesh;
|
||||||
|
GameObjects::testObjMeshMutable.RefreshVBO();
|
||||||
|
|
||||||
//Set some game values
|
//Set some game values
|
||||||
Env::birdStartPos = { Env::width * 0.2f, Env::getActualClientHeight() * 0.5f };
|
Env::birdStartPos = { Env::width * 0.2f, Env::getActualClientHeight() * 0.5f };
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user