models: Add normals convert code
Based on https://icculus.org/projects/qshed/
This commit is contained in:
parent
b375239b61
commit
6479b41be7
|
@ -26,10 +26,38 @@
|
||||||
|
|
||||||
#include "../ref_shared.h"
|
#include "../ref_shared.h"
|
||||||
|
|
||||||
static float r_avertexnormals[NUMVERTEXNORMALS][3] = {
|
static const float r_avertexnormals[NUMVERTEXNORMALS][3] = {
|
||||||
#include "../constants/anorms.h"
|
#include "../constants/anorms.h"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* compressed vertex normals used by mdl and md2 model formats */
|
||||||
|
byte
|
||||||
|
R_CompressNormalMDL(const float *normal)
|
||||||
|
{
|
||||||
|
byte i, besti;
|
||||||
|
float dot, bestdot;
|
||||||
|
|
||||||
|
bestdot = normal[0] * r_avertexnormals[0][0] +
|
||||||
|
normal[1] * r_avertexnormals[0][1] +
|
||||||
|
normal[2] * r_avertexnormals[0][2];
|
||||||
|
besti = 0;
|
||||||
|
|
||||||
|
for (i = 1; i < NUMVERTEXNORMALS; i++)
|
||||||
|
{
|
||||||
|
dot = normal[0] * r_avertexnormals[i][0] +
|
||||||
|
normal[1] * r_avertexnormals[i][1] +
|
||||||
|
normal[2] * r_avertexnormals[i][2];
|
||||||
|
|
||||||
|
if (dot > bestdot)
|
||||||
|
{
|
||||||
|
bestdot = dot;
|
||||||
|
besti = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return besti;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
R_LerpVerts(qboolean powerUpEffect, int nverts, dxtrivertx_t *v, dxtrivertx_t *ov,
|
R_LerpVerts(qboolean powerUpEffect, int nverts, dxtrivertx_t *v, dxtrivertx_t *ov,
|
||||||
dxtrivertx_t *verts, float *lerp, const float move[3],
|
dxtrivertx_t *verts, float *lerp, const float move[3],
|
||||||
|
@ -41,7 +69,7 @@ R_LerpVerts(qboolean powerUpEffect, int nverts, dxtrivertx_t *v, dxtrivertx_t *o
|
||||||
{
|
{
|
||||||
for (i = 0; i < nverts; i++, v++, ov++, lerp += 4)
|
for (i = 0; i < nverts; i++, v++, ov++, lerp += 4)
|
||||||
{
|
{
|
||||||
float *normal = r_avertexnormals[verts[i].lightnormalindex];
|
const float *normal = r_avertexnormals[verts[i].lightnormalindex];
|
||||||
|
|
||||||
lerp[0] = move[0] + ov->v[0] * backv[0] + v->v[0] * frontv[0] +
|
lerp[0] = move[0] + ov->v[0] * backv[0] + v->v[0] * frontv[0] +
|
||||||
normal[0] * POWERSUIT_SCALE;
|
normal[0] * POWERSUIT_SCALE;
|
||||||
|
|
|
@ -382,6 +382,7 @@ extern qboolean R_CullAliasMeshModel(dmdx_t *paliashdr, cplane_t *frustum,
|
||||||
extern void R_LerpVerts(qboolean powerUpEffect, int nverts, dxtrivertx_t *v, dxtrivertx_t *ov,
|
extern void R_LerpVerts(qboolean powerUpEffect, int nverts, dxtrivertx_t *v, dxtrivertx_t *ov,
|
||||||
dxtrivertx_t *verts, float *lerp, const float move[3],
|
dxtrivertx_t *verts, float *lerp, const float move[3],
|
||||||
const float frontv[3], const float backv[3]);
|
const float frontv[3], const float backv[3]);
|
||||||
|
extern byte R_CompressNormalMDL(const float *normal);
|
||||||
|
|
||||||
/* Lights logic */
|
/* Lights logic */
|
||||||
extern bspxlightgrid_t *Mod_LoadBSPXLightGrid(const bspx_header_t *bspx_header, const byte *mod_base);
|
extern bspxlightgrid_t *Mod_LoadBSPXLightGrid(const bspx_header_t *bspx_header, const byte *mod_base);
|
||||||
|
|
Loading…
Reference in New Issue