//----------------------------------------------------------------// void MOAIStretchPatch2D::DrawIndex ( u32 idx, float xOff, float yOff, float zOff, float xScl, float yScl, float zScl ) { UNUSED ( xOff ); UNUSED ( yOff ); UNUSED ( zOff ); UNUSED ( xScl ); UNUSED ( yScl ); UNUSED ( zScl ); // TODO: make use of offset and scale MOAIGfxDevice& gfxDevice = MOAIGfxDevice::Get (); MOAIQuadBrush::BindVertexFormat ( gfxDevice ); gfxDevice.SetVertexMtxMode ( MOAIGfxDevice::VTX_STAGE_MODEL, MOAIGfxDevice::VTX_STAGE_PROJ ); gfxDevice.SetUVMtxMode ( MOAIGfxDevice::UV_STAGE_MODEL, MOAIGfxDevice::UV_STAGE_TEXTURE ); USMatrix4x4 transform = gfxDevice.GetVertexTransform ( MOAIGfxDevice::VTX_WORLD_TRANSFORM ); USVec3D stretch = transform.GetStretch (); USMatrix4x4 noStretch; noStretch.Scale ( 1.0f / stretch.mX, 1.0f / stretch.mY, 1.0f / stretch.mZ ); noStretch.Append ( transform ); gfxDevice.SetVertexTransform ( MOAIGfxDevice::VTX_WORLD_TRANSFORM, noStretch ); this->UpdateParams (); this->DrawStretch ( idx, stretch.mX, stretch.mY ); gfxDevice.SetVertexTransform ( MOAIGfxDevice::VTX_WORLD_TRANSFORM, transform ); }
//----------------------------------------------------------------// USMatrix4x4 MOAIGfxDevice::GetWndToNormMtx () const { USRect rect = this->mViewRect; float hWidth = rect.Width () * 0.5f; float hHeight = rect.Height () * 0.5f; // Inv Wnd USMatrix4x4 wndToNorm; wndToNorm.Translate ( -hWidth - rect.mXMin, -hHeight - rect.mYMin, 0.0f ); USMatrix4x4 mtx; mtx.Scale (( 1.0f / hWidth ), -( 1.0f / hHeight ), 1.0f ); wndToNorm.Append ( mtx ); return wndToNorm; }
//----------------------------------------------------------------// USMatrix4x4 MOAIGfxDevice::GetNormToWndMtx () const { USRect rect = this->mViewRect; float hWidth = rect.Width () * 0.5f; float hHeight = rect.Height () * 0.5f; // Wnd USMatrix4x4 normToWnd; normToWnd.Scale ( hWidth, -hHeight, 1.0f ); USMatrix4x4 mtx; mtx.Translate ( hWidth + rect.mXMin, hHeight + rect.mYMin, 0.0f ); normToWnd.Append ( mtx ); return normToWnd; }
//----------------------------------------------------------------// USMatrix4x4 MOAIGfxDevice::GetWorldToWndMtx ( float xScale, float yScale ) const { USMatrix4x4 worldToWnd; USMatrix4x4 mtx; USRect rect = this->GetViewRect (); float hWidth = rect.Width () * 0.5f; float hHeight = rect.Height () * 0.5f; // viewproj worldToWnd = this->GetViewProjMtx (); // wnd mtx.Scale ( hWidth * xScale, hHeight * yScale, 1.0f ); worldToWnd.Append ( mtx ); mtx.Translate ( hWidth + rect.mXMin, hHeight + rect.mYMin, 0.0f ); worldToWnd.Append ( mtx ); return worldToWnd; }
//----------------------------------------------------------------// USMatrix4x4 MOAIGfxDevice::GetWndToWorldMtx () const { USMatrix4x4 wndToWorld; USMatrix4x4 mtx; USRect rect = this->GetViewRect (); float hWidth = rect.Width () * 0.5f; float hHeight = rect.Height () * 0.5f; // Inv Wnd wndToWorld.Translate ( -hWidth - rect.mXMin, -hHeight - rect.mYMin, 0.0f ); mtx.Scale (( 1.0f / hWidth ), -( 1.0f / hHeight ), 1.0f ); wndToWorld.Append ( mtx ); // inv viewproj mtx = this->GetViewProjMtx (); mtx.Inverse (); wndToWorld.Append ( mtx ); return wndToWorld; }