From c6ce943f613e5f864c299a6e3924a20559d07048 Mon Sep 17 00:00:00 2001 From: Nishi Date: Sat, 6 Jun 2026 01:18:49 +0900 Subject: [PATCH] quad obj support --- engine/src/draw/opengl.cc | 2 +- engine/src/meshldr.cc | 42 +++++++++++++++++++++++++++------------ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/engine/src/draw/opengl.cc b/engine/src/draw/opengl.cc index c3bd393..1566a1c 100644 --- a/engine/src/draw/opengl.cc +++ b/engine/src/draw/opengl.cc @@ -231,5 +231,5 @@ void fishbone::Renderer::prepare() { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - lookAt({2, 2, 2}, {0, 0, 0}); + lookAt({4, 4, 4}, {0, 0, 0}); } diff --git a/engine/src/meshldr.cc b/engine/src/meshldr.cc index 4f491b7..750699f 100644 --- a/engine/src/meshldr.cc +++ b/engine/src/meshldr.cc @@ -72,10 +72,12 @@ fishbone::MeshData::MeshData(fishbone::File* f) { vn.push_back(nv); } else if(vs[0] == "f") { - float sc = 0; - float lr = fabs(lm - rm); - float ud = fabs(um - dm); - float bf = fabs(fm - bm); + float sc = 0; + float lr = fabs(lm - rm); + float ud = fabs(um - dm); + float bf = fabs(fm - bm); + std::vector ind; + struct fishbone::Vector3 v3; if(sc < lr) sc = lr; if(sc < ud) sc = ud; @@ -83,17 +85,31 @@ fishbone::MeshData::MeshData(fishbone::File* f) { sc /= 2; +#define PUSH(i) \ + ind = parseFace(vs[i]); \ + v3 = v[ind[0] - 1]; \ +\ + v3.x /= sc; \ + v3.y /= sc; \ + v3.z /= sc; \ +\ + this->vertices.push_back(v3); \ + this->texcoords.push_back(ind.size() >= 2 ? vt[ind[1] - 1] : e2); \ + this->normals.push_back(ind.size() >= 3 ? vn[ind[2] - 1] : e3); + for(int i = 1; i < 4; i++) { - std::vector ind = parseFace(vs[i]); - struct fishbone::Vector3 v3 = v[ind[0] - 1]; + PUSH(i); + } - v3.x /= sc; - v3.y /= sc; - v3.z /= sc; - - this->vertices.push_back(v3); - this->texcoords.push_back(ind.size() >= 2 ? vt[ind[1] - 1] : e2); - this->normals.push_back(ind.size() >= 3 ? vn[ind[2] - 1] : e3); + /* If it's quad... + * 1-4 + * |\| + * 2-3 + */ + if(vs.size() == 5) { + PUSH(3); + PUSH(4); + PUSH(1); } } }