diff options
author | StapleButter <thetotalworm@gmail.com> | 2017-07-24 01:06:08 +0200 |
---|---|---|
committer | StapleButter <thetotalworm@gmail.com> | 2017-07-24 01:06:08 +0200 |
commit | 4a899ebe3f681096876e17f1189617cd274a4f63 (patch) | |
tree | 426ced670a7e45e5b23d827e769dbad220ce359d /src | |
parent | 51d29c88046aad4c817f94cf50fbb2a6fb771637 (diff) |
3D: fix culling. fixes #86. watch out for any missing polygons elsewhere.
Diffstat (limited to 'src')
-rw-r--r-- | src/GPU3D.cpp | 9 |
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) || |