mirror of
https://github.com/GRRLIB/GRRLIB.git
synced 2024-11-21 22:42:20 +00:00
Refactor
This commit is contained in:
parent
3ef4847a4e
commit
b3b440c86e
2 changed files with 44 additions and 27 deletions
|
@ -818,37 +818,38 @@ void GRRLIB_DeleteObj(GRRLIB_Model* model) {
|
||||||
* @param model Structure that defines the model to draw.
|
* @param model Structure that defines the model to draw.
|
||||||
*/
|
*/
|
||||||
void GRRLIB_Draw3dObj(GRRLIB_Model* model) {
|
void GRRLIB_Draw3dObj(GRRLIB_Model* model) {
|
||||||
GRRLIB_Group* group;
|
|
||||||
GRRLIB_texImg* tex;
|
|
||||||
|
|
||||||
if(model == NULL) {
|
if(model == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
group = model->groups;
|
GRRLIB_Group* group = model->groups;
|
||||||
while (group) {
|
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[1],
|
||||||
model->materials[group->material].diffuse[2],
|
model->materials[group->material].diffuse[2],
|
||||||
0xFF);
|
0xFF);
|
||||||
|
|
||||||
tex = model->materials[group->material].diffusetex;
|
GRRLIB_texImg* tex = model->materials[group->material].diffusetex;
|
||||||
|
|
||||||
GX_ClearVtxDesc();
|
GX_ClearVtxDesc();
|
||||||
|
|
||||||
GX_SetVtxDesc(GX_VA_POS, GX_DIRECT);
|
GX_SetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||||
if(model->numnormals)
|
if(model->numnormals) {
|
||||||
GX_SetVtxDesc(GX_VA_NRM, GX_DIRECT);
|
GX_SetVtxDesc(GX_VA_NRM, GX_DIRECT);
|
||||||
|
}
|
||||||
GX_SetVtxDesc(GX_VA_CLR0, 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_SetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||||
|
}
|
||||||
|
|
||||||
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
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_NRM, GX_NRM_XYZ, GX_F32, 0);
|
||||||
|
}
|
||||||
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 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);
|
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if(model->numtexcoords && tex) {
|
if(model->numtexcoords && tex) {
|
||||||
GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE);
|
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)
|
// 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
|
// nuke any previous normals
|
||||||
if (model->normals) {
|
if (model->normals) {
|
||||||
|
@ -1106,7 +1107,7 @@ void GRRLIB_FacetNormals(GRRLIB_Model* model) {
|
||||||
model->facetnorms = (f32*)malloc(sizeof(f32) * 3 * (model->numfacetnorms + 1));
|
model->facetnorms = (f32*)malloc(sizeof(f32) * 3 * (model->numfacetnorms + 1));
|
||||||
|
|
||||||
for (u32 i = 0; i < model->numtriangles; i++) {
|
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] -
|
u[X] = model->vertices[3 * T(i).vindices[1] + X] -
|
||||||
model->vertices[3 * T(i).vindices[0] + 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) {
|
void GRRLIB_LinearTexture(GRRLIB_Model* model) {
|
||||||
f32 dimensions[3];
|
f32 dimensions[3];
|
||||||
f32 x, y;
|
|
||||||
|
|
||||||
if(model == NULL) {
|
if(model == NULL) {
|
||||||
return;
|
return;
|
||||||
|
@ -1154,8 +1154,8 @@ void GRRLIB_LinearTexture(GRRLIB_Model* model) {
|
||||||
|
|
||||||
// do the calculations
|
// do the calculations
|
||||||
for(u32 i = 1; i <= model->numvertices; i++) {
|
for(u32 i = 1; i <= model->numvertices; i++) {
|
||||||
x = model->vertices[3 * i + 0] * scalefactor;
|
const f32 x = model->vertices[3 * i + 0] * scalefactor;
|
||||||
y = model->vertices[3 * i + 2] * scalefactor;
|
const f32 y = model->vertices[3 * i + 2] * scalefactor;
|
||||||
model->texcoords[2 * i + 0] = (x + 1.0) / 2.0;
|
model->texcoords[2 * i + 0] = (x + 1.0) / 2.0;
|
||||||
model->texcoords[2 * i + 1] = (y + 1.0) / 2.0;
|
model->texcoords[2 * i + 1] = (y + 1.0) / 2.0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@ int main() {
|
||||||
f32 camZ = 50.0f;
|
f32 camZ = 50.0f;
|
||||||
u8 Amb = 0x00;
|
u8 Amb = 0x00;
|
||||||
f32 zlight = 0.0f;
|
f32 zlight = 0.0f;
|
||||||
GRRLIB_Model* model;
|
|
||||||
const char strCtl1[] = "DPAD TO ROTATE MODEL";
|
const char strCtl1[] = "DPAD TO ROTATE MODEL";
|
||||||
const char strCtl2[] = "PLUS/MINUS TO ZOOM MODEL";
|
const char strCtl2[] = "PLUS/MINUS TO ZOOM MODEL";
|
||||||
const char strCredit[] = "BY NONAMENO/CRAYON FROM GRRLIB TEAM";
|
const char strCredit[] = "BY NONAMENO/CRAYON FROM GRRLIB TEAM";
|
||||||
|
@ -32,11 +31,11 @@ int main() {
|
||||||
|
|
||||||
GRRLIB_SetBackgroundColour(0x30, 0x30, 0x30, 0xFF);
|
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) {
|
if(model->numnormals == 0) {
|
||||||
GRRLIB_FacetNormals(model);
|
GRRLIB_FacetNormals(model);
|
||||||
GRRLIB_VertexNormals(model, 90.0);
|
GRRLIB_VertexNormals(model, 90.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(model->numtexcoords == 0) {
|
if(model->numtexcoords == 0) {
|
||||||
|
@ -74,15 +73,33 @@ int main() {
|
||||||
GRRLIB_Render();
|
GRRLIB_Render();
|
||||||
|
|
||||||
WPAD_ScanPads();
|
WPAD_ScanPads();
|
||||||
if(WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) break;
|
if(WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME) {
|
||||||
if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_RIGHT) modelRotY++;
|
break;
|
||||||
if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_LEFT) modelRotY--;
|
}
|
||||||
if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_DOWN) modelRotX++;
|
if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_RIGHT) {
|
||||||
if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_UP) modelRotX--;
|
modelRotY++;
|
||||||
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_LEFT) {
|
||||||
if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_A) zlight += 0.4f;
|
modelRotY--;
|
||||||
if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_B) zlight -= 0.4f;
|
}
|
||||||
|
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) {
|
if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_1 && WPAD_ButtonsHeld(0) & WPAD_BUTTON_2) {
|
||||||
WPAD_Rumble(0, true); // Rumble on
|
WPAD_Rumble(0, true); // Rumble on
|
||||||
GRRLIB_ScrShot("sd:/grrlib_3d.png");
|
GRRLIB_ScrShot("sd:/grrlib_3d.png");
|
||||||
|
|
Loading…
Reference in a new issue