From 108a71cadbe2897b6a8f9b81fad7ae2058090253 Mon Sep 17 00:00:00 2001 From: hendricks266 Date: Wed, 14 Aug 2019 16:11:58 +0000 Subject: [PATCH] Update md3_vox_calcmat_common to solve a sporadic voxel flickering issue Patch by Nuke.YKT. git-svn-id: https://svn.eduke32.com/eduke32@8007 1a8010ca-5511-0410-912e-c29ae57300e0 --- source/build/src/mdsprite.cpp | 38 ++++------------------------------- 1 file changed, 4 insertions(+), 34 deletions(-) diff --git a/source/build/src/mdsprite.cpp b/source/build/src/mdsprite.cpp index 6391c2995..bca6b9c85 100644 --- a/source/build/src/mdsprite.cpp +++ b/source/build/src/mdsprite.cpp @@ -1845,14 +1845,13 @@ int md3postload_polymer(md3model_t *m) void md3_vox_calcmat_common(tspriteptr_t tspr, const vec3f_t *a0, float f, float mat[16]) { + float g; float k0, k1, k2, k3, k4, k5, k6, k7; - /* - float g; k0 = ((float)(tspr->x-globalposx))*f*(1.f/1024.f); k1 = ((float)(tspr->y-globalposy))*f*(1.f/1024.f); - f = gcosang2*gshang; - g = gsinang2*gshang; + f = gcosang2*gshang/gvrcorrection; + g = gsinang2*gshang/gvrcorrection; k4 = (float)sintable[(tspr->ang+spriteext[tspr->owner].angoff+1024)&2047] * (1.f/16384.f); k5 = (float)sintable[(tspr->ang+spriteext[tspr->owner].angoff+ 512)&2047] * (1.f/16384.f); k2 = k0*(1-k4)+k1*k5; @@ -1862,36 +1861,7 @@ void md3_vox_calcmat_common(tspriteptr_t tspr, const vec3f_t *a0, float f, float k6 = f*gctang + gsinang*gstang; k7 = g*gctang - gcosang*gstang; mat[1] = k4*k6 + k5*k7; mat[5] = gchang*gctang; mat[ 9] = k4*k7 - k5*k6; mat[13] = k2*k6 + k3*k7; k6 = gcosang2*gchang; k7 = gsinang2*gchang; - mat[2] = k4*k6 + k5*k7; mat[6] =-gshang; mat[10] = k4*k7 - k5*k6; mat[14] = k2*k6 + k3*k7; - */ - - k0 = ((float)(tspr->x-globalposx))*f*(1.f/1024.f); - k1 = ((float)(tspr->y-globalposy))*f*(1.f/1024.f); - k4 = (float)sintable[(tspr->ang+spriteext[tspr->owner].angoff+1024)&2047] * (1.f/16384.f); - k5 = (float)sintable[(tspr->ang+spriteext[tspr->owner].angoff+ 512)&2047] * (1.f/16384.f); - k2 = k0*(1-k4)+k1*k5; - k3 = k1*(1-k4)-k0*k5; - k6 = -gsinang; k7 = gcosang; - mat[0] = k4*k6 + k5*k7; mat[4] = 0.f; mat[ 8] = k4*k7 - k5*k6; mat[12] = k2*k6 + k3*k7; - mat[1] = 0.f; mat[5] = 1.f; mat[ 9] = 0.f; mat[13] = 0.f; - k6 = gcosang2; k7 = gsinang2; - mat[2] = k4*k6 + k5*k7; mat[6] = 0.f; mat[10] = k4*k7 - k5*k6; mat[14] = k2*k6 + k3*k7; - //Up/down rotation - float udmatrix[16] = { - 1.f, 0.f, 0.f, 0.f, - 0.f, gchang, -gshang*gvrcorrection, 0.f, - 0.f, gshang/gvrcorrection, gchang, 0.f, - 0.f, 0.f, 0.f, 1.f, - }; - // Tilt rotation - float tiltmatrix[16] = { - gctang, -gstang, 0.f, 0.f, - gstang, gctang, 0.f, 0.f, - 0.f, 0.f, 1.f, 0.f, - 0.f, 0.f, 0.f, 1.f, - }; - multiplyMatrix4f(mat, udmatrix); - multiplyMatrix4f(mat, tiltmatrix); + mat[2] = k4*k6 + k5*k7; mat[6] =-gshang*gvrcorrection; mat[10] = k4*k7 - k5*k6; mat[14] = k2*k6 + k3*k7; mat[12] = (mat[12] + a0->y*mat[0]) + (a0->z*mat[4] + a0->x*mat[ 8]); mat[13] = (mat[13] + a0->y*mat[1]) + (a0->z*mat[5] + a0->x*mat[ 9]);