3D Scene initial
This commit is contained in:
parent
3fd3211f46
commit
55f5537a67
8 changed files with 117 additions and 77 deletions
|
|
@ -6,50 +6,8 @@ extern "C" {
|
|||
#include "lualib.h"
|
||||
}
|
||||
|
||||
#include "obj/OBJ_Loader.h"
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
bool loadMeshes(tp::Scene& scene, const std::string& objetsPath) {
|
||||
using namespace tp;
|
||||
|
||||
objl::Loader Loader;
|
||||
|
||||
if (!Loader.LoadFile(objetsPath.c_str())) {
|
||||
std::cout << "Failed to Load File. May have failed to find it or it was not an .obj file.\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
for (auto& curMesh : Loader.LoadedMeshes) {
|
||||
scene.mObjects.append(Object());
|
||||
|
||||
auto object = &scene.mObjects.last();
|
||||
|
||||
for (auto& vertex : curMesh.Vertices) {
|
||||
// printf("{ %f, %f, %f }, \n", vertex.Position.X, vertex.Position.Y, vertex.Position.Z);
|
||||
object->mTopology.Points.append(Vec3F{ vertex.Position.X, vertex.Position.Y, vertex.Position.Z });
|
||||
object->mTopology.Normals.append(Vec3F{ vertex.Normal.X, vertex.Normal.Y, vertex.Normal.Z });
|
||||
}
|
||||
|
||||
for (int j = 0; j < curMesh.Indices.size(); j += 3) {
|
||||
auto idx1 = (uhalni) curMesh.Indices[j];
|
||||
auto idx2 = (uhalni) curMesh.Indices[j + 1];
|
||||
auto idx3 = (uhalni) curMesh.Indices[j + 2];
|
||||
// printf("{ %i, %i, %i },\n", idx1, idx2, idx3);
|
||||
object->mTopology.Indexes.append(Vec3<uhalni>{ idx1, idx2, idx3 });
|
||||
}
|
||||
|
||||
if (object->mTopology.Normals.size() != object->mTopology.Points.size()) {
|
||||
printf("Logic error loading normals\n");
|
||||
}
|
||||
|
||||
object->mCache.Source = &object->mTopology;
|
||||
object->mCache.updateCache();
|
||||
}
|
||||
|
||||
return scene.mObjects.size();
|
||||
}
|
||||
|
||||
// Function to read a Lua table representing RenderSettings
|
||||
int readRenderSettings(lua_State* L, tp::RayTracer::RenderSettings& settings) {
|
||||
lua_getglobal(L, "RenderSettings");
|
||||
|
|
@ -152,7 +110,7 @@ void loadScene(tp::Scene& scene, const std::string& scenePath, tp::RayTracer::Re
|
|||
|
||||
directoryPath /= meshesPath;
|
||||
|
||||
if (!loadMeshes(scene, directoryPath.string())) {
|
||||
if (!scene.load(directoryPath.string())) {
|
||||
printf("No 'meshes' loaded - check ur .obj path and validate content of .obj .\n");
|
||||
return;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue