aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStapleButter <thetotalworm@gmail.com>2017-07-24 01:06:08 +0200
committerStapleButter <thetotalworm@gmail.com>2017-07-24 01:06:08 +0200
commit4a899ebe3f681096876e17f1189617cd274a4f63 (patch)
tree426ced670a7e45e5b23d827e769dbad220ce359d
parent51d29c88046aad4c817f94cf50fbb2a6fb771637 (diff)
3D: fix culling. fixes #86. watch out for any missing polygons elsewhere.
-rw-r--r--src/GPU3D.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/GPU3D.cpp b/src/GPU3D.cpp
index 7521952..8d2f7ba 100644
--- a/src/GPU3D.cpp
+++ b/src/GPU3D.cpp
@@ -645,9 +645,12 @@ void SubmitPolygon()
v0 = &TempVertexBuffer[0];
v1 = &TempVertexBuffer[1];
v2 = &TempVertexBuffer[2];
- normalX = ((s64)v0->Position[1] * v2->Position[3]) - ((s64)v0->Position[3] * v2->Position[1]);
- normalY = ((s64)v0->Position[3] * v2->Position[0]) - ((s64)v0->Position[0] * v2->Position[3]);
- normalZ = ((s64)v0->Position[0] * v2->Position[1]) - ((s64)v0->Position[1] * v2->Position[0]);
+ normalX = ((s64)(v0->Position[1]-v1->Position[1]) * (v2->Position[3]-v1->Position[3]))
+ - ((s64)(v0->Position[3]-v1->Position[3]) * (v2->Position[1]-v1->Position[1]));
+ normalY = ((s64)(v0->Position[3]-v1->Position[3]) * (v2->Position[0]-v1->Position[0]))
+ - ((s64)(v0->Position[0]-v1->Position[0]) * (v2->Position[3]-v1->Position[3]));
+ normalZ = ((s64)(v0->Position[0]-v1->Position[0]) * (v2->Position[1]-v1->Position[1]))
+ - ((s64)(v0->Position[1]-v1->Position[1]) * (v2->Position[0]-v1->Position[0]));
while ((((normalX>>31) ^ (normalX>>63)) != 0) ||
(((normalY>>31) ^ (normalY>>63)) != 0) ||