quad obj support

This commit is contained in:
Nishi 2026-06-06 01:18:49 +09:00
commit c6ce943f61
2 changed files with 30 additions and 14 deletions

View file

@ -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});
}

View file

@ -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<int> 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<int> 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);
}
}
}