X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=render.c;h=c9aa5dc1c05996d76cbfd5b7598bee6add17e59d;hb=1bbba195f731f9e425d2f258b474b502b198dc8e;hp=425fc35517acd5178604e4a691e0ba4469b51d9d;hpb=479000461e3b72a2f816589d65d8e017d5244a9f;p=shadowclad.git diff --git a/render.c b/render.c index 425fc35..c9aa5dc 100644 --- a/render.c +++ b/render.c @@ -1,4 +1,5 @@ #include +#include #include "render.h" #include "typedefs.h" @@ -10,6 +11,7 @@ void render_scene() { glLoadIdentity(); draw_axes(); + draw_model_recursive(model, (*model).mRootNode); glFlush(); glutSwapBuffers(); @@ -41,3 +43,37 @@ void draw_axes() { glVertex3fv(z_axis_end); glEnd(); } + +void draw_model_recursive(const struct aiScene* model, const struct aiNode* node) { + if (((*model).mFlags & AI_SCENE_FLAGS_INCOMPLETE) == AI_SCENE_FLAGS_INCOMPLETE) { + return; + } + + for (int i = 0; i < (*node).mNumMeshes; ++i) { + const struct aiMesh* mesh = (*model).mMeshes[(*node).mMeshes[i]]; + for (int k = 0; k < (*mesh).mNumFaces; ++k) { + const struct aiFace face = (*mesh).mFaces[k]; + + GLenum face_mode; + switch(face.mNumIndices) { + case 1: face_mode = GL_POINTS; break; + case 2: face_mode = GL_LINES; break; + case 3: face_mode = GL_TRIANGLES; break; + default: face_mode = GL_POLYGON; break; + } + + glBegin(face_mode); + + glColor3f(1.0f, 1.0f, 1.0f); + for (int l = 0; l < face.mNumIndices; ++l) { + glVertex3fv((const GLfloat*) &(*mesh).mVertices[face.mIndices[l]]); + } + + glEnd(); + } + } + + for (int i = 0; i < (*node).mNumChildren; ++i) { + draw_model_recursive(model, (*node).mChildren[i]); + } +}