2 #include <assimp/scene.h>
6 #include "performance.h"
8 const float AXIS_RADIUS = 5.0f;
11 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
14 glEnable(GL_NORMALIZE);
15 glEnable(GL_CULL_FACE);
17 glDisable(GL_LIGHTING);
19 glEnable(GL_LIGHTING);
22 drawModelRecursive(model, (*model).mRootNode);
32 point3f xAxisStart = { 0.0f, 0.0f, 0.0f };
33 point3f xAxisEnd = { AXIS_RADIUS, 0.0f, 0.0f };
34 point3f yAxisStart = { 0.0f, 0.0f, 0.0f };
35 point3f yAxisEnd = { 0.0f, AXIS_RADIUS, 0.0f };
36 point3f zAxisStart = { 0.0f, 0.0f, 0.0f };
37 point3f zAxisEnd = { 0.0f, 0.0f, AXIS_RADIUS };
39 glColor3f(1.0f, 0.0f, 0.0f);
41 glVertex3fv(xAxisStart);
42 glVertex3fv(xAxisEnd);
45 glColor3f(0.0f, 1.0f, 0.0f);
47 glVertex3fv(yAxisStart);
48 glVertex3fv(yAxisEnd);
51 glColor3f(0.0f, 0.0f, 1.0f);
53 glVertex3fv(zAxisStart);
54 glVertex3fv(zAxisEnd);
58 void drawModelRecursive(const struct aiScene* model, const struct aiNode* node) {
59 if (((*model).mFlags & AI_SCENE_FLAGS_INCOMPLETE) == AI_SCENE_FLAGS_INCOMPLETE) {
63 for (int i = 0; i < (*node).mNumMeshes; ++i) {
64 const struct aiMesh* mesh = (*model).mMeshes[(*node).mMeshes[i]];
65 for (int k = 0; k < (*mesh).mNumFaces; ++k) {
66 const struct aiFace face = (*mesh).mFaces[k];
69 switch (face.mNumIndices) {
70 case 1: faceMode = GL_POINTS; break;
71 case 2: faceMode = GL_LINES; break;
72 case 3: faceMode = GL_TRIANGLES; break;
73 default: faceMode = GL_POLYGON; break;
78 glColor3f(1.0f, 1.0f, 1.0f);
79 for (int l = 0; l < face.mNumIndices; ++l) {
80 glVertex3fv((const GLfloat*) &(*mesh).mVertices[face.mIndices[l]]);
87 for (int i = 0; i < (*node).mNumChildren; ++i) {
88 drawModelRecursive(model, (*node).mChildren[i]);