diff --git a/Runtime/Graphics/CCubeMaterial.cpp b/Runtime/Graphics/CCubeMaterial.cpp index 73c0a688f..3fede3618 100644 --- a/Runtime/Graphics/CCubeMaterial.cpp +++ b/Runtime/Graphics/CCubeMaterial.cpp @@ -434,10 +434,23 @@ u32 CCubeMaterial::HandleAnimatedUV(const u32* uvAnim, GX::TexMtx texMtx, GX::PT return 1; } case 7: { - // TODO - zeus::CTransform xf; - GXLoadTexMtxImm(&xf, texMtx, GX::MTX3x4); - GXLoadTexMtxImm(&xf, pttTexMtx, GX::MTX3x4); + zeus::CTransform mtx = CGraphics::g_ViewMatrix.inverse().multiplyIgnoreTranslation(CGraphics::g_GXModelMatrix); + mtx.origin.zeroOut(); + float xy = SBig(params[1]) * (CGraphics::g_ViewMatrix.origin.x() + CGraphics::g_ViewMatrix.origin.y()) * 0.025f; + xy = (xy - static_cast(xy)); + float z = SBig(params[1]) * CGraphics::g_ViewMatrix.origin.z() * 0.05f; + z = (z - static_cast(z)); + float halfA = SBig(params[0]) * 0.5f; + zeus::CTransform postMtx{ + { + zeus::CVector3f{halfA, 0.f, 0.f}, + zeus::CVector3f{0.f, 0.f, 0.f}, + zeus::CVector3f{0.f, halfA, 0.f}, + }, + zeus::CVector3f{xy, z, 1.f}, + }; + GXLoadTexMtxImm(&mtx, texMtx, GX::MTX3x4); + GXLoadTexMtxImm(&postMtx, pttTexMtx, GX::MTX3x4); return 3; } default: diff --git a/aurora/lib/gfx/gx_shader.cpp b/aurora/lib/gfx/gx_shader.cpp index 4206d93a0..66e357c55 100644 --- a/aurora/lib/gfx/gx_shader.cpp +++ b/aurora/lib/gfx/gx_shader.cpp @@ -498,7 +498,7 @@ std::pair build_shader(const ShaderConfig& confi std::string vtxXfrAttrsPre; std::string vtxXfrAttrs; size_t locIdx = 0; - size_t vtxOutIdx = 0; + size_t vtxOutIdx = 1; size_t uniBindingIdx = 1; if (config.indexedAttributeCount > 0) { // Display list attributes @@ -583,7 +583,8 @@ std::pair build_shader(const ShaderConfig& confi } vtxXfrAttrsPre += fmt::format(FMT_STRING("\n var mv_pos = ubuf.pos_mtx * vec4({}, 1.0);" "\n var mv_nrm = ubuf.nrm_mtx * vec4({}, 0.0);" - "\n out.pos = ubuf.proj * vec4(mv_pos, 1.0);"), + "\n out.pos = ubuf.proj * vec4(mv_pos, 1.0);" + "\n out.norm = vec4(mv_nrm, 0.0);"), vtx_attr(config, GX::VA_POS), vtx_attr(config, GX::VA_NRM)); std::string fragmentFnPre; @@ -902,7 +903,8 @@ struct Uniform {{ var ubuf: Uniform;{uniformBindings}{sampBindings}{texBindings} struct VertexOutput {{ - @builtin(position) pos: vec4;{vtxOutAttrs} + @builtin(position) pos: vec4; + @location(0) norm: vec4;{vtxOutAttrs} }}; @stage(vertex) @@ -915,6 +917,7 @@ fn vs_main({vtxInAttrs} @stage(fragment) fn fs_main(in: VertexOutput) -> @location(0) vec4 {{ var prev: vec4;{fragmentFnPre}{fragmentFn} + //prev = vec4(in.norm.xyz, prev.a); return prev; }} )"""),