


thanks:)
Code: Select all
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_NBT, GX_NRM_NBT3, GX_F32, 0);
GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); // normal map
Code: Select all
GX_Position3f32(-1.0f,-1.0f, 0.0f);
GX_Normal3f32 ( 0.0f, 0.0f, 1.0f);
GX_Normal3f32 ( 0.125f, 0.0f, 0.0f);
GX_Normal3f32 ( 0.0f, 0.125f, 0.0f);
GX_TexCoord2f32(0.0f,1.0f);
Code: Select all
Mtx nullMtx =
{{ 0.0f, 0.0f, 0.0f, 0.0f},
{ 0.0f, 0.0f, 0.0f, 0.0f},
{ 0.0f, 0.0f, 0.0f, 0.0f}};
GX_LoadTexMtxImm(nullMtx, GX_TEXMTX0, GX_MTX3x4);
GX_SetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); // normal map
GX_SetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX0); // (0,0)
Code: Select all
GX_SetTexCoordGen(GX_TEXCOORD2, GX_TG_BUMP0, GX_TG_TEXCOORD1, GX_IDENTITY);
Code: Select all
GX_SetIndTexOrder(GX_INDTEXSTAGE0,GX_TEXCOORD0,GX_TEXMAP0);
GX_SetIndTexCoordScale(GX_INDTEXSTAGE0,GX_ITS_1,GX_ITS_1); // normal map texture scale 1:1
// setup indirect unit for tev stage 0 (for some reason I get a ABGR triplet, so transforms are done on normal map's B and G components)
f32 offset_mtx[2][3] = {
{ 0.0f, -0.125f, 0.0f}, // B -> horizontal coordinate (s)
{ 0.0f, 0.0f, -0.125f} // G -> vertical coordinate (t)
};
GX_SetNumIndStages(1);
GX_SetIndTexMatrix(GX_ITM_0, offset_mtx, 0);
Code: Select all
GX_SetTevIndirect(
tevstage, // tevstage 0 is used to combine normal map and lightmap
GX_INDTEXSTAGE0, // ind stage is used to read normal map
GX_ITF_8, // texture format 8 bits per channel
GX_ITB_STU, // use bias on s and t channels (red and green and blue)
GX_ITM_0, // use 3x2 matrix 0
GX_ITW_OFF, // do not use texture wrapping
GX_ITW_OFF, // do not use texture wrapping
GX_FALSE, // don't add in previous coordinates
GX_FALSE, // don't use mipmap stuff
GX_ITBA_OFF // don't use bump alpha
);
Code: Select all
GX_SetTevKColorSel(tevstage, GX_TEV_KCSEL_1_8); // ambient intensity
GX_SetTevColorIn(tevstage, GX_CC_ZERO, GX_CC_TEXC, GX_CC_ONE, GX_CC_KONST);
GX_SetTevColorOp(tevstage, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GX_SetTevOrder(tevstage, GX_TEXCOORD2, GX_TEXMAP1, GX_COLORNULL);
Code: Select all
GX_LoadNrmMtxImm(modelview, GX_PNMTX0);
GX_SetCurrentMtx(GX_PNMTX0);
Users browsing this forum: No registered users and 2 guests