From b3b440c86e18908b74a2c957f12074fcc7a21d84 Mon Sep 17 00:00:00 2001 From: Crayon2000 Date: Sun, 31 Mar 2024 13:57:29 -0400 Subject: [PATCH] Refactor --- GRRLIB/GRRLIB/GRRLIB_3Dobj.c | 30 ++++++++++++------------- examples/3D_obj/source/main.c | 41 +++++++++++++++++++++++++---------- 2 files changed, 44 insertions(+), 27 deletions(-) diff --git a/GRRLIB/GRRLIB/GRRLIB_3Dobj.c b/GRRLIB/GRRLIB/GRRLIB_3Dobj.c index a651c5a..22cf31c 100644 --- a/GRRLIB/GRRLIB/GRRLIB_3Dobj.c +++ b/GRRLIB/GRRLIB/GRRLIB_3Dobj.c @@ -818,37 +818,38 @@ void GRRLIB_DeleteObj(GRRLIB_Model* model) { * @param model Structure that defines the model to draw. */ void GRRLIB_Draw3dObj(GRRLIB_Model* model) { - GRRLIB_Group* group; - GRRLIB_texImg* tex; - if(model == NULL) { return; } - group = model->groups; + GRRLIB_Group* group = model->groups; while (group) { - u32 Color = RGBA(model->materials[group->material].diffuse[0], + const u32 Color = RGBA(model->materials[group->material].diffuse[0], model->materials[group->material].diffuse[1], model->materials[group->material].diffuse[2], 0xFF); - tex = model->materials[group->material].diffusetex; + GRRLIB_texImg* tex = model->materials[group->material].diffusetex; GX_ClearVtxDesc(); GX_SetVtxDesc(GX_VA_POS, GX_DIRECT); - if(model->numnormals) + if(model->numnormals) { GX_SetVtxDesc(GX_VA_NRM, GX_DIRECT); + } GX_SetVtxDesc(GX_VA_CLR0, GX_DIRECT); - if(model->numtexcoords && tex) + if(model->numtexcoords && tex) { GX_SetVtxDesc(GX_VA_TEX0, GX_DIRECT); + } GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - if(model->numnormals) + if(model->numnormals) { GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); + } GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - if(model->numtexcoords && tex) + if(model->numtexcoords && tex) { GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + } if(model->numtexcoords && tex) { GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE); @@ -940,7 +941,7 @@ void GRRLIB_VertexNormals(GRRLIB_Model* model, f32 angle) { } // calculate the cosine of the angle (in degrees) - f32 cos_angle = cos(angle * M_PI / 180.0); + const f32 cos_angle = cos(angle * M_PI / 180.0); // nuke any previous normals if (model->normals) { @@ -1106,7 +1107,7 @@ void GRRLIB_FacetNormals(GRRLIB_Model* model) { model->facetnorms = (f32*)malloc(sizeof(f32) * 3 * (model->numfacetnorms + 1)); for (u32 i = 0; i < model->numtriangles; i++) { - model->triangles[i].findex = i+1; + model->triangles[i].findex = i + 1; u[X] = model->vertices[3 * T(i).vindices[1] + X] - model->vertices[3 * T(i).vindices[0] + X]; @@ -1136,7 +1137,6 @@ void GRRLIB_FacetNormals(GRRLIB_Model* model) { */ void GRRLIB_LinearTexture(GRRLIB_Model* model) { f32 dimensions[3]; - f32 x, y; if(model == NULL) { return; @@ -1154,8 +1154,8 @@ void GRRLIB_LinearTexture(GRRLIB_Model* model) { // do the calculations for(u32 i = 1; i <= model->numvertices; i++) { - x = model->vertices[3 * i + 0] * scalefactor; - y = model->vertices[3 * i + 2] * scalefactor; + const f32 x = model->vertices[3 * i + 0] * scalefactor; + const f32 y = model->vertices[3 * i + 2] * scalefactor; model->texcoords[2 * i + 0] = (x + 1.0) / 2.0; model->texcoords[2 * i + 1] = (y + 1.0) / 2.0; } diff --git a/examples/3D_obj/source/main.c b/examples/3D_obj/source/main.c index 0f2df37..28f4bb3 100644 --- a/examples/3D_obj/source/main.c +++ b/examples/3D_obj/source/main.c @@ -17,7 +17,6 @@ int main() { f32 camZ = 50.0f; u8 Amb = 0x00; f32 zlight = 0.0f; - GRRLIB_Model* model; const char strCtl1[] = "DPAD TO ROTATE MODEL"; const char strCtl2[] = "PLUS/MINUS TO ZOOM MODEL"; const char strCredit[] = "BY NONAMENO/CRAYON FROM GRRLIB TEAM"; @@ -32,11 +31,11 @@ int main() { GRRLIB_SetBackgroundColour(0x30, 0x30, 0x30, 0xFF); - model = GRRLIB_ReadOBJ("sd:/data/head_chord.obj"); + GRRLIB_Model* model = GRRLIB_ReadOBJ("sd:/data/head_chord.obj"); if(model->numnormals == 0) { GRRLIB_FacetNormals(model); - GRRLIB_VertexNormals(model, 90.0); + GRRLIB_VertexNormals(model, 90.0f); } if(model->numtexcoords == 0) { @@ -74,15 +73,33 @@ int main() { GRRLIB_Render(); WPAD_ScanPads(); - if(WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) break; - if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_RIGHT) modelRotY++; - if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_LEFT) modelRotY--; - if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_DOWN) modelRotX++; - if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_UP) modelRotX--; - if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_PLUS) camZ -= 0.3f; - if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_MINUS) camZ += 0.3f; - if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_A) zlight += 0.4f; - if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_B) zlight -= 0.4f; + if(WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) { + break; + } + if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_RIGHT) { + modelRotY++; + } + if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_LEFT) { + modelRotY--; + } + if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_DOWN) { + modelRotX++; + } + if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_UP) { + modelRotX--; + } + if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_PLUS) { + camZ -= 0.3f; + } + if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_MINUS) { + camZ += 0.3f; + } + if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_A) { + zlight += 0.4f; + } + if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_B) { + zlight -= 0.4f; + } if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_1 && WPAD_ButtonsHeld(0) & WPAD_BUTTON_2) { WPAD_Rumble(0, true); // Rumble on GRRLIB_ScrShot("sd:/grrlib_3d.png");