8 float InvDeterminant=AToB._11*(AToB._22*AToB._33-AToB._32*AToB._23)
9 -AToB._12*(AToB._21*AToB._33-AToB._31*AToB._23)
10 +AToB._13*(AToB._21*AToB._32-AToB._31*AToB._22);
12 InvDeterminant=1.0f/InvDeterminant;
13 OutBToA._11=(AToB._22*AToB._33-AToB._23*AToB._32)*InvDeterminant;
14 OutBToA._12=(AToB._12*AToB._33-AToB._32*AToB._13)*-InvDeterminant;
15 OutBToA._13=(AToB._12*AToB._23-AToB._22*AToB._13)*InvDeterminant;
16 OutBToA._21=(AToB._21*AToB._33-AToB._23*AToB._31)*-InvDeterminant;
17 OutBToA._22=(AToB._11*AToB._33-AToB._31*AToB._13)*InvDeterminant;
18 OutBToA._23=(AToB._11*AToB._23-AToB._21*AToB._13)*-InvDeterminant;
19 OutBToA._31=(AToB._21*AToB._32-AToB._31*AToB._22)*InvDeterminant;
20 OutBToA._32=(AToB._11*AToB._32-AToB._31*AToB._12)*-InvDeterminant;
21 OutBToA._33=(AToB._11*AToB._22-AToB._12*AToB._21)*InvDeterminant;
23 OutBToA._41=-(AToB._41*OutBToA._11+AToB._42*OutBToA._21+AToB._43*OutBToA._31);
24 OutBToA._42=-(AToB._41*OutBToA._12+AToB._42*OutBToA._22+AToB._43*OutBToA._32);
25 OutBToA._43=-(AToB._41*OutBToA._13+AToB._42*OutBToA._23+AToB._43*OutBToA._33);
27 OutBToA._14=OutBToA._24=OutBToA._34=0.0f;
33 void TransformMatrix(out float4x4 OutAToCSpace,float4x4 AToBSpace,float4x4 BToCSpace){
34 OutAToCSpace=mul(AToBSpace,BToCSpace);
41 float3 Scaling=float3(dot(Matrix[0],Matrix[0]),dot(Matrix[1],Matrix[1]),dot(Matrix[2],Matrix[2]));
42 Scaling=sqrt(Scaling);
43 OutAverageScaling=(Scaling.x+Scaling.y+Scaling.z)/3.0f;
49 void ComputeClippingPlanes(out float4 OutLeft,out float4 OutRight,out float4 OutTop,out float4 OutBottom,out float4 OutNear,out float4 OutFar,float4x4 WorldToProjectionSpace){
51 OutLeft=normalize(float4(
52 WorldToProjectionSpace._14+WorldToProjectionSpace._11,
53 WorldToProjectionSpace._24+WorldToProjectionSpace._21,
54 WorldToProjectionSpace._34+WorldToProjectionSpace._31,
55 WorldToProjectionSpace._44+WorldToProjectionSpace._41));
57 OutRight=normalize(float4(
58 WorldToProjectionSpace._14-WorldToProjectionSpace._11,
59 WorldToProjectionSpace._24-WorldToProjectionSpace._21,
60 WorldToProjectionSpace._34-WorldToProjectionSpace._31,
61 WorldToProjectionSpace._44-WorldToProjectionSpace._41));
63 OutTop=normalize(float4(
64 WorldToProjectionSpace._14-WorldToProjectionSpace._12,
65 WorldToProjectionSpace._24-WorldToProjectionSpace._22,
66 WorldToProjectionSpace._34-WorldToProjectionSpace._32,
67 WorldToProjectionSpace._44-WorldToProjectionSpace._42));
69 OutBottom=normalize(float4(
70 WorldToProjectionSpace._14+WorldToProjectionSpace._12,
71 WorldToProjectionSpace._24+WorldToProjectionSpace._22,
72 WorldToProjectionSpace._34+WorldToProjectionSpace._32,
73 WorldToProjectionSpace._44+WorldToProjectionSpace._42));
75 OutNear=normalize(float4(
76 WorldToProjectionSpace._13,
77 WorldToProjectionSpace._23,
78 WorldToProjectionSpace._33,
79 WorldToProjectionSpace._43));
81 OutFar=normalize(float4(
82 WorldToProjectionSpace._14-WorldToProjectionSpace._13,
83 WorldToProjectionSpace._24-WorldToProjectionSpace._23,
84 WorldToProjectionSpace._34-WorldToProjectionSpace._33,
85 WorldToProjectionSpace._44-WorldToProjectionSpace._43));
93 void ComputeBillboardData(out float3 OutBillboardNormal,out float3 BillboardUpVector,out float3 BillboardRightVector,out float3 BillboardScaledUpVector,out float3 BillboardScaledRightVector,float2 BillboardSize,float4x4 WorldToViewSpace){
97 OutBillboardNormal=float3(-WorldToViewSpace._13,-WorldToViewSpace._23,-WorldToViewSpace._33);
98 OutBillboardRightVector=float3(WorldToViewSpace._11,WorldToViewSpace._21,WorldToViewSpace._31);
99 OutBillboardUpVector=float3(WorldToViewSpace._12,WorldToViewSpace._22,WorldToViewSpace._32);
100 OutBillboardScaledRightVector=OutBillboardRightVector*BillboardSize.x;
101 OutBillboardScaledUpVector=OutBillboardUpVector*BillboardSize.y;
107 OutWorldSpaceCameraPosition=float3(ViewToWorldSpace._41,ViewToWorldSpace._42,ViewToWorldSpace._43);
112 OutMeshSpaceCameraPosition=float3(ViewToMeshSpace._41,ViewToMeshSpace._42,ViewToMeshSpace._43);
void ComputeClippingPlanes(out float4 OutLeft, out float4 OutRight, out float4 OutTop, out float4 OutBottom, out float4 OutNear, out float4 OutFar, float4x4 WorldToProjectionSpace)
void InvertMatrix(out float4x4 OutBToA, float4x4 AToB)
void ComputeWorldSpaceCameraPosition(out float3 OutWorldSpaceCameraPosition, float4x4 ViewToWorldSpace)
void TransformMatrix(out float4x4 OutAToCSpace, float4x4 AToBSpace, float4x4 BToCSpace)
void ComputeAverageScaling(out float OutAverageScaling, float4x4 Matrix)
void ComputeMeshSpaceCameraPosition(out float3 OutMeshSpaceCameraPosition, float4x4 ViewToMeshSpace)
void ComputeBillboardData(out float3 OutBillboardNormal, out float3 BillboardUpVector, out float3 BillboardRightVector, out float3 BillboardScaledUpVector, out float3 BillboardScaledRightVector, float2 BillboardSize, float4x4 WorldToViewSpace)