#include <string>
#include "mesh.h"
+#include "hair.h"
+
+#define MAX_NUM_SPAWNS 4
+#define THRESH 0.5
static bool init();
static void cleanup();
static std::vector<Mesh*> meshes;
static Mesh *mesh_head;
+static Hair hair;
-int win_width, win_height;
-float cam_theta, cam_phi = 25, cam_dist = 8;
+static int win_width, win_height;
+static float cam_theta, cam_phi = 25, cam_dist = 8;
int main(int argc, char **argv)
{
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
- glClearColor(1, 0.5, 0.5, 1);
+ glClearColor(0.5, 0.5, 0.5, 1);
meshes = load_meshes("data/head.fbx");
if (meshes.empty()) {
fprintf(stderr, "Failed to load mesh.\n");
for(size_t i=0; i<meshes.size(); i++) {
meshes[i]->calc_bbox();
-
+/*
Vec3 v0 = meshes[i]->bbox.v0;
Vec3 v1 = meshes[i]->bbox.v1;
printf("mesh: %s\n", meshes[i]->name.c_str());
printf("AABB mesh %d: v0: (%f, %f, %f) v1: (%f, %f, %f)\n",
(int)i, v0.x, v0.y, v0.z, v1.x, v1.y, v1.z);
-
+*/
meshes[i]->update_vbo(MESH_ALL);
+/*
printf("num vertices: %d num triangles: %d\n",
(int)meshes[i]->vertices.size(),
(int)meshes[i]->indices.size() / 3);
-
+*/
if(meshes[i]->name == "head") {
mesh_head = meshes[i];
}
}
+ if(!mesh_head) {
+ fprintf(stderr, "Failed to find the head mesh.\n");
+ return false;
+ }
+
+ if(!hair.init(mesh_head, MAX_NUM_SPAWNS, THRESH)) {
+ fprintf(stderr, "Failed to initialize hair\n");
+ return false;
+ }
return true;
}
static void cleanup()
{
+ for(size_t i=0; i<meshes.size(); i++) {
+ delete meshes[i];
+ }
}
static void display()
glRotatef(cam_phi, 1, 0, 0);
glRotatef(cam_theta, 0, 1, 0);
- glTranslatef(0, -16, 0);
-
for(size_t i=0; i<meshes.size(); i++) {
meshes[i]->draw();
}
+ hair.draw();
+
glutSwapBuffers();
assert(glGetError() == GL_NO_ERROR);
}