mirror of
https://github.com/ZDoom/Raze.git
synced 2025-06-01 09:42:27 +00:00
- replaced vec3f_t with FVector3.
This commit is contained in:
parent
6e43f1a15a
commit
7546cf3a4b
9 changed files with 172 additions and 182 deletions
|
@ -623,7 +623,7 @@ EXTERN FixedBitArray<MAXVOXELS>voxreserve;
|
||||||
#ifdef USE_OPENGL
|
#ifdef USE_OPENGL
|
||||||
// TODO: dynamically allocate this
|
// TODO: dynamically allocate this
|
||||||
|
|
||||||
typedef struct { vec3f_t add; int16_t angadd, flags, fov; } hudtyp;
|
typedef struct { FVector3 add; int16_t angadd, flags, fov; } hudtyp;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -656,7 +656,7 @@ int32_t md_defineanimation(int32_t modelid, const char *framestart, const char *
|
||||||
int32_t fps, int32_t flags);
|
int32_t fps, int32_t flags);
|
||||||
int32_t md_defineskin(int32_t modelid, const char *skinfn, int32_t palnum, int32_t skinnum,
|
int32_t md_defineskin(int32_t modelid, const char *skinfn, int32_t palnum, int32_t skinnum,
|
||||||
int32_t surfnum, float param, float specpower, float specfactor, int32_t flags);
|
int32_t surfnum, float param, float specpower, float specfactor, int32_t flags);
|
||||||
int32_t md_definehud (int32_t modelid, int32_t tilex, vec3f_t add,
|
int32_t md_definehud (int32_t modelid, int32_t tilex, FVector3 add,
|
||||||
int32_t angadd, int32_t flags, int32_t fov);
|
int32_t angadd, int32_t flags, int32_t fov);
|
||||||
int32_t md_undefinetile(int32_t tile);
|
int32_t md_undefinetile(int32_t tile);
|
||||||
int32_t md_undefinemodel(int32_t modelid);
|
int32_t md_undefinemodel(int32_t modelid);
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "m_alloc.h"
|
#include "m_alloc.h"
|
||||||
#include "intvec.h"
|
#include "intvec.h"
|
||||||
#include "m_swap.h"
|
#include "m_swap.h"
|
||||||
|
#include "vectors.h"
|
||||||
|
|
||||||
////////// Language and compiler feature polyfills //////////
|
////////// Language and compiler feature polyfills //////////
|
||||||
|
|
||||||
|
@ -62,22 +63,11 @@ typedef intptr_t bssize_t;
|
||||||
|
|
||||||
using native_t = intptr_t;
|
using native_t = intptr_t;
|
||||||
|
|
||||||
typedef struct {
|
struct vec2f_t {
|
||||||
float x, y;
|
float x, y;
|
||||||
} vec2f_t;
|
};
|
||||||
|
|
||||||
typedef struct {
|
static_assert(sizeof(FVector3) == sizeof(float) * 3);
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
union { float x, d; };
|
|
||||||
union { float y, u; };
|
|
||||||
union { float z, v; };
|
|
||||||
};
|
|
||||||
vec2f_t vec2;
|
|
||||||
};
|
|
||||||
} vec3f_t;
|
|
||||||
|
|
||||||
static_assert(sizeof(vec3f_t) == sizeof(float) * 3);
|
|
||||||
|
|
||||||
|
|
||||||
#include "basics.h"
|
#include "basics.h"
|
||||||
|
|
|
@ -73,7 +73,7 @@ typedef struct
|
||||||
typedef struct { uint8_t v[3], ni; } md2vert_t; //compressed vertex coords (x,y,z)
|
typedef struct { uint8_t v[3], ni; } md2vert_t; //compressed vertex coords (x,y,z)
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
vec3f_t mul, add; //scale&translation vector
|
FVector3 mul, add; //scale&translation vector
|
||||||
char name[16]; //frame name
|
char name[16]; //frame name
|
||||||
md2vert_t verts[1]; //first vertex of this frame
|
md2vert_t verts[1]; //first vertex of this frame
|
||||||
} md2frame_t;
|
} md2frame_t;
|
||||||
|
@ -104,7 +104,7 @@ typedef struct { int16_t x, y, z; uint8_t nlat, nlng; } md3xyzn_t; //xyz are [10
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
vec3f_t min, max, cen; //bounding box&origin
|
FVector3 min, max, cen; //bounding box&origin
|
||||||
float r; //radius of bounding sphere
|
float r; //radius of bounding sphere
|
||||||
char nam[16]; //ascz frame name
|
char nam[16]; //ascz frame name
|
||||||
} md3frame_t;
|
} md3frame_t;
|
||||||
|
@ -112,7 +112,7 @@ typedef struct
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char nam[64]; //ascz tag name
|
char nam[64]; //ascz tag name
|
||||||
vec3f_t p, x, y, z; //tag object pos&orient
|
FVector3 p, x, y, z; //tag object pos&orient
|
||||||
} md3tag_t;
|
} md3tag_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -163,7 +163,7 @@ struct md3model_t : public idmodel_t
|
||||||
|
|
||||||
//MD3 specific
|
//MD3 specific
|
||||||
md3head_t head;
|
md3head_t head;
|
||||||
vec3f_t *muladdframes;
|
FVector3 *muladdframes;
|
||||||
|
|
||||||
uint16_t *indexes;
|
uint16_t *indexes;
|
||||||
uint16_t *vindexes;
|
uint16_t *vindexes;
|
||||||
|
@ -183,7 +183,7 @@ FGameTexture* mdloadskin(idmodel_t* m, int32_t number, int32_t pal, int32_t surf
|
||||||
void mdinit(void);
|
void mdinit(void);
|
||||||
void freeallmodels(void);
|
void freeallmodels(void);
|
||||||
int32_t polymost_mddraw(tspriteptr_t tspr);
|
int32_t polymost_mddraw(tspriteptr_t tspr);
|
||||||
EXTERN void md3_vox_calcmat_common(tspriteptr_t tspr, const vec3f_t *a0, float f, float mat[16]);
|
EXTERN void md3_vox_calcmat_common(tspriteptr_t tspr, const FVector3 *a0, float f, float mat[16]);
|
||||||
|
|
||||||
EXTERN int32_t mdpause;
|
EXTERN int32_t mdpause;
|
||||||
EXTERN int32_t nextmodelid;
|
EXTERN int32_t nextmodelid;
|
||||||
|
|
|
@ -81,7 +81,7 @@ static int32_t nummodelsalloced = 0;
|
||||||
|
|
||||||
static int32_t maxmodelverts = 0, allocmodelverts = 0;
|
static int32_t maxmodelverts = 0, allocmodelverts = 0;
|
||||||
static int32_t maxmodeltris = 0, allocmodeltris = 0;
|
static int32_t maxmodeltris = 0, allocmodeltris = 0;
|
||||||
static vec3f_t *vertlist = NULL; //temp array to store interpolated vertices for drawing
|
static FVector3 *vertlist = NULL; //temp array to store interpolated vertices for drawing
|
||||||
|
|
||||||
#ifdef USE_GLEXT
|
#ifdef USE_GLEXT
|
||||||
static int32_t allocvbos = 0, curvbo = 0;
|
static int32_t allocvbos = 0, curvbo = 0;
|
||||||
|
@ -303,7 +303,7 @@ int32_t md_defineskin(int32_t modelid, const char *skinfn, int32_t palnum, int32
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t md_definehud(int32_t modelid, int32_t tilex, vec3f_t add, int32_t angadd, int32_t flags, int32_t fov)
|
int32_t md_definehud(int32_t modelid, int32_t tilex, FVector3 add, int32_t angadd, int32_t flags, int32_t fov)
|
||||||
{
|
{
|
||||||
if (!mdinited) mdinit();
|
if (!mdinited) mdinit();
|
||||||
|
|
||||||
|
@ -685,7 +685,7 @@ static md2model_t *md2load(FileReader & fil, const char *filnam)
|
||||||
m3->numframes = m3->head.numframes;
|
m3->numframes = m3->head.numframes;
|
||||||
|
|
||||||
m3->head.frames = (md3frame_t *)M_Calloc(m3->head.numframes, sizeof(md3frame_t));
|
m3->head.frames = (md3frame_t *)M_Calloc(m3->head.numframes, sizeof(md3frame_t));
|
||||||
m3->muladdframes = (vec3f_t *)M_Calloc(m->numframes * 2, sizeof(vec3f_t));
|
m3->muladdframes = (FVector3 *)M_Calloc(m->numframes * 2, sizeof(FVector3));
|
||||||
|
|
||||||
f = (md2frame_t *)(m->frames);
|
f = (md2frame_t *)(m->frames);
|
||||||
|
|
||||||
|
@ -751,9 +751,9 @@ static md2model_t *md2load(FileReader & fil, const char *filnam)
|
||||||
while (k < m->numframes)
|
while (k < m->numframes)
|
||||||
{
|
{
|
||||||
f = (md2frame_t *)&m->frames[k*m->framebytes];
|
f = (md2frame_t *)&m->frames[k*m->framebytes];
|
||||||
s->xyzn[(k*s->numverts) + (i*3) + j].x = (int16_t) (((f->verts[m->tris[i].v[j]].v[0] * f->mul.x) + f->add.x) * 64.f);
|
s->xyzn[(k*s->numverts) + (i*3) + j].x = (int16_t) (((f->verts[m->tris[i].v[j]].v[0] * f->mul.X) + f->add.X) * 64.f);
|
||||||
s->xyzn[(k*s->numverts) + (i*3) + j].y = (int16_t) (((f->verts[m->tris[i].v[j]].v[1] * f->mul.y) + f->add.y) * 64.f);
|
s->xyzn[(k*s->numverts) + (i*3) + j].y = (int16_t) (((f->verts[m->tris[i].v[j]].v[1] * f->mul.Y) + f->add.Y) * 64.f);
|
||||||
s->xyzn[(k*s->numverts) + (i*3) + j].z = (int16_t) (((f->verts[m->tris[i].v[j]].v[2] * f->mul.z) + f->add.z) * 64.f);
|
s->xyzn[(k*s->numverts) + (i*3) + j].z = (int16_t) (((f->verts[m->tris[i].v[j]].v[2] * f->mul.Z) + f->add.Z) * 64.f);
|
||||||
|
|
||||||
k++;
|
k++;
|
||||||
}
|
}
|
||||||
|
@ -996,8 +996,8 @@ static void md3postload_common(md3model_t *m)
|
||||||
{
|
{
|
||||||
frame = &m->head.frames[framei];
|
frame = &m->head.frames[framei];
|
||||||
|
|
||||||
memset(&frame->min, 0, sizeof(vec3f_t));
|
memset(&frame->min, 0, sizeof(FVector3));
|
||||||
memset(&frame->max, 0, sizeof(vec3f_t));
|
memset(&frame->max, 0, sizeof(FVector3));
|
||||||
|
|
||||||
frame->r = 0.0f;
|
frame->r = 0.0f;
|
||||||
|
|
||||||
|
@ -1013,9 +1013,9 @@ static void md3postload_common(md3model_t *m)
|
||||||
{
|
{
|
||||||
md3xyzn_t const & framevert = frameverts[0];
|
md3xyzn_t const & framevert = frameverts[0];
|
||||||
|
|
||||||
frame->min.x = framevert.x;
|
frame->min.X = framevert.x;
|
||||||
frame->min.y = framevert.y;
|
frame->min.Y = framevert.y;
|
||||||
frame->min.z = framevert.z;
|
frame->min.Z = framevert.z;
|
||||||
|
|
||||||
frame->max = frame->min;
|
frame->max = frame->min;
|
||||||
}
|
}
|
||||||
|
@ -1023,20 +1023,20 @@ static void md3postload_common(md3model_t *m)
|
||||||
{
|
{
|
||||||
md3xyzn_t const & framevert = frameverts[verti];
|
md3xyzn_t const & framevert = frameverts[verti];
|
||||||
|
|
||||||
if (frame->min.x > framevert.x)
|
if (frame->min.X > framevert.x)
|
||||||
frame->min.x = framevert.x;
|
frame->min.X = framevert.x;
|
||||||
if (frame->max.x < framevert.x)
|
if (frame->max.X < framevert.x)
|
||||||
frame->max.x = framevert.x;
|
frame->max.X = framevert.x;
|
||||||
|
|
||||||
if (frame->min.y > framevert.y)
|
if (frame->min.Y > framevert.y)
|
||||||
frame->min.y = framevert.y;
|
frame->min.Y = framevert.y;
|
||||||
if (frame->max.y < framevert.y)
|
if (frame->max.Y < framevert.y)
|
||||||
frame->max.y = framevert.y;
|
frame->max.Y = framevert.y;
|
||||||
|
|
||||||
if (frame->min.z > framevert.z)
|
if (frame->min.Z > framevert.z)
|
||||||
frame->min.z = framevert.z;
|
frame->min.Z = framevert.z;
|
||||||
if (frame->max.z < framevert.z)
|
if (frame->max.Z < framevert.z)
|
||||||
frame->max.z = framevert.z;
|
frame->max.Z = framevert.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
++verti;
|
++verti;
|
||||||
|
@ -1045,9 +1045,9 @@ static void md3postload_common(md3model_t *m)
|
||||||
++surfi;
|
++surfi;
|
||||||
}
|
}
|
||||||
|
|
||||||
frame->cen.x = (frame->min.x + frame->max.x) * .5f;
|
frame->cen.X = (frame->min.X + frame->max.X) * .5f;
|
||||||
frame->cen.y = (frame->min.y + frame->max.y) * .5f;
|
frame->cen.Y = (frame->min.Y + frame->max.Y) * .5f;
|
||||||
frame->cen.z = (frame->min.z + frame->max.z) * .5f;
|
frame->cen.Z = (frame->min.Z + frame->max.Z) * .5f;
|
||||||
|
|
||||||
surfi = 0;
|
surfi = 0;
|
||||||
while (surfi < m->head.numsurfs)
|
while (surfi < m->head.numsurfs)
|
||||||
|
@ -1061,9 +1061,9 @@ static void md3postload_common(md3model_t *m)
|
||||||
{
|
{
|
||||||
md3xyzn_t const & framevert = frameverts[verti];
|
md3xyzn_t const & framevert = frameverts[verti];
|
||||||
|
|
||||||
vec1[0] = framevert.x - frame->cen.x;
|
vec1[0] = framevert.x - frame->cen.X;
|
||||||
vec1[1] = framevert.y - frame->cen.y;
|
vec1[1] = framevert.y - frame->cen.Y;
|
||||||
vec1[2] = framevert.z - frame->cen.z;
|
vec1[2] = framevert.z - frame->cen.Z;
|
||||||
|
|
||||||
dist = vec1[0] * vec1[0] + vec1[1] * vec1[1] + vec1[2] * vec1[2];
|
dist = vec1[0] * vec1[0] + vec1[1] * vec1[1] + vec1[2] * vec1[2];
|
||||||
|
|
||||||
|
@ -1083,7 +1083,7 @@ static void md3postload_common(md3model_t *m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void md3_vox_calcmat_common(tspriteptr_t tspr, const vec3f_t *a0, float f, float mat[16])
|
void md3_vox_calcmat_common(tspriteptr_t tspr, const FVector3 *a0, float f, float mat[16])
|
||||||
{
|
{
|
||||||
float k0, k1, k2, k3, k4, k5, k6, k7;
|
float k0, k1, k2, k3, k4, k5, k6, k7;
|
||||||
|
|
||||||
|
@ -1106,9 +1106,9 @@ void md3_vox_calcmat_common(tspriteptr_t tspr, const vec3f_t *a0, float f, float
|
||||||
mat[10] = k4*k7 - k5*k6;
|
mat[10] = k4*k7 - k5*k6;
|
||||||
mat[14] = k2*k6 + k3*k7;
|
mat[14] = k2*k6 + k3*k7;
|
||||||
|
|
||||||
mat[12] = (mat[12] + a0->y*mat[0]) + (a0->z*mat[4] + a0->x*mat[ 8]);
|
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]);
|
mat[13] = (mat[13] + a0->Y*mat[1]) + (a0->Z*mat[5] + a0->X*mat[ 9]);
|
||||||
mat[14] = (mat[14] + a0->y*mat[2]) + (a0->z*mat[6] + a0->x*mat[10]);
|
mat[14] = (mat[14] + a0->Y*mat[2]) + (a0->Z*mat[6] + a0->X*mat[10]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void md3draw_handle_triangles(const md3surf_t *s, uint16_t *indexhandle,
|
static void md3draw_handle_triangles(const md3surf_t *s, uint16_t *indexhandle,
|
||||||
|
@ -1130,7 +1130,7 @@ static void md3draw_handle_triangles(const md3surf_t *s, uint16_t *indexhandle,
|
||||||
|
|
||||||
vt->SetTexCoord(s->uv[k].u, s->uv[k].v);
|
vt->SetTexCoord(s->uv[k].u, s->uv[k].v);
|
||||||
|
|
||||||
vt->SetVertex(vertlist[k].x, vertlist[k].y, vertlist[k].z);
|
vt->SetVertex(vertlist[k].X, vertlist[k].Y, vertlist[k].Z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GLInterface.Draw(DT_Triangles, data.second, s->numtris *3);
|
GLInterface.Draw(DT_Triangles, data.second, s->numtris *3);
|
||||||
|
@ -1138,7 +1138,7 @@ static void md3draw_handle_triangles(const md3surf_t *s, uint16_t *indexhandle,
|
||||||
|
|
||||||
static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
{
|
{
|
||||||
vec3f_t m0, m1, a0;
|
FVector3 m0, m1, a0;
|
||||||
md3xyzn_t *v0, *v1;
|
md3xyzn_t *v0, *v1;
|
||||||
int32_t i, surfi;
|
int32_t i, surfi;
|
||||||
float f, g, k0, k1, k2=0, k3=0, mat[16]; // inits: compiler-happy
|
float f, g, k0, k1, k2=0, k3=0, mat[16]; // inits: compiler-happy
|
||||||
|
@ -1170,11 +1170,11 @@ static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
m->nframe = clamp(m->nframe, 0, m->numframes-1);
|
m->nframe = clamp(m->nframe, 0, m->numframes-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
m0.z = m0.y = m0.x = g *= m->scale * (1.f/64.f);
|
m0.Z = m0.Y = m0.X = g *= m->scale * (1.f/64.f);
|
||||||
m1.z = m1.y = m1.x = f *= m->scale * (1.f/64.f);
|
m1.Z = m1.Y = m1.X = f *= m->scale * (1.f/64.f);
|
||||||
|
|
||||||
a0.x = a0.y = 0;
|
a0.X = a0.Y = 0;
|
||||||
a0.z = m->zadd * m->scale;
|
a0.Z = m->zadd * m->scale;
|
||||||
|
|
||||||
// Parkar: Moved up to be able to use k0 for the y-flipping code
|
// Parkar: Moved up to be able to use k0 for the y-flipping code
|
||||||
k0 = (float)tspr->z+spriteext[tspr->owner].position_offset.z;
|
k0 = (float)tspr->z+spriteext[tspr->owner].position_offset.z;
|
||||||
|
@ -1186,28 +1186,28 @@ static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
// Parkar: Changed to use the same method as centeroriented sprites
|
// Parkar: Changed to use the same method as centeroriented sprites
|
||||||
if (globalorientation&8) //y-flipping
|
if (globalorientation&8) //y-flipping
|
||||||
{
|
{
|
||||||
m0.z = -m0.z; m1.z = -m1.z; a0.z = -a0.z;
|
m0.Z = -m0.Z; m1.Z = -m1.Z; a0.Z = -a0.Z;
|
||||||
k0 -= (float)(sizyrep<<2);
|
k0 -= (float)(sizyrep<<2);
|
||||||
}
|
}
|
||||||
if (globalorientation&4) { m0.y = -m0.y; m1.y = -m1.y; a0.y = -a0.y; } //x-flipping
|
if (globalorientation&4) { m0.Y = -m0.Y; m1.Y = -m1.Y; a0.Y = -a0.Y; } //x-flipping
|
||||||
|
|
||||||
// yoffset differs from zadd in that it does not follow cstat&8 y-flipping
|
// yoffset differs from zadd in that it does not follow cstat&8 y-flipping
|
||||||
a0.z += m->yoffset*m->scale;
|
a0.Z += m->yoffset*m->scale;
|
||||||
|
|
||||||
f = ((float)tspr->xrepeat) * (1.f/64.f) * m->bscale;
|
f = ((float)tspr->xrepeat) * (1.f/64.f) * m->bscale;
|
||||||
m0.x *= f; m0.y *= -f;
|
m0.X *= f; m0.Y *= -f;
|
||||||
m1.x *= f; m1.y *= -f;
|
m1.X *= f; m1.Y *= -f;
|
||||||
a0.x *= f; a0.y *= -f;
|
a0.X *= f; a0.Y *= -f;
|
||||||
f = ((float)tspr->yrepeat) * (1.f/64.f) * m->bscale;
|
f = ((float)tspr->yrepeat) * (1.f/64.f) * m->bscale;
|
||||||
m0.z *= f; m1.z *= f; a0.z *= f;
|
m0.Z *= f; m1.Z *= f; a0.Z *= f;
|
||||||
|
|
||||||
// floor aligned
|
// floor aligned
|
||||||
k1 = (float)tspr->y+spriteext[tspr->owner].position_offset.y;
|
k1 = (float)tspr->y+spriteext[tspr->owner].position_offset.y;
|
||||||
if ((globalorientation&48)==32)
|
if ((globalorientation&48)==32)
|
||||||
{
|
{
|
||||||
m0.z = -m0.z; m1.z = -m1.z; a0.z = -a0.z;
|
m0.Z = -m0.Z; m1.Z = -m1.Z; a0.Z = -a0.Z;
|
||||||
m0.y = -m0.y; m1.y = -m1.y; a0.y = -a0.y;
|
m0.Y = -m0.Y; m1.Y = -m1.Y; a0.Y = -a0.Y;
|
||||||
f = a0.x; a0.x = a0.z; a0.z = f;
|
f = a0.X; a0.X = a0.Z; a0.Z = f;
|
||||||
k1 += (float)(sizyrep>>3);
|
k1 += (float)(sizyrep>>3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1215,9 +1215,9 @@ static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
// calculations below again, but are needed for the base offsets.
|
// calculations below again, but are needed for the base offsets.
|
||||||
f = (65536.f*512.f)/(fxdimen*fviewingrange);
|
f = (65536.f*512.f)/(fxdimen*fviewingrange);
|
||||||
g = 32.f/(fxdimen*gxyaspect);
|
g = 32.f/(fxdimen*gxyaspect);
|
||||||
m0.y *= f; m1.y *= f; a0.y = (((float)(tspr->x+spriteext[tspr->owner].position_offset.x-globalposx))* (1.f/1024.f) + a0.y)*f;
|
m0.Y *= f; m1.Y *= f; a0.Y = (((float)(tspr->x+spriteext[tspr->owner].position_offset.x-globalposx))* (1.f/1024.f) + a0.Y)*f;
|
||||||
m0.x *=-f; m1.x *=-f; a0.x = ((k1 -fglobalposy) * -(1.f/1024.f) + a0.x)*-f;
|
m0.X *=-f; m1.X *=-f; a0.X = ((k1 -fglobalposy) * -(1.f/1024.f) + a0.X)*-f;
|
||||||
m0.z *= g; m1.z *= g; a0.z = ((k0 -fglobalposz) * -(1.f/16384.f) + a0.z)*g;
|
m0.Z *= g; m1.Z *= g; a0.Z = ((k0 -fglobalposz) * -(1.f/16384.f) + a0.Z)*g;
|
||||||
|
|
||||||
md3_vox_calcmat_common(tspr, &a0, f, mat);
|
md3_vox_calcmat_common(tspr, &a0, f, mat);
|
||||||
|
|
||||||
|
@ -1276,17 +1276,17 @@ static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
// PLAG: Cleaner model rotation code
|
// PLAG: Cleaner model rotation code
|
||||||
if (sext->pitch || sext->roll)
|
if (sext->pitch || sext->roll)
|
||||||
{
|
{
|
||||||
float f = 1.f/((fxdimen * fviewingrange) * (256.f/(65536.f*128.f)) * (m0.x+m1.x));
|
float f = 1.f/((fxdimen * fviewingrange) * (256.f/(65536.f*128.f)) * (m0.X+m1.X));
|
||||||
memset(&a0, 0, sizeof(a0));
|
memset(&a0, 0, sizeof(a0));
|
||||||
|
|
||||||
if (sext->pivot_offset.x)
|
if (sext->pivot_offset.x)
|
||||||
a0.x = (float) sext->pivot_offset.x * f;
|
a0.X = (float) sext->pivot_offset.x * f;
|
||||||
|
|
||||||
if (sext->pivot_offset.y) // Compare with SCREEN_FACTORS above
|
if (sext->pivot_offset.y) // Compare with SCREEN_FACTORS above
|
||||||
a0.y = (float) sext->pivot_offset.y * f;
|
a0.Y = (float) sext->pivot_offset.y * f;
|
||||||
|
|
||||||
if ((sext->pivot_offset.z) && !(tspr->clipdist & TSPR_FLAGS_MDHACK)) // Compare with SCREEN_FACTORS above
|
if ((sext->pivot_offset.z) && !(tspr->clipdist & TSPR_FLAGS_MDHACK)) // Compare with SCREEN_FACTORS above
|
||||||
a0.z = (float)sext->pivot_offset.z / (gxyaspect * fxdimen * (65536.f/128.f) * (m0.z+m1.z));
|
a0.Z = (float)sext->pivot_offset.z / (gxyaspect * fxdimen * (65536.f/128.f) * (m0.Z+m1.Z));
|
||||||
|
|
||||||
k0 = bcosf(sext->pitch, -14);
|
k0 = bcosf(sext->pitch, -14);
|
||||||
k1 = bsinf(sext->pitch, -14);
|
k1 = bsinf(sext->pitch, -14);
|
||||||
|
@ -1302,7 +1302,7 @@ static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
{
|
{
|
||||||
//PLAG : sorting stuff
|
//PLAG : sorting stuff
|
||||||
uint16_t *indexhandle;
|
uint16_t *indexhandle;
|
||||||
vec3f_t fp;
|
FVector3 fp;
|
||||||
|
|
||||||
const md3surf_t *const s = &m->head.surfs[surfi];
|
const md3surf_t *const s = &m->head.surfs[surfi];
|
||||||
|
|
||||||
|
@ -1311,28 +1311,28 @@ static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
|
|
||||||
if (sext->pitch || sext->roll)
|
if (sext->pitch || sext->roll)
|
||||||
{
|
{
|
||||||
vec3f_t fp1, fp2;
|
FVector3 fp1, fp2;
|
||||||
|
|
||||||
for (i=s->numverts-1; i>=0; i--)
|
for (i=s->numverts-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
fp.z = v0[i].x + a0.x;
|
fp.Z = v0[i].x + a0.X;
|
||||||
fp.x = v0[i].y + a0.y;
|
fp.X = v0[i].y + a0.Y;
|
||||||
fp.y = v0[i].z + a0.z;
|
fp.Y = v0[i].z + a0.Z;
|
||||||
|
|
||||||
fp1.x = fp.x*k2 + fp.y*k3;
|
fp1.X = fp.X*k2 + fp.Y*k3;
|
||||||
fp1.y = fp.x*k0*(-k3) + fp.y*k0*k2 + fp.z*(-k1);
|
fp1.Y = fp.X*k0*(-k3) + fp.Y*k0*k2 + fp.Z*(-k1);
|
||||||
fp1.z = fp.x*k1*(-k3) + fp.y*k1*k2 + fp.z*k0;
|
fp1.Z = fp.X*k1*(-k3) + fp.Y*k1*k2 + fp.Z*k0;
|
||||||
|
|
||||||
fp.z = v1[i].x + a0.x;
|
fp.Z = v1[i].x + a0.X;
|
||||||
fp.x = v1[i].y + a0.y;
|
fp.X = v1[i].y + a0.Y;
|
||||||
fp.y = v1[i].z + a0.z;
|
fp.Y = v1[i].z + a0.Z;
|
||||||
|
|
||||||
fp2.x = fp.x*k2 + fp.y*k3;
|
fp2.X = fp.X*k2 + fp.Y*k3;
|
||||||
fp2.y = fp.x*k0*(-k3) + fp.y*k0*k2 + fp.z*(-k1);
|
fp2.Y = fp.X*k0*(-k3) + fp.Y*k0*k2 + fp.Z*(-k1);
|
||||||
fp2.z = fp.x*k1*(-k3) + fp.y*k1*k2 + fp.z*k0;
|
fp2.Z = fp.X*k1*(-k3) + fp.Y*k1*k2 + fp.Z*k0;
|
||||||
fp.z = (fp1.z - a0.x)*m0.x + (fp2.z - a0.x)*m1.x;
|
fp.Z = (fp1.Z - a0.X)*m0.X + (fp2.Z - a0.X)*m1.X;
|
||||||
fp.x = (fp1.x - a0.y)*m0.y + (fp2.x - a0.y)*m1.y;
|
fp.X = (fp1.X - a0.Y)*m0.Y + (fp2.X - a0.Y)*m1.Y;
|
||||||
fp.y = (fp1.y - a0.z)*m0.z + (fp2.y - a0.z)*m1.z;
|
fp.Y = (fp1.Y - a0.Z)*m0.Z + (fp2.Y - a0.Z)*m1.Z;
|
||||||
|
|
||||||
vertlist[i] = fp;
|
vertlist[i] = fp;
|
||||||
}
|
}
|
||||||
|
@ -1341,9 +1341,9 @@ static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
{
|
{
|
||||||
for (i=s->numverts-1; i>=0; i--)
|
for (i=s->numverts-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
fp.z = v0[i].x*m0.x + v1[i].x*m1.x;
|
fp.Z = v0[i].x*m0.X + v1[i].x*m1.X;
|
||||||
fp.y = v0[i].z*m0.z + v1[i].z*m1.z;
|
fp.Y = v0[i].z*m0.Z + v1[i].z*m1.Z;
|
||||||
fp.x = v0[i].y*m0.y + v1[i].y*m1.y;
|
fp.X = v0[i].y*m0.Y + v1[i].y*m1.Y;
|
||||||
|
|
||||||
vertlist[i] = fp;
|
vertlist[i] = fp;
|
||||||
}
|
}
|
||||||
|
@ -1376,28 +1376,28 @@ static int32_t polymost_md3draw(md3model_t *m, tspriteptr_t tspr)
|
||||||
{
|
{
|
||||||
for (i=0; i<=s->numtris-1; ++i)
|
for (i=0; i<=s->numtris-1; ++i)
|
||||||
{
|
{
|
||||||
vec3f_t const vlt[3] = { vertlist[s->tris[i].i[0]], vertlist[s->tris[i].i[1]], vertlist[s->tris[i].i[2]] };
|
FVector3 const vlt[3] = { vertlist[s->tris[i].i[0]], vertlist[s->tris[i].i[1]], vertlist[s->tris[i].i[2]] };
|
||||||
|
|
||||||
// Matrix multiplication - ugly but clear
|
// Matrix multiplication - ugly but clear
|
||||||
vec3f_t const fp[3] = { { (vlt[0].x * mat[0]) + (vlt[0].y * mat[4]) + (vlt[0].z * mat[8]) + mat[12],
|
FVector3 const fp[3] = { { (vlt[0].X * mat[0]) + (vlt[0].Y * mat[4]) + (vlt[0].Z * mat[8]) + mat[12],
|
||||||
(vlt[0].x * mat[1]) + (vlt[0].y * mat[5]) + (vlt[0].z * mat[9]) + mat[13],
|
(vlt[0].X * mat[1]) + (vlt[0].Y * mat[5]) + (vlt[0].Z * mat[9]) + mat[13],
|
||||||
(vlt[0].x * mat[2]) + (vlt[0].y * mat[6]) + (vlt[0].z * mat[10]) + mat[14] },
|
(vlt[0].X * mat[2]) + (vlt[0].Y * mat[6]) + (vlt[0].Z * mat[10]) + mat[14] },
|
||||||
|
|
||||||
{ (vlt[1].x * mat[0]) + (vlt[1].y * mat[4]) + (vlt[1].z * mat[8]) + mat[12],
|
{ (vlt[1].X * mat[0]) + (vlt[1].Y * mat[4]) + (vlt[1].Z * mat[8]) + mat[12],
|
||||||
(vlt[1].x * mat[1]) + (vlt[1].y * mat[5]) + (vlt[1].z * mat[9]) + mat[13],
|
(vlt[1].X * mat[1]) + (vlt[1].Y * mat[5]) + (vlt[1].Z * mat[9]) + mat[13],
|
||||||
(vlt[1].x * mat[2]) + (vlt[1].y * mat[6]) + (vlt[1].z * mat[10]) + mat[14] },
|
(vlt[1].X * mat[2]) + (vlt[1].Y * mat[6]) + (vlt[1].Z * mat[10]) + mat[14] },
|
||||||
|
|
||||||
{ (vlt[2].x * mat[0]) + (vlt[2].y * mat[4]) + (vlt[2].z * mat[8]) + mat[12],
|
{ (vlt[2].X * mat[0]) + (vlt[2].Y * mat[4]) + (vlt[2].Z * mat[8]) + mat[12],
|
||||||
(vlt[2].x * mat[1]) + (vlt[2].y * mat[5]) + (vlt[2].z * mat[9]) + mat[13],
|
(vlt[2].X * mat[1]) + (vlt[2].Y * mat[5]) + (vlt[2].Z * mat[9]) + mat[13],
|
||||||
(vlt[2].x * mat[2]) + (vlt[2].y * mat[6]) + (vlt[2].z * mat[10]) + mat[14] } };
|
(vlt[2].X * mat[2]) + (vlt[2].Y * mat[6]) + (vlt[2].Z * mat[10]) + mat[14] } };
|
||||||
|
|
||||||
f = (fp[0].x * fp[0].x) + (fp[0].y * fp[0].y) + (fp[0].z * fp[0].z);
|
f = (fp[0].X * fp[0].X) + (fp[0].Y * fp[0].Y) + (fp[0].Z * fp[0].Z);
|
||||||
g = (fp[1].x * fp[1].x) + (fp[1].y * fp[1].y) + (fp[1].z * fp[1].z);
|
g = (fp[1].X * fp[1].X) + (fp[1].Y * fp[1].Y) + (fp[1].Z * fp[1].Z);
|
||||||
|
|
||||||
if (f > g)
|
if (f > g)
|
||||||
f = g;
|
f = g;
|
||||||
|
|
||||||
g = (fp[2].x * fp[2].x) + (fp[2].y * fp[2].y) + (fp[2].z * fp[2].z);
|
g = (fp[2].X * fp[2].X) + (fp[2].Y * fp[2].Y) + (fp[2].Z * fp[2].Z);
|
||||||
|
|
||||||
if (f > g)
|
if (f > g)
|
||||||
f = g;
|
f = g;
|
||||||
|
@ -1524,7 +1524,7 @@ int32_t polymost_mddraw(tspriteptr_t tspr)
|
||||||
{
|
{
|
||||||
if (maxmodelverts > allocmodelverts)
|
if (maxmodelverts > allocmodelverts)
|
||||||
{
|
{
|
||||||
vertlist = (vec3f_t *) M_Realloc(vertlist, sizeof(vec3f_t)*maxmodelverts);
|
vertlist = (FVector3 *) M_Realloc(vertlist, sizeof(FVector3)*maxmodelverts);
|
||||||
allocmodelverts = maxmodelverts;
|
allocmodelverts = maxmodelverts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1123,18 +1123,18 @@ static void polymost_internal_nonparallaxed(vec2f_t n0, vec2f_t n1, float ryp0,
|
||||||
py[1] = y1;
|
py[1] = y1;
|
||||||
py[2] = double(global_getzofslope_func((usectorptr_t)§or[sectnum], oxy.x, oxy.y) - globalposz) * oy2 + ghoriz;
|
py[2] = double(global_getzofslope_func((usectorptr_t)§or[sectnum], oxy.x, oxy.y) - globalposz) * oy2 + ghoriz;
|
||||||
|
|
||||||
vec3f_t oxyz[2] = { { (float)(py[1] - py[2]), (float)(py[2] - py[0]), (float)(py[0] - py[1]) },
|
FVector3 oxyz[2] = { { (float)(py[1] - py[2]), (float)(py[2] - py[0]), (float)(py[0] - py[1]) },
|
||||||
{ (float)(px[2] - px[1]), (float)(px[0] - px[2]), (float)(px[1] - px[0]) } };
|
{ (float)(px[2] - px[1]), (float)(px[0] - px[2]), (float)(px[1] - px[0]) } };
|
||||||
|
|
||||||
float const r = 1.f / (oxyz[0].x * px[0] + oxyz[0].y * px[1] + oxyz[0].z * px[2]);
|
float const r = 1.f / (oxyz[0].X * px[0] + oxyz[0].Y * px[1] + oxyz[0].Z * px[2]);
|
||||||
|
|
||||||
xtex.d = (oxyz[0].x * duv[0].d + oxyz[0].y * duv[1].d + oxyz[0].z * duv[2].d) * r;
|
xtex.d = (oxyz[0].X * duv[0].d + oxyz[0].Y * duv[1].d + oxyz[0].Z * duv[2].d) * r;
|
||||||
xtex.u = (oxyz[0].x * duv[0].u + oxyz[0].y * duv[1].u + oxyz[0].z * duv[2].u) * r;
|
xtex.u = (oxyz[0].X * duv[0].u + oxyz[0].Y * duv[1].u + oxyz[0].Z * duv[2].u) * r;
|
||||||
xtex.v = (oxyz[0].x * duv[0].v + oxyz[0].y * duv[1].v + oxyz[0].z * duv[2].v) * r;
|
xtex.v = (oxyz[0].X * duv[0].v + oxyz[0].Y * duv[1].v + oxyz[0].Z * duv[2].v) * r;
|
||||||
|
|
||||||
ytex.d = (oxyz[1].x * duv[0].d + oxyz[1].y * duv[1].d + oxyz[1].z * duv[2].d) * r;
|
ytex.d = (oxyz[1].X * duv[0].d + oxyz[1].Y * duv[1].d + oxyz[1].Z * duv[2].d) * r;
|
||||||
ytex.u = (oxyz[1].x * duv[0].u + oxyz[1].y * duv[1].u + oxyz[1].z * duv[2].u) * r;
|
ytex.u = (oxyz[1].X * duv[0].u + oxyz[1].Y * duv[1].u + oxyz[1].Z * duv[2].u) * r;
|
||||||
ytex.v = (oxyz[1].x * duv[0].v + oxyz[1].y * duv[1].v + oxyz[1].z * duv[2].v) * r;
|
ytex.v = (oxyz[1].X * duv[0].v + oxyz[1].Y * duv[1].v + oxyz[1].Z * duv[2].v) * r;
|
||||||
|
|
||||||
otex.d = duv[0].d - px[0] * xtex.d - py[0] * ytex.d;
|
otex.d = duv[0].d - px[0] * xtex.d - py[0] * ytex.d;
|
||||||
otex.u = duv[0].u - px[0] * xtex.u - py[0] * ytex.u;
|
otex.u = duv[0].u - px[0] * xtex.u - py[0] * ytex.u;
|
||||||
|
@ -1309,10 +1309,10 @@ static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, i
|
||||||
// Transform polygon to sky coordinates
|
// Transform polygon to sky coordinates
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
vec3f_t const o = { dpxy[i].x-ghalfx, dpxy[i].y-ghalfy, ghalfx / gvrcorrection };
|
FVector3 const o = { dpxy[i].x-ghalfx, dpxy[i].y-ghalfy, ghalfx / gvrcorrection };
|
||||||
|
|
||||||
//Up/down rotation
|
//Up/down rotation
|
||||||
vec3d_t v = { o.x, o.y * gchang - o.z * gshang, o.z * gchang + o.y * gshang };
|
vec3d_t v = { o.X, o.Y * gchang - o.Z * gshang, o.Z * gchang + o.Y * gshang };
|
||||||
float const r = (ghalfx / gvrcorrection) / v.z;
|
float const r = (ghalfx / gvrcorrection) / v.z;
|
||||||
xys[i].x = v.x * r + ghalfx;
|
xys[i].x = v.x * r + ghalfx;
|
||||||
xys[i].y = v.y * r + ghalfy;
|
xys[i].y = v.y * r + ghalfy;
|
||||||
|
@ -1337,7 +1337,7 @@ static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, i
|
||||||
vv[1] = dd*((float)xdimscale*fviewingrange) * (1.f/(daptileyscale*65536.f));
|
vv[1] = dd*((float)xdimscale*fviewingrange) * (1.f/(daptileyscale*65536.f));
|
||||||
vv[0] = dd*((float)((tilesize.y>>1)+dapyoffs)) - vv[1]*ghoriz;
|
vv[0] = dd*((float)((tilesize.y>>1)+dapyoffs)) - vv[1]*ghoriz;
|
||||||
int ti = (1<<(heightBits(globalpicnum))); if (ti != tilesize.y) ti += ti;
|
int ti = (1<<(heightBits(globalpicnum))); if (ti != tilesize.y) ti += ti;
|
||||||
vec3f_t o;
|
FVector3 o;
|
||||||
|
|
||||||
xtex.d = xtex.v = 0;
|
xtex.d = xtex.v = 0;
|
||||||
ytex.d = ytex.u = 0;
|
ytex.d = ytex.u = 0;
|
||||||
|
@ -1360,9 +1360,9 @@ static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, i
|
||||||
|
|
||||||
int picnumbak = globalpicnum;
|
int picnumbak = globalpicnum;
|
||||||
ti = globalpicnum;
|
ti = globalpicnum;
|
||||||
o.y = fviewingrange/(ghalfx*256.f); o.z = 1.f/o.y;
|
o.Y = fviewingrange/(ghalfx*256.f); o.Z = 1.f/o.Y;
|
||||||
|
|
||||||
int y = ((int32_t)(((x0-ghalfx)*o.y)+fglobalang)>>(11-dapskybits));
|
int y = ((int32_t)(((x0-ghalfx)*o.Y)+fglobalang)>>(11-dapskybits));
|
||||||
float fx = x0;
|
float fx = x0;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -1372,14 +1372,14 @@ static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, i
|
||||||
globalpicnum = skytile;
|
globalpicnum = skytile;
|
||||||
if (npot)
|
if (npot)
|
||||||
{
|
{
|
||||||
fx = ((float)((y<<(11-dapskybits))-fglobalang))*o.z+ghalfx;
|
fx = ((float)((y<<(11-dapskybits))-fglobalang))*o.Z+ghalfx;
|
||||||
int tang = (y<<(11-dapskybits))&2047;
|
int tang = (y<<(11-dapskybits))&2047;
|
||||||
otex.u = otex.d*(t*((float)(tang)) * (1.f/2048.f) + xPanning) - xtex.u*fx;
|
otex.u = otex.d*(t*((float)(tang)) * (1.f/2048.f) + xPanning) - xtex.u*fx;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
otex.u = otex.d*(t*((float)(fglobalang-(y<<(11-dapskybits)))) * (1.f/2048.f) + xPanning) - xtex.u*ghalfx;
|
otex.u = otex.d*(t*((float)(fglobalang-(y<<(11-dapskybits)))) * (1.f/2048.f) + xPanning) - xtex.u*ghalfx;
|
||||||
y++;
|
y++;
|
||||||
o.x = fx; fx = ((float)((y<<(11-dapskybits))-fglobalang))*o.z+ghalfx;
|
o.X = fx; fx = ((float)((y<<(11-dapskybits))-fglobalang))*o.Z+ghalfx;
|
||||||
|
|
||||||
if (fx > x1) { fx = x1; ti = -1; }
|
if (fx > x1) { fx = x1; ti = -1; }
|
||||||
|
|
||||||
|
@ -1410,10 +1410,10 @@ static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, i
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
vec2f_t const o = { fxy[i].x-ghalfx, fxy[i].y-ghalfy };
|
vec2f_t const o = { fxy[i].x-ghalfx, fxy[i].y-ghalfy };
|
||||||
vec3f_t const o2 = { o.x, o.y, ghalfx / gvrcorrection };
|
FVector3 const o2 = { o.x, o.y, ghalfx / gvrcorrection };
|
||||||
|
|
||||||
//Up/down rotation (backwards)
|
//Up/down rotation (backwards)
|
||||||
vec3d_t v = { o2.x, o2.y * gchang + o2.z * gshang, o2.z * gchang - o2.y * gshang };
|
vec3d_t v = { o2.X, o2.Y * gchang + o2.Z * gshang, o2.Z * gchang - o2.Y * gshang };
|
||||||
float const r = (ghalfx / gvrcorrection) / v.z;
|
float const r = (ghalfx / gvrcorrection) / v.z;
|
||||||
fxyt[i].x = v.x * r + ghalfx;
|
fxyt[i].x = v.x * r + ghalfx;
|
||||||
fxyt[i].y = v.y * r + ghalfy;
|
fxyt[i].y = v.y * r + ghalfy;
|
||||||
|
@ -1422,18 +1422,18 @@ static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, i
|
||||||
duvt[i].v = duv[i].v*r;
|
duvt[i].v = duv[i].v*r;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3f_t oxyz[2] = { { (float)(fxyt[1].y - fxyt[2].y), (float)(fxyt[2].y - fxyt[0].y), (float)(fxyt[0].y - fxyt[1].y) },
|
FVector3 oxyz[2] = { { (float)(fxyt[1].y - fxyt[2].y), (float)(fxyt[2].y - fxyt[0].y), (float)(fxyt[0].y - fxyt[1].y) },
|
||||||
{ (float)(fxyt[2].x - fxyt[1].x), (float)(fxyt[0].x - fxyt[2].x), (float)(fxyt[1].x - fxyt[0].x) } };
|
{ (float)(fxyt[2].x - fxyt[1].x), (float)(fxyt[0].x - fxyt[2].x), (float)(fxyt[1].x - fxyt[0].x) } };
|
||||||
|
|
||||||
float const rr = 1.f / (oxyz[0].x * fxyt[0].x + oxyz[0].y * fxyt[1].x + oxyz[0].z * fxyt[2].x);
|
float const rr = 1.f / (oxyz[0].X * fxyt[0].x + oxyz[0].Y * fxyt[1].x + oxyz[0].Z * fxyt[2].x);
|
||||||
|
|
||||||
xtex.d = (oxyz[0].x * duvt[0].d + oxyz[0].y * duvt[1].d + oxyz[0].z * duvt[2].d) * rr;
|
xtex.d = (oxyz[0].X * duvt[0].d + oxyz[0].Y * duvt[1].d + oxyz[0].Z * duvt[2].d) * rr;
|
||||||
xtex.u = (oxyz[0].x * duvt[0].u + oxyz[0].y * duvt[1].u + oxyz[0].z * duvt[2].u) * rr;
|
xtex.u = (oxyz[0].X * duvt[0].u + oxyz[0].Y * duvt[1].u + oxyz[0].Z * duvt[2].u) * rr;
|
||||||
xtex.v = (oxyz[0].x * duvt[0].v + oxyz[0].y * duvt[1].v + oxyz[0].z * duvt[2].v) * rr;
|
xtex.v = (oxyz[0].X * duvt[0].v + oxyz[0].Y * duvt[1].v + oxyz[0].Z * duvt[2].v) * rr;
|
||||||
|
|
||||||
ytex.d = (oxyz[1].x * duvt[0].d + oxyz[1].y * duvt[1].d + oxyz[1].z * duvt[2].d) * rr;
|
ytex.d = (oxyz[1].X * duvt[0].d + oxyz[1].Y * duvt[1].d + oxyz[1].Z * duvt[2].d) * rr;
|
||||||
ytex.u = (oxyz[1].x * duvt[0].u + oxyz[1].y * duvt[1].u + oxyz[1].z * duvt[2].u) * rr;
|
ytex.u = (oxyz[1].X * duvt[0].u + oxyz[1].Y * duvt[1].u + oxyz[1].Z * duvt[2].u) * rr;
|
||||||
ytex.v = (oxyz[1].x * duvt[0].v + oxyz[1].y * duvt[1].v + oxyz[1].z * duvt[2].v) * rr;
|
ytex.v = (oxyz[1].X * duvt[0].v + oxyz[1].Y * duvt[1].v + oxyz[1].Z * duvt[2].v) * rr;
|
||||||
|
|
||||||
otex.d = duvt[0].d - fxyt[0].x * xtex.d - fxyt[0].y * ytex.d;
|
otex.d = duvt[0].d - fxyt[0].x * xtex.d - fxyt[0].y * ytex.d;
|
||||||
otex.u = duvt[0].u - fxyt[0].x * xtex.u - fxyt[0].y * ytex.u;
|
otex.u = duvt[0].u - fxyt[0].x * xtex.u - fxyt[0].y * ytex.u;
|
||||||
|
@ -1448,13 +1448,13 @@ static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, i
|
||||||
{
|
{
|
||||||
int const j = i < n-1 ? i + 1 : 0;
|
int const j = i < n-1 ? i + 1 : 0;
|
||||||
|
|
||||||
if (xys[i].x >= o.x)
|
if (xys[i].x >= o.X)
|
||||||
cxy[n2++] = xys[i];
|
cxy[n2++] = xys[i];
|
||||||
|
|
||||||
if ((xys[i].x >= o.x) != (xys[j].x >= o.x))
|
if ((xys[i].x >= o.X) != (xys[j].x >= o.X))
|
||||||
{
|
{
|
||||||
float const r = (o.x - xys[i].x) / (xys[j].x - xys[i].x);
|
float const r = (o.X - xys[i].x) / (xys[j].x - xys[i].x);
|
||||||
cxy[n2++] = { o.x, (xys[j].y - xys[i].y) * r + xys[i].y };
|
cxy[n2++] = { o.X, (xys[j].y - xys[i].y) * r + xys[i].y };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1476,10 +1476,10 @@ static void polymost_flatskyrender(vec2f_t const* const dpxy, int32_t const n, i
|
||||||
// Transform back to polymost coordinates
|
// Transform back to polymost coordinates
|
||||||
for (int i = 0; i < n3; i++)
|
for (int i = 0; i < n3; i++)
|
||||||
{
|
{
|
||||||
vec3f_t const o = { cxy2[i].x-ghalfx, cxy2[i].y-ghalfy, ghalfx / gvrcorrection };
|
FVector3 const o = { cxy2[i].x-ghalfx, cxy2[i].y-ghalfy, ghalfx / gvrcorrection };
|
||||||
|
|
||||||
//Up/down rotation
|
//Up/down rotation
|
||||||
vec3d_t v = { o.x, o.y * gchang + o.z * gshang, o.z * gchang - o.y * gshang };
|
vec3d_t v = { o.X, o.Y * gchang + o.Z * gshang, o.Z * gchang - o.Y * gshang };
|
||||||
float const r = (ghalfx / gvrcorrection) / v.z;
|
float const r = (ghalfx / gvrcorrection) / v.z;
|
||||||
cxy[i].x = v.x * r + ghalfx;
|
cxy[i].x = v.x * r + ghalfx;
|
||||||
cxy[i].y = v.y * r + ghalfy;
|
cxy[i].y = v.y * r + ghalfy;
|
||||||
|
@ -2205,7 +2205,7 @@ void polymost_drawrooms()
|
||||||
gstang = -gstang;
|
gstang = -gstang;
|
||||||
|
|
||||||
//Generate viewport trapezoid (for handling screen up/down)
|
//Generate viewport trapezoid (for handling screen up/down)
|
||||||
vec3f_t p[4] = { { 0-1, 0-1+ghorizcorrect, 0 },
|
FVector3 p[4] = { { 0-1, 0-1+ghorizcorrect, 0 },
|
||||||
{ (float)(windowxy2.x + 1 - windowxy1.x + 2), 0-1+ghorizcorrect, 0 },
|
{ (float)(windowxy2.x + 1 - windowxy1.x + 2), 0-1+ghorizcorrect, 0 },
|
||||||
{ (float)(windowxy2.x + 1 - windowxy1.x + 2), (float)(windowxy2.y + 1 - windowxy1.y + 2)+ghorizcorrect, 0 },
|
{ (float)(windowxy2.x + 1 - windowxy1.x + 2), (float)(windowxy2.y + 1 - windowxy1.y + 2)+ghorizcorrect, 0 },
|
||||||
{ 0-1, (float)(windowxy2.y + 1 - windowxy1.y + 2)+ghorizcorrect, 0 } };
|
{ 0-1, (float)(windowxy2.y + 1 - windowxy1.y + 2)+ghorizcorrect, 0 } };
|
||||||
|
@ -2213,11 +2213,11 @@ void polymost_drawrooms()
|
||||||
for (auto & v : p)
|
for (auto & v : p)
|
||||||
{
|
{
|
||||||
//Tilt rotation (backwards)
|
//Tilt rotation (backwards)
|
||||||
vec2f_t const o = { (v.x-ghalfx)*ratio, (v.y-ghoriz)*ratio };
|
vec2f_t const o = { (v.X-ghalfx)*ratio, (v.Y-ghoriz)*ratio };
|
||||||
vec3f_t const o2 = { o.x*gctang + o.y*gstang, o.y*gctang - o.x*gstang + ghoriz2, ghalfx / gvrcorrection };
|
FVector3 const o2 = { o.x*gctang + o.y*gstang, o.y*gctang - o.x*gstang + ghoriz2, ghalfx / gvrcorrection };
|
||||||
|
|
||||||
//Up/down rotation (backwards)
|
//Up/down rotation (backwards)
|
||||||
v = { o2.x, o2.y * gchang + o2.z * gshang, o2.z * gchang - o2.y * gshang };
|
v = { o2.X, o2.Y * gchang + o2.Z * gshang, o2.Z * gchang - o2.Y * gshang };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inpreparemirror)
|
if (inpreparemirror)
|
||||||
|
@ -2227,19 +2227,19 @@ void polymost_drawrooms()
|
||||||
//Clip to SCISDIST plane
|
//Clip to SCISDIST plane
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
vec3f_t p2[6];
|
FVector3 p2[6];
|
||||||
|
|
||||||
for (bssize_t i=0; i<4; i++)
|
for (bssize_t i=0; i<4; i++)
|
||||||
{
|
{
|
||||||
int const j = i < 3 ? i + 1 : 0;
|
int const j = i < 3 ? i + 1 : 0;
|
||||||
|
|
||||||
if (p[i].z >= SCISDIST)
|
if (p[i].Z >= SCISDIST)
|
||||||
p2[n++] = p[i];
|
p2[n++] = p[i];
|
||||||
|
|
||||||
if ((p[i].z >= SCISDIST) != (p[j].z >= SCISDIST))
|
if ((p[i].Z >= SCISDIST) != (p[j].Z >= SCISDIST))
|
||||||
{
|
{
|
||||||
float const r = (SCISDIST - p[i].z) / (p[j].z - p[i].z);
|
float const r = (SCISDIST - p[i].Z) / (p[j].Z - p[i].Z);
|
||||||
p2[n++] = { (p[j].x - p[i].x) * r + p[i].x, (p[j].y - p[i].y) * r + p[i].y, SCISDIST };
|
p2[n++] = { (p[j].X - p[i].X) * r + p[i].X, (p[j].Y - p[i].Y) * r + p[i].Y, SCISDIST };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2253,9 +2253,9 @@ void polymost_drawrooms()
|
||||||
|
|
||||||
for (bssize_t i = 0; i < n; i++)
|
for (bssize_t i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
float const r = (ghalfx / gvrcorrection) / p2[i].z;
|
float const r = (ghalfx / gvrcorrection) / p2[i].Z;
|
||||||
sx[i] = p2[i].x * r + ghalfx;
|
sx[i] = p2[i].X * r + ghalfx;
|
||||||
sy[i] = p2[i].y * r + ghoriz;
|
sy[i] = p2[i].Y * r + ghoriz;
|
||||||
}
|
}
|
||||||
|
|
||||||
polymost_initmosts(sx, sy, n);
|
polymost_initmosts(sx, sy, n);
|
||||||
|
@ -3811,35 +3811,35 @@ int32_t polymost_voxdraw(voxmodel_t* m, tspriteptr_t const tspr, bool rotate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
vec3f_t m0 = { m->scale, m->scale, m->scale };
|
FVector3 m0 = { m->scale, m->scale, m->scale };
|
||||||
vec3f_t a0 = { 0, 0, m->zadd * m->scale };
|
FVector3 a0 = { 0, 0, m->zadd * m->scale };
|
||||||
|
|
||||||
k0 = m->bscale / 64.f;
|
k0 = m->bscale / 64.f;
|
||||||
f = (float)tspr->xrepeat * (256.f / 320.f) * k0;
|
f = (float)tspr->xrepeat * (256.f / 320.f) * k0;
|
||||||
if ((sprite[tspr->owner].cstat & 48) == 16)
|
if ((sprite[tspr->owner].cstat & 48) == 16)
|
||||||
{
|
{
|
||||||
f *= 1.25f;
|
f *= 1.25f;
|
||||||
a0.y -= tspr->xoffset * bcosf(spriteext[tspr->owner].angoff, -20);
|
a0.Y -= tspr->xoffset * bcosf(spriteext[tspr->owner].angoff, -20);
|
||||||
a0.x += tspr->xoffset * bsinf(spriteext[tspr->owner].angoff, -20);
|
a0.X += tspr->xoffset * bsinf(spriteext[tspr->owner].angoff, -20);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (globalorientation & 8) { m0.z = -m0.z; a0.z = -a0.z; } //y-flipping
|
if (globalorientation & 8) { m0.Z = -m0.Z; a0.Z = -a0.Z; } //y-flipping
|
||||||
if (globalorientation & 4) { m0.x = -m0.x; a0.x = -a0.x; a0.y = -a0.y; } //x-flipping
|
if (globalorientation & 4) { m0.X = -m0.X; a0.X = -a0.X; a0.Y = -a0.Y; } //x-flipping
|
||||||
|
|
||||||
m0.x *= f; a0.x *= f; f = -f;
|
m0.X *= f; a0.X *= f; f = -f;
|
||||||
m0.y *= f; a0.y *= f;
|
m0.Y *= f; a0.Y *= f;
|
||||||
f = (float)tspr->yrepeat * k0;
|
f = (float)tspr->yrepeat * k0;
|
||||||
m0.z *= f; a0.z *= f;
|
m0.Z *= f; a0.Z *= f;
|
||||||
|
|
||||||
k0 = (float)(tspr->z + spriteext[tspr->owner].position_offset.z);
|
k0 = (float)(tspr->z + spriteext[tspr->owner].position_offset.z);
|
||||||
f = ((globalorientation & 8) && (sprite[tspr->owner].cstat & 48) != 0) ? -4.f : 4.f;
|
f = ((globalorientation & 8) && (sprite[tspr->owner].cstat & 48) != 0) ? -4.f : 4.f;
|
||||||
k0 -= (tspr->yoffset * tspr->yrepeat) * f * m->bscale;
|
k0 -= (tspr->yoffset * tspr->yrepeat) * f * m->bscale;
|
||||||
zoff = m->siz.z * .5f;
|
zoff = m->siz.z * .5f;
|
||||||
if (!(tspr->cstat & 128))
|
if (!(tspr->cstat & 128))
|
||||||
zoff += m->piv.z;
|
zoff += m->piv.Z;
|
||||||
else if ((tspr->cstat & 48) != 48)
|
else if ((tspr->cstat & 48) != 48)
|
||||||
{
|
{
|
||||||
zoff += m->piv.z;
|
zoff += m->piv.Z;
|
||||||
zoff -= m->siz.z * .5f;
|
zoff -= m->siz.z * .5f;
|
||||||
}
|
}
|
||||||
if (globalorientation & 8) zoff = m->siz.z - zoff;
|
if (globalorientation & 8) zoff = m->siz.z - zoff;
|
||||||
|
@ -3849,9 +3849,9 @@ int32_t polymost_voxdraw(voxmodel_t* m, tspriteptr_t const tspr, bool rotate)
|
||||||
|
|
||||||
int const shadowHack = !!(tspr->clipdist & TSPR_FLAGS_MDHACK);
|
int const shadowHack = !!(tspr->clipdist & TSPR_FLAGS_MDHACK);
|
||||||
|
|
||||||
m0.y *= f; a0.y = (((float)(tspr->x + spriteext[tspr->owner].position_offset.x - globalposx)) * (1.f / 1024.f) + a0.y) * f;
|
m0.Y *= f; a0.Y = (((float)(tspr->x + spriteext[tspr->owner].position_offset.x - globalposx)) * (1.f / 1024.f) + a0.Y) * f;
|
||||||
m0.x *= -f; a0.x = (((float)(tspr->y + spriteext[tspr->owner].position_offset.y - globalposy)) * -(1.f / 1024.f) + a0.x) * -f;
|
m0.X *= -f; a0.X = (((float)(tspr->y + spriteext[tspr->owner].position_offset.y - globalposy)) * -(1.f / 1024.f) + a0.X) * -f;
|
||||||
m0.z *= g; a0.z = (((float)(k0 - globalposz - shadowHack)) * -(1.f / 16384.f) + a0.z) * g;
|
m0.Z *= g; a0.Z = (((float)(k0 - globalposz - shadowHack)) * -(1.f / 16384.f) + a0.Z) * g;
|
||||||
|
|
||||||
float mat[16];
|
float mat[16];
|
||||||
md3_vox_calcmat_common(tspr, &a0, f, mat);
|
md3_vox_calcmat_common(tspr, &a0, f, mat);
|
||||||
|
@ -3898,13 +3898,13 @@ int32_t polymost_voxdraw(voxmodel_t* m, tspriteptr_t const tspr, bool rotate)
|
||||||
memcpy(omat, mat, sizeof(omat));
|
memcpy(omat, mat, sizeof(omat));
|
||||||
|
|
||||||
f = 1.f / 64.f;
|
f = 1.f / 64.f;
|
||||||
g = m0.x * f; mat[0] *= g; mat[1] *= g; mat[2] *= g;
|
g = m0.X * f; mat[0] *= g; mat[1] *= g; mat[2] *= g;
|
||||||
g = m0.y * f; mat[4] = omat[8] * g; mat[5] = omat[9] * g; mat[6] = omat[10] * g;
|
g = m0.Y * f; mat[4] = omat[8] * g; mat[5] = omat[9] * g; mat[6] = omat[10] * g;
|
||||||
g = -m0.z * f; mat[8] = omat[4] * g; mat[9] = omat[5] * g; mat[10] = omat[6] * g;
|
g = -m0.Z * f; mat[8] = omat[4] * g; mat[9] = omat[5] * g; mat[10] = omat[6] * g;
|
||||||
//
|
//
|
||||||
mat[12] -= (m->piv.x * mat[0] + m->piv.y * mat[4] + zoff * mat[8]);
|
mat[12] -= (m->piv.X * mat[0] + m->piv.Y * mat[4] + zoff * mat[8]);
|
||||||
mat[13] -= (m->piv.x * mat[1] + m->piv.y * mat[5] + zoff * mat[9]);
|
mat[13] -= (m->piv.X * mat[1] + m->piv.Y * mat[5] + zoff * mat[9]);
|
||||||
mat[14] -= (m->piv.x * mat[2] + m->piv.y * mat[6] + zoff * mat[10]);
|
mat[14] -= (m->piv.X * mat[2] + m->piv.Y * mat[6] + zoff * mat[10]);
|
||||||
//
|
//
|
||||||
//Let OpenGL (and perhaps hardware :) handle the matrix rotation
|
//Let OpenGL (and perhaps hardware :) handle the matrix rotation
|
||||||
mat[3] = mat[7] = mat[11] = 0.f; mat[15] = 1.f;
|
mat[3] = mat[7] = mat[11] = 0.f; mat[15] = 1.f;
|
||||||
|
|
|
@ -1941,7 +1941,7 @@ static bool parseModelHudBlock(FScanner& sc)
|
||||||
|
|
||||||
for (int i = starttile; i <= endtile; i++)
|
for (int i = starttile; i <= endtile; i++)
|
||||||
{
|
{
|
||||||
vec3f_t addf = { (float)add.X, (float)add.Y, (float)add.Z };
|
FVector3 addf = { (float)add.X, (float)add.Y, (float)add.Z };
|
||||||
int res = md_definehud(mdglobal.lastmodelid, i, addf, angadd, flags, fov);
|
int res = md_definehud(mdglobal.lastmodelid, i, addf, angadd, flags, fov);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -74,9 +74,9 @@ static voxmodel_t* voxload(int lumpnum)
|
||||||
auto pivot = voxel->Mips[0].Pivot;
|
auto pivot = voxel->Mips[0].Pivot;
|
||||||
vm->mdnum = 1; //VOXel model id
|
vm->mdnum = 1; //VOXel model id
|
||||||
vm->scale = vm->bscale = 1.f;
|
vm->scale = vm->bscale = 1.f;
|
||||||
vm->piv.x = float(pivot.X);
|
vm->piv.X = float(pivot.X);
|
||||||
vm->piv.y = float(pivot.Y);
|
vm->piv.Y = float(pivot.Y);
|
||||||
vm->piv.z = float(pivot.Z);
|
vm->piv.Z = float(pivot.Z);
|
||||||
vm->siz.x = voxel->Mips[0].SizeX;
|
vm->siz.x = voxel->Mips[0].SizeX;
|
||||||
vm->siz.y = voxel->Mips[0].SizeY;
|
vm->siz.y = voxel->Mips[0].SizeY;
|
||||||
vm->siz.z = voxel->Mips[0].SizeZ;
|
vm->siz.z = voxel->Mips[0].SizeZ;
|
||||||
|
|
|
@ -8,7 +8,7 @@ struct voxmodel_t : public mdmodel_t
|
||||||
{
|
{
|
||||||
FVoxelModel* model = nullptr;
|
FVoxelModel* model = nullptr;
|
||||||
vec3_t siz;
|
vec3_t siz;
|
||||||
vec3f_t piv;
|
FVector3 piv;
|
||||||
int32_t is8bit;
|
int32_t is8bit;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -513,10 +513,10 @@ bool HWSprite::ProcessVoxel(HWDrawInfo* di, voxmodel_t* vox, spritetype* spr, se
|
||||||
|
|
||||||
float zoff = voxel->siz.z * .5f;
|
float zoff = voxel->siz.z * .5f;
|
||||||
if (!(spr->cstat & CSTAT_SPRITE_YCENTER))
|
if (!(spr->cstat & CSTAT_SPRITE_YCENTER))
|
||||||
zoff += voxel->piv.z;
|
zoff += voxel->piv.Z;
|
||||||
else if ((spr->cstat & CSTAT_SPRITE_ALIGNMENT) != CSTAT_SPRITE_ALIGNMENT_SLAB)
|
else if ((spr->cstat & CSTAT_SPRITE_ALIGNMENT) != CSTAT_SPRITE_ALIGNMENT_SLAB)
|
||||||
{
|
{
|
||||||
zoff += voxel->piv.z;
|
zoff += voxel->piv.Z;
|
||||||
zoff -= voxel->siz.z * .5f;
|
zoff -= voxel->siz.z * .5f;
|
||||||
}
|
}
|
||||||
if (spr->cstat & CSTAT_SPRITE_YFLIP) zoff = voxel->siz.z - zoff;
|
if (spr->cstat & CSTAT_SPRITE_YFLIP) zoff = voxel->siz.z - zoff;
|
||||||
|
@ -526,7 +526,7 @@ bool HWSprite::ProcessVoxel(HWDrawInfo* di, voxmodel_t* vox, spritetype* spr, se
|
||||||
rotmat.rotate(buildang(ang).asdeg() - 90.f, 0, 1, 0);
|
rotmat.rotate(buildang(ang).asdeg() - 90.f, 0, 1, 0);
|
||||||
rotmat.scale(scalevec.X, scalevec.Z, scalevec.Y);
|
rotmat.scale(scalevec.X, scalevec.Z, scalevec.Y);
|
||||||
// Apply pivot last
|
// Apply pivot last
|
||||||
rotmat.translate(-voxel->piv.x, zoff, voxel->piv.y);
|
rotmat.translate(-voxel->piv.X, zoff, voxel->piv.Y);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue