#include "haloo3d/haloo3d.h" #include "haloo3d/haloo3dex_gen.h" #include "haloo3d/haloo3dex_obj.h" #ifndef TREECOL #define TREECOL 0xF070 #endif #ifndef TREETRUNKCOL #define TREETRUNKCOL 0xF950 #endif #ifndef TREEBOTTOM #define TREEBOTTOM -0.333 #endif #ifndef TREETOPWIDTH #define TREETOPWIDTH 1.0 #endif #ifndef TREETRUNKWIDTH #define TREETRUNKWIDTH 0.2 #endif // Fill a face with a solid color given by the tex void fastface(haloo3d_facei face, uint16_t tex, uint16_t v0, uint16_t v1, uint16_t v2) { face[0].texi = tex; face[1].texi = tex; face[2].texi = tex; face[0].posi = v0; face[1].posi = v1; face[2].posi = v2; } // Generate a basic tree model void gen_tree_model(haloo3d_obj *tree) { haloo3d_obj_resetfixed(tree, 12, 24); struct vec3 treecol = haloo3d_gen_paletteuv(TREECOL); int treeuv = haloo3d_obj_addvtexture(tree, treecol); struct vec3 trunkcol = haloo3d_gen_paletteuv(TREETRUNKCOL); int trunkuv = haloo3d_obj_addvtexture(tree, trunkcol); // clang-format off uint16_t top = haloo3d_obj_addvertex(tree, (struct vec4){.x = 0, .y = 1, .z = 0, .w = 1}); uint16_t tree1 = haloo3d_obj_addvertex(tree, (struct vec4){.x = -TREETOPWIDTH, .y = TREEBOTTOM, .z = -TREETOPWIDTH, .w = 1}); uint16_t tree2 = haloo3d_obj_addvertex(tree, (struct vec4){.x = TREETOPWIDTH, .y = TREEBOTTOM, .z = -TREETOPWIDTH, .w = 1}); uint16_t tree3 = haloo3d_obj_addvertex(tree, (struct vec4){.x = 0, .y = TREEBOTTOM, .z = TREETOPWIDTH, .w = 1}); uint16_t trunk1 = haloo3d_obj_addvertex(tree, (struct vec4){ .x = -TREETRUNKWIDTH, .y = -1, .z = -TREETRUNKWIDTH, .w = 1}); uint16_t trunk2 = haloo3d_obj_addvertex(tree, (struct vec4){ .x = TREETRUNKWIDTH, .y = -1, .z = -TREETRUNKWIDTH, .w = 1}); uint16_t trunk3 = haloo3d_obj_addvertex(tree, (struct vec4){.x = 0, .y = -1, .z = TREETRUNKWIDTH, .w = 1}); // clang-format on haloo3d_facei face; fastface(face, treeuv, top, tree1, tree3); haloo3d_obj_addface(tree, face); fastface(face, treeuv, top, tree3, tree2); haloo3d_obj_addface(tree, face); fastface(face, treeuv, top, tree2, tree1); haloo3d_obj_addface(tree, face); fastface(face, trunkuv, top, trunk1, trunk3); haloo3d_obj_addface(tree, face); fastface(face, trunkuv, top, trunk3, trunk2); haloo3d_obj_addface(tree, face); fastface(face, trunkuv, top, trunk2, trunk1); haloo3d_obj_addface(tree, face); haloo3d_obj_shrinktofit(tree); }