public ViewFrustumSoa(Camera cam) { var vf = new ViewFrustum(cam); var pl = new float4x4(vf.up, vf.down, vf.left, vf.right); var tpl = math.transpose(pl); this.plane4 = new float4_soa4 { x = tpl.c0, y = tpl.c1, z = tpl.c2, w = tpl.c3, }; }
float3_soa4 rotate(float4_soa4 q, float3_soa4 v) { var qv = cross(q.xyz, v); var t = new float3_soa4 { x = 2.0f * qv.x, y = 2.0f * qv.y, z = 2.0f * qv.z, }; var qt = cross(q.xyz, t); var o = new float3_soa4 { x = v.x + q.w * t.x + qt.x, y = v.y + q.w * t.y + qt.y, z = v.z + q.w * t.z + qt.z, }; return(o); }