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;
|
||||
VertexRenderStruct colorCubeMeshMutable;
|
||||
|
||||
VertexDataStruct testObjMesh;
|
||||
VertexRenderStruct testObjMeshMutable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
2
Game.h
2
Game.h
@ -108,5 +108,7 @@ namespace ZL
|
||||
|
||||
extern VertexDataStruct colorCubeMesh;
|
||||
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);
|
||||
39
Renderer.cpp
39
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++)
|
||||
{
|
||||
PositionData[i] = PositionData[i] * scale;
|
||||
}
|
||||
}
|
||||
|
||||
void VertexDataStruct::SwapZandY()
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
void VertexDataStruct::RotateByMatrix(Matrix3f m)
|
||||
{
|
||||
|
||||
for (int i = 0; i < data.PositionData.size(); i++)
|
||||
for (int i = 0; i < PositionData.size(); i++)
|
||||
{
|
||||
data.PositionData[i] = MultVectorMatrix(data.PositionData[i], m);
|
||||
PositionData[i] = MultVectorMatrix(PositionData[i], m);
|
||||
}
|
||||
|
||||
for (int i = 0; i < data.NormalData.size(); i++)
|
||||
for (int i = 0; i < NormalData.size(); i++)
|
||||
{
|
||||
data.NormalData[i] = MultVectorMatrix(data.NormalData[i], m);
|
||||
NormalData[i] = MultVectorMatrix(NormalData[i], m);
|
||||
}
|
||||
|
||||
for (int i = 0; i < data.TangentData.size(); i++)
|
||||
for (int i = 0; i < TangentData.size(); i++)
|
||||
{
|
||||
data.TangentData[i] = MultVectorMatrix(data.TangentData[i], m);
|
||||
TangentData[i] = MultVectorMatrix(TangentData[i], m);
|
||||
}
|
||||
|
||||
for (int i = 0; i < data.BinormalData.size(); i++)
|
||||
for (int i = 0; i < BinormalData.size(); i++)
|
||||
{
|
||||
data.BinormalData[i] = MultVectorMatrix(data.BinormalData[i], m);
|
||||
BinormalData[i] = MultVectorMatrix(BinormalData[i], m);
|
||||
}
|
||||
|
||||
|
||||
RefreshVBO();
|
||||
}
|
||||
|
||||
void VertexRenderStruct::AssignFrom(const VertexDataStruct& v)
|
||||
|
||||
@ -48,6 +48,11 @@ namespace ZL {
|
||||
std::vector<Vector3f> TangentData;
|
||||
std::vector<Vector3f> BinormalData;
|
||||
std::vector<Vector3f> ColorData;
|
||||
|
||||
void RotateByMatrix(Matrix3f m);
|
||||
|
||||
void Scale(float scale);
|
||||
void SwapZandY();
|
||||
};
|
||||
|
||||
struct VertexRenderStruct
|
||||
@ -63,8 +68,6 @@ namespace ZL {
|
||||
std::shared_ptr<VBOHolder> colorVBO;
|
||||
void RefreshVBO();
|
||||
|
||||
void RotateByMatrix(Matrix3f m);
|
||||
|
||||
void AssignFrom(const VertexDataStruct& v);
|
||||
};
|
||||
|
||||
|
||||
65
main.cpp
65
main.cpp
@ -1,6 +1,7 @@
|
||||
#include "TextureManager.h"
|
||||
#include "ShaderManager.h"
|
||||
#include "Renderer.h"
|
||||
#include "ObjLoader.h"
|
||||
|
||||
#include "Physics.h"
|
||||
#include <string>
|
||||
@ -131,6 +132,40 @@ namespace ZL
|
||||
|
||||
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.RenderUniform1i(textureUniformName, 0);
|
||||
@ -140,44 +175,28 @@ namespace ZL
|
||||
renderer.EnableVertexAttribArray(vColorName);
|
||||
|
||||
renderer.PushPerspectiveProjectionMatrix(1.0 / 6.0, static_cast<float>(Env::width)/ static_cast<float>(Env::height), 10, 10000);
|
||||
|
||||
|
||||
renderer.PushMatrix();
|
||||
|
||||
renderer.LoadIdentity();
|
||||
|
||||
//renderer.RotateMatrix(QuatFromRotateAroundZ(gs.rotateTimer * M_PI / 3.0));
|
||||
|
||||
|
||||
renderer.TranslateMatrix({ 0,0, -1000 });
|
||||
|
||||
//
|
||||
|
||||
renderer.RotateMatrix(QuatFromRotateAroundX(-M_PI / 3.0));
|
||||
|
||||
|
||||
GameObjects::colorCubeMeshMutable.AssignFrom(GameObjects::colorCubeMesh);
|
||||
GameObjects::colorCubeMeshMutable.RotateByMatrix(QuatToMatrix(QuatFromRotateAroundZ(gs.rotateTimer * M_PI / 3.0)));
|
||||
|
||||
renderer.DrawVertexRenderStruct(GameObjects::colorCubeMeshMutable);
|
||||
|
||||
renderer.PopMatrix();
|
||||
|
||||
|
||||
/*
|
||||
DrawBackground();
|
||||
|
||||
DrawPipes();
|
||||
|
||||
DrawBird();
|
||||
|
||||
DrawUi();*/
|
||||
|
||||
|
||||
renderer.PopProjectionMatrix();
|
||||
|
||||
renderer.DisableVertexAttribArray(vColorName);
|
||||
renderer.DisableVertexAttribArray(vPositionName);
|
||||
|
||||
renderer.shaderManager.PopShader();
|
||||
renderer.shaderManager.PopShader();*/
|
||||
|
||||
CheckGlError();
|
||||
|
||||
@ -232,7 +251,7 @@ namespace ZL
|
||||
//Load shaders:
|
||||
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment");
|
||||
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment");
|
||||
|
||||
|
||||
//Load textures
|
||||
GameObjects::birdTexturePtr = std::make_shared<Texture>(CreateTextureDataFromBmp32("./bird.bmp32"));
|
||||
GameObjects::backgroundTexturePtr = std::make_shared<Texture>(CreateTextureDataFromBmp24("./background.bmp"));
|
||||
@ -271,6 +290,12 @@ namespace ZL
|
||||
GameObjects::colorCubeMeshMutable.data = CreateCube3D(5.0);
|
||||
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
|
||||
Env::birdStartPos = { Env::width * 0.2f, Env::getActualClientHeight() * 0.5f };
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user