#include "UnitTestSharpHLSL.fx" #include "Multisampling.fxh" // TriangleInteriorCorner float2x4 TriangleInteriorCorner_Check(float2 pt, float2 vertex, float2 bisector, float cosAngle, float dist) { float4x4 point44 = { pt.xxxx, pt.yyyy, pt.xxxx, pt.yyyy, }; float4x4 vertex44 = { vertex.xxxx, vertex.yyyy, vertex.xxxx, vertex.yyyy, }; float2x4 isInside = MultiSample_TriangleInterior_Corner( point44, vertex44, bisector, cosAngle, dist); return isInside; } void TriangleInteriorCorner_Inside() { float2x4 isInside = TriangleInteriorCorner_Check( float2(1,1), float2(0,0), float2(1,1), .707, 0.5); CheckEqual(1, isInside); } void TriangleInteriorCorner_TooShallow() { float2x4 isInside = TriangleInteriorCorner_Check( float2(1,1), float2(0,0), float2(1,1), .707, 10); CheckEqual(0, isInside); } void TriangleInteriorCorner_WrongAngle() { float2x4 isInside = TriangleInteriorCorner_Check( float2(-1,1), float2(0,0), float2(1,1), .707, 0); CheckEqual(0, isInside); } void TriangleInteriorCorner_WideAngle_On() { float2x4 isInside = TriangleInteriorCorner_Check( float2(-1,1), float2(0,0), float2(1,1), 0, 0); CheckEqual(0, isInside); } void TriangleInteriorCorner_WideAngleTooShallow() { float2x4 isInside = TriangleInteriorCorner_Check( float2(0,0), float2(0,0), float2(1,1), -.707, 0.01); CheckEqual(0, isInside); } void TriangleInteriorCorner_WideAngleOnPivot() { float2x4 isInside = TriangleInteriorCorner_Check( float2(0,0), float2(0,0), float2(1,1), -.707, 0); CheckEqual(0, isInside); } // Multisample_TriangleInterior float2x4 TriangleInterior_Check(float2 pt, float3x2 bisectors, float3 cosAngles, float3 dists) { float4x4 point44 = { pt.xxxx, pt.yyyy, pt.xxxx, pt.yyyy, }; /*float2x4 isInside = Multisample_TriangleInterior(0, float2(0,0), float2(1,0), float2(0,1), bisectors, cosAngles, dists, pt);*/ return 1; //isInside; } float2x4 TriangleInterior_UniformBorder(float2 pt) { float3x2 bisectors = { normalize(float2(1, 1)), normalize(float2(-1, 0.5)), normalize(float2(0.5, -1)), }; float3 cosAngles = float3(.707, 0.924, 0.924); float3 dists = 0.1 / cosAngles; return TriangleInterior_Check(pt, bisectors, cosAngles, dists); } void TriangleInterior_EvenBorder_Centroid() { float2 pt = float2(0.33, 0.33); CheckEqual(1, TriangleInterior_UniformBorder(pt)); } void TriangleInterior_EvenBorder_BehindCorner_1() { float2 pt = float2(0.1, 0.1); CheckEqual(0, TriangleInterior_UniformBorder(pt)); } void TriangleInterior_EvenBorder_InfrontCorner_1() { float2 pt = float2(0.11, 0.11); CheckEqual(1, TriangleInterior_UniformBorder(pt)); } void TriangleInterior_EvenBorder_BehindCorner_2() { float2 pt = float2(0.99, 0.01); CheckEqual(0, TriangleInterior_UniformBorder(pt)); } void TriangleInterior_EvenBorder_BehindCorner_3() { float2 pt = float2(0.01, 0.99); CheckEqual(0, TriangleInterior_UniformBorder(pt)); } void TriangleInterior_EvenBorder_Edge1_Outside() { float2 pt = float2(0.5, 0.09); CheckEqual(0, TriangleInterior_UniformBorder(pt)); } void TriangleInterior_EvenBorder_Edge1_Inside() { float2 pt = float2(0.5, 0.11); CheckEqual(1, TriangleInterior_UniformBorder(pt)); }