| 13 | { |
| 14 | |
| 15 | Vector3 TransformPoint( const Vector3& localCenter, Tr2SolidSet* solid, Matrix& viewMatrix ) |
| 16 | { |
| 17 | XMVECTOR det; |
| 18 | Matrix viewInv( XMMatrixInverse( &det, viewMatrix ) ); |
| 19 | |
| 20 | Vector3 viewPos = viewInv.GetTranslation(); |
| 21 | Vector3 lineSetPos = Vector3( solid->m_localTransform._41, solid->m_localTransform._42, solid->m_localTransform._43 ); |
| 22 | Vector3 normal = Vector3( viewMatrix._13, viewMatrix._23, viewMatrix._33 ); |
| 23 | Vector3 dir( viewPos - lineSetPos ); |
| 24 | float scale = fabs( Dot( dir, normal ) * g_primitiveDistanceScaleMultiplier * Tr2Renderer::GetFieldOfView() ); |
| 25 | |
| 26 | Matrix scaleMat, finalTransform; |
| 27 | scaleMat = ScalingMatrix( scale, scale, scale ); |
| 28 | finalTransform = scaleMat * solid->m_localTransform; |
| 29 | |
| 30 | return Vector3( XMVector3TransformCoord( localCenter, finalTransform ) ); |
| 31 | } |
| 32 | |
| 33 | } |
| 34 |
no test coverage detected