mirror of
https://github.com/TTimo/GtkRadiant.git
synced 2024-11-10 07:11:54 +00:00
Rollback on alignments.
This commit is contained in:
parent
fba3bd3f4d
commit
c03075a737
1 changed files with 220 additions and 218 deletions
|
@ -73,18 +73,18 @@ void PrintVector( vec3_t v ){
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=============================================================================
|
=============================================================================
|
||||||
|
|
||||||
TEXTURE COORDINATES
|
TEXTURE COORDINATES
|
||||||
|
|
||||||
=============================================================================
|
=============================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
textureAxisFromPlane
|
textureAxisFromPlane
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
vec3_t baseaxis[18] =
|
vec3_t baseaxis[18] =
|
||||||
{
|
{
|
||||||
|
@ -107,7 +107,7 @@ void TextureAxisFromPlane( plane_t *pln, vec3_t xv, vec3_t yv ) {
|
||||||
for ( i = 0 ; i < 6 ; i++ )
|
for ( i = 0 ; i < 6 ; i++ )
|
||||||
{
|
{
|
||||||
dot = DotProduct( pln->normal, baseaxis[i * 3] );
|
dot = DotProduct( pln->normal, baseaxis[i * 3] );
|
||||||
// see q3map2 source - added () for clarity
|
// see q3map2 source - added () for clarity
|
||||||
if ( ( g_PrefsDlg.m_bQ3Map2Texturing && dot > best + 0.0001f ) || dot > best ) {
|
if ( ( g_PrefsDlg.m_bQ3Map2Texturing && dot > best + 0.0001f ) || dot > best ) {
|
||||||
best = dot;
|
best = dot;
|
||||||
bestaxis = i;
|
bestaxis = i;
|
||||||
|
@ -602,18 +602,18 @@ void Face_TexdefFromTextureCoordinates( float *xyzst1, float *xyzst2, float *xyz
|
||||||
|
|
||||||
// find the STfromXYZ 4-vectors
|
// find the STfromXYZ 4-vectors
|
||||||
/*
|
/*
|
||||||
SARRUS-SOLVE:
|
SARRUS-SOLVE:
|
||||||
xyzst1[3] == xyzst1[sv] * STfromXYZ[0][sv] + xyzst1[tv] * STfromXYZ[0][tv] + STfromXYZ[0][3];
|
xyzst1[3] == xyzst1[sv] * STfromXYZ[0][sv] + xyzst1[tv] * STfromXYZ[0][tv] + STfromXYZ[0][3];
|
||||||
xyzst2[3] == xyzst2[sv] * STfromXYZ[0][sv] + xyzst2[tv] * STfromXYZ[0][tv] + STfromXYZ[0][3];
|
xyzst2[3] == xyzst2[sv] * STfromXYZ[0][sv] + xyzst2[tv] * STfromXYZ[0][tv] + STfromXYZ[0][3];
|
||||||
xyzst3[3] == xyzst3[sv] * STfromXYZ[0][sv] + xyzst3[tv] * STfromXYZ[0][tv] + STfromXYZ[0][3];
|
xyzst3[3] == xyzst3[sv] * STfromXYZ[0][sv] + xyzst3[tv] * STfromXYZ[0][tv] + STfromXYZ[0][3];
|
||||||
FOR: STfromXYZ[0]
|
FOR: STfromXYZ[0]
|
||||||
GIVEN: one coord of them (uv) is empty (see Face_TextureVectors)
|
GIVEN: one coord of them (uv) is empty (see Face_TextureVectors)
|
||||||
SARRUS-SOLVE:
|
SARRUS-SOLVE:
|
||||||
xyzst1[4] == xyzst1[sv] * STfromXYZ[1][sv] + xyzst1[tv] * STfromXYZ[1][tv] + STfromXYZ[1][3];
|
xyzst1[4] == xyzst1[sv] * STfromXYZ[1][sv] + xyzst1[tv] * STfromXYZ[1][tv] + STfromXYZ[1][3];
|
||||||
xyzst2[4] == xyzst2[sv] * STfromXYZ[1][sv] + xyzst2[tv] * STfromXYZ[1][tv] + STfromXYZ[1][3];
|
xyzst2[4] == xyzst2[sv] * STfromXYZ[1][sv] + xyzst2[tv] * STfromXYZ[1][tv] + STfromXYZ[1][3];
|
||||||
xyzst3[4] == xyzst3[sv] * STfromXYZ[1][sv] + xyzst3[tv] * STfromXYZ[1][tv] + STfromXYZ[1][3];
|
xyzst3[4] == xyzst3[sv] * STfromXYZ[1][sv] + xyzst3[tv] * STfromXYZ[1][tv] + STfromXYZ[1][3];
|
||||||
FOR: STfromXYZ[1]
|
FOR: STfromXYZ[1]
|
||||||
GIVEN: one coord of them (uv) is empty (see Face_TextureVectors)
|
GIVEN: one coord of them (uv) is empty (see Face_TextureVectors)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
STfromXYZ[0][uv] = 0;
|
STfromXYZ[0][uv] = 0;
|
||||||
|
@ -645,8 +645,8 @@ void Face_TexdefFromTextureCoordinates( float *xyzst1, float *xyzst2, float *xyz
|
||||||
float newSTfromXYZ[2][4];
|
float newSTfromXYZ[2][4];
|
||||||
|
|
||||||
printf("old: %Lf,%Lf,%Lf,%Lf %Lf,%Lf,%Lf,%Lf\n",
|
printf("old: %Lf,%Lf,%Lf,%Lf %Lf,%Lf,%Lf,%Lf\n",
|
||||||
STfromXYZ[0][0], STfromXYZ[0][1], STfromXYZ[0][2], STfromXYZ[0][3],
|
STfromXYZ[0][0], STfromXYZ[0][1], STfromXYZ[0][2], STfromXYZ[0][3],
|
||||||
STfromXYZ[1][0], STfromXYZ[1][1], STfromXYZ[1][2], STfromXYZ[1][3]);
|
STfromXYZ[1][0], STfromXYZ[1][1], STfromXYZ[1][2], STfromXYZ[1][3]);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Face_TexdefFromTextureVectors( f, STfromXYZ, pvecs, sv, tv );
|
Face_TexdefFromTextureVectors( f, STfromXYZ, pvecs, sv, tv );
|
||||||
|
@ -655,8 +655,8 @@ void Face_TexdefFromTextureCoordinates( float *xyzst1, float *xyzst2, float *xyz
|
||||||
Face_TextureVectors(f, newSTfromXYZ);
|
Face_TextureVectors(f, newSTfromXYZ);
|
||||||
|
|
||||||
printf("new: %f,%f,%f,%f %f,%f,%f,%f\n",
|
printf("new: %f,%f,%f,%f %f,%f,%f,%f\n",
|
||||||
newSTfromXYZ[0][0], newSTfromXYZ[0][1], newSTfromXYZ[0][2], newSTfromXYZ[0][3],
|
newSTfromXYZ[0][0], newSTfromXYZ[0][1], newSTfromXYZ[0][2], newSTfromXYZ[0][3],
|
||||||
newSTfromXYZ[1][0], newSTfromXYZ[1][1], newSTfromXYZ[1][2], newSTfromXYZ[1][3]);
|
newSTfromXYZ[1][0], newSTfromXYZ[1][1], newSTfromXYZ[1][2], newSTfromXYZ[1][3]);
|
||||||
|
|
||||||
float newxyzst1[5];
|
float newxyzst1[5];
|
||||||
float newxyzst2[5];
|
float newxyzst2[5];
|
||||||
|
@ -668,12 +668,12 @@ void Face_TexdefFromTextureCoordinates( float *xyzst1, float *xyzst2, float *xyz
|
||||||
EmitTextureCoordinates (newxyzst2, q, f);
|
EmitTextureCoordinates (newxyzst2, q, f);
|
||||||
EmitTextureCoordinates (newxyzst3, q, f);
|
EmitTextureCoordinates (newxyzst3, q, f);
|
||||||
printf("Face_TexdefFromTextureCoordinates: %f,%f %f,%f %f,%f -> %f,%f %f,%f %f,%f\n",
|
printf("Face_TexdefFromTextureCoordinates: %f,%f %f,%f %f,%f -> %f,%f %f,%f %f,%f\n",
|
||||||
xyzst1[3], xyzst1[4],
|
xyzst1[3], xyzst1[4],
|
||||||
xyzst2[3], xyzst2[4],
|
xyzst2[3], xyzst2[4],
|
||||||
xyzst3[3], xyzst3[4],
|
xyzst3[3], xyzst3[4],
|
||||||
newxyzst1[3], newxyzst1[4],
|
newxyzst1[3], newxyzst1[4],
|
||||||
newxyzst2[3], newxyzst2[4],
|
newxyzst2[3], newxyzst2[4],
|
||||||
newxyzst3[3], newxyzst3[4]);
|
newxyzst3[3], newxyzst3[4]);
|
||||||
// TODO why do these differ, but not the previous ones? this makes no sense whatsoever
|
// TODO why do these differ, but not the previous ones? this makes no sense whatsoever
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
@ -1038,16 +1038,16 @@ face_t *Brush_BestSplitFace( brush_t *b ){
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
Brush_MakeConvexBrushes
|
Brush_MakeConvexBrushes
|
||||||
|
|
||||||
MrE FIXME: this doesn't work because the old
|
MrE FIXME: this doesn't work because the old
|
||||||
Brush_SplitBrushByFace is used
|
Brush_SplitBrushByFace is used
|
||||||
Turns the brush into a minimal number of convex brushes.
|
Turns the brush into a minimal number of convex brushes.
|
||||||
If the input brush is convex then it will be returned.
|
If the input brush is convex then it will be returned.
|
||||||
Otherwise the input brush will be freed.
|
Otherwise the input brush will be freed.
|
||||||
NOTE: the input brush should have windings for the faces.
|
NOTE: the input brush should have windings for the faces.
|
||||||
=================
|
=================
|
||||||
*/
|
*/
|
||||||
brush_t *Brush_MakeConvexBrushes( brush_t *b ){
|
brush_t *Brush_MakeConvexBrushes( brush_t *b ){
|
||||||
brush_t *front, *back, *end;
|
brush_t *front, *back, *end;
|
||||||
|
@ -2076,130 +2076,130 @@ brush_t *Brush_FullClone( brush_t *b ){
|
||||||
|
|
||||||
// FIXME - spog - finish this later..
|
// FIXME - spog - finish this later..
|
||||||
/*
|
/*
|
||||||
bool Triangle_Ray(vec3_t origin, vec3_t dir, vec3_t p1, vec3_t p2, vec3_t p3)
|
bool Triangle_Ray(vec3_t origin, vec3_t dir, vec3_t p1, vec3_t p2, vec3_t p3)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
vec3_t v1, v2, normal[3];
|
vec3_t v1, v2, normal[3];
|
||||||
float d;
|
float d;
|
||||||
|
|
||||||
//Sys_Printf("p1: %f %f %f\n",p1[0],p1[1],p1[2]);
|
//Sys_Printf("p1: %f %f %f\n",p1[0],p1[1],p1[2]);
|
||||||
//Sys_Printf("p2: %f %f %f\n",p2[0],p2[1],p2[2]);
|
//Sys_Printf("p2: %f %f %f\n",p2[0],p2[1],p2[2]);
|
||||||
//Sys_Printf("p3: %f %f %f\n",p3[0],p3[1],p3[2]);
|
//Sys_Printf("p3: %f %f %f\n",p3[0],p3[1],p3[2]);
|
||||||
//Sys_Printf("origin: %f %f %f\n",origin[0],origin[1],origin[2]);
|
//Sys_Printf("origin: %f %f %f\n",origin[0],origin[1],origin[2]);
|
||||||
|
|
||||||
// test ray against triangle
|
// test ray against triangle
|
||||||
// get triangle plane normal
|
// get triangle plane normal
|
||||||
//VectorSubtract(p1, p2, v1);
|
//VectorSubtract(p1, p2, v1);
|
||||||
//VectorSubtract(p1, p3, v2);
|
//VectorSubtract(p1, p3, v2);
|
||||||
//CrossProduct(v1, v2, v1);
|
//CrossProduct(v1, v2, v1);
|
||||||
// check normal against direction
|
// check normal against direction
|
||||||
//if (DotProduct(dir, v1) >= 0)
|
//if (DotProduct(dir, v1) >= 0)
|
||||||
//{
|
//{
|
||||||
// generate cone normals
|
// generate cone normals
|
||||||
VectorSubtract(origin, p1, v1);
|
VectorSubtract(origin, p1, v1);
|
||||||
VectorSubtract(origin, p2, v2);
|
VectorSubtract(origin, p2, v2);
|
||||||
CrossProduct(v1, v2, normal[0]);
|
CrossProduct(v1, v2, normal[0]);
|
||||||
VectorSubtract(origin, p2, v1);
|
VectorSubtract(origin, p2, v1);
|
||||||
VectorSubtract(origin, p3, v2);
|
VectorSubtract(origin, p3, v2);
|
||||||
CrossProduct(v1, v2, normal[1]);
|
CrossProduct(v1, v2, normal[1]);
|
||||||
VectorSubtract(origin, p3, v1);
|
VectorSubtract(origin, p3, v1);
|
||||||
VectorSubtract(origin, p1, v2);
|
VectorSubtract(origin, p1, v2);
|
||||||
CrossProduct(v1, v2, normal[2]);
|
CrossProduct(v1, v2, normal[2]);
|
||||||
//}
|
//}
|
||||||
//else
|
//else
|
||||||
//{
|
//{
|
||||||
// flip normals if triangle faces away
|
// flip normals if triangle faces away
|
||||||
// Sys_Printf("flipped\n");
|
// Sys_Printf("flipped\n");
|
||||||
// VectorSubtract(origin, p1, v1);
|
// VectorSubtract(origin, p1, v1);
|
||||||
// VectorSubtract(origin, p3, v2);
|
// VectorSubtract(origin, p3, v2);
|
||||||
// CrossProduct(v1, v2, normal[0]);
|
// CrossProduct(v1, v2, normal[0]);
|
||||||
// VectorSubtract(origin, p3, v1);
|
// VectorSubtract(origin, p3, v1);
|
||||||
// VectorSubtract(origin, p2, v2);
|
// VectorSubtract(origin, p2, v2);
|
||||||
// CrossProduct(v1, v2, normal[1]);
|
// CrossProduct(v1, v2, normal[1]);
|
||||||
// VectorSubtract(origin, p2, v1);
|
// VectorSubtract(origin, p2, v1);
|
||||||
// VectorSubtract(origin, p1, v2);
|
// VectorSubtract(origin, p1, v2);
|
||||||
// CrossProduct(v1, v2, normal[2]);
|
// CrossProduct(v1, v2, normal[2]);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
for (i=0; i<3; i++)
|
for (i=0; i<3; i++)
|
||||||
{
|
{
|
||||||
VectorNormalize(normal[i]);
|
VectorNormalize(normal[i]);
|
||||||
//Sys_Printf("direction: %f %f %f\n",dir[0],dir[1],dir[2]);
|
//Sys_Printf("direction: %f %f %f\n",dir[0],dir[1],dir[2]);
|
||||||
//Sys_Printf("normal: %f %f %f\n",normal[i][0],normal[i][1],normal[i][2]);
|
//Sys_Printf("normal: %f %f %f\n",normal[i][0],normal[i][1],normal[i][2]);
|
||||||
d = DotProduct(dir, normal[i]);
|
d = DotProduct(dir, normal[i]);
|
||||||
//Sys_Printf("dotproduct: %f\n",d);
|
//Sys_Printf("dotproduct: %f\n",d);
|
||||||
if (d < 0)
|
if (d < 0)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
extern int Triangle_Ray(float orig[3], float dir[3], bool bCullBack,
|
extern int Triangle_Ray(float orig[3], float dir[3], bool bCullBack,
|
||||||
float vert0[3], float vert1[3], float vert2[3],
|
float vert0[3], float vert1[3], float vert2[3],
|
||||||
double *t, double *u, double *v);
|
double *t, double *u, double *v);
|
||||||
|
|
||||||
bool Model_Ray(brush_t *b, vec3_t origin, vec3_t dir, double *t, double *u, double *v)
|
bool Model_Ray(brush_t *b, vec3_t origin, vec3_t dir, double *t, double *u, double *v)
|
||||||
{
|
{
|
||||||
bool bIntersect = false;
|
bool bIntersect = false;
|
||||||
float tBest = FLT_MAX;
|
float tBest = FLT_MAX;
|
||||||
int i, j;
|
int i, j;
|
||||||
vec3_t xyz[3];
|
vec3_t xyz[3];
|
||||||
vec3_t vRay[2];
|
vec3_t vRay[2];
|
||||||
|
|
||||||
float angle = FloatForKey (b->owner, "angle"); // FIXME: should be set when this entity key is set
|
float angle = FloatForKey (b->owner, "angle"); // FIXME: should be set when this entity key is set
|
||||||
|
|
||||||
VectorSubtract (origin, b->owner->origin, vRay[0]);
|
VectorSubtract (origin, b->owner->origin, vRay[0]);
|
||||||
VectorCopy (dir, vRay[1]);
|
VectorCopy (dir, vRay[1]);
|
||||||
|
|
||||||
if (angle > 0)
|
if (angle > 0)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
float s, c;
|
float s, c;
|
||||||
float x, y;
|
float x, y;
|
||||||
|
|
||||||
s = sin (-angle/180*Q_PI);
|
s = sin (-angle/180*Q_PI);
|
||||||
c = cos (-angle/180*Q_PI);
|
c = cos (-angle/180*Q_PI);
|
||||||
|
|
||||||
for (i=0; i<2; i++)
|
for (i=0; i<2; i++)
|
||||||
{
|
{
|
||||||
x = vRay[i][0];
|
x = vRay[i][0];
|
||||||
y = vRay[i][1];
|
y = vRay[i][1];
|
||||||
vRay[i][0] = (x * c) - (y * s);
|
vRay[i][0] = (x * c) - (y * s);
|
||||||
vRay[i][1] = (x * s) + (y * c);
|
vRay[i][1] = (x * s) + (y * c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
entitymodel *model = b->owner->md3Class->model;
|
entitymodel *model = b->owner->md3Class->model;
|
||||||
|
|
||||||
while (model != NULL)
|
while (model != NULL)
|
||||||
{
|
{
|
||||||
for (i = 0; i < model->nTriCount; i++)
|
for (i = 0; i < model->nTriCount; i++)
|
||||||
{
|
{
|
||||||
for (j = 0; j < 3; j++)
|
for (j = 0; j < 3; j++)
|
||||||
VectorCopy(model->pVertList[model->pTriList[i].indexes[j]].v, xyz[j]);
|
VectorCopy(model->pVertList[model->pTriList[i].indexes[j]].v, xyz[j]);
|
||||||
|
|
||||||
if (Triangle_Ray(vRay[0], vRay[1], true, xyz[0], xyz[2], xyz[1], t, u, v))
|
if (Triangle_Ray(vRay[0], vRay[1], true, xyz[0], xyz[2], xyz[1], t, u, v))
|
||||||
{
|
{
|
||||||
bIntersect = true;
|
bIntersect = true;
|
||||||
if (*t < tBest)
|
if (*t < tBest)
|
||||||
tBest = *t;
|
tBest = *t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
model = model->pNext;
|
model = model->pNext;
|
||||||
}
|
}
|
||||||
if (bIntersect)
|
if (bIntersect)
|
||||||
{
|
{
|
||||||
*t = tBest;
|
*t = tBest;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*t = 0;
|
*t = 0;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2365,23 +2365,23 @@ void Brush_RemoveFromList( brush_t *b ){
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
SetFaceTexdef
|
SetFaceTexdef
|
||||||
|
|
||||||
Doesn't set the curve flags
|
Doesn't set the curve flags
|
||||||
|
|
||||||
NOTE : ( TTimo )
|
NOTE : ( TTimo )
|
||||||
never trust f->d_texture here, f->texdef and f->d_texture are out of sync when called by Brush_SetTexture
|
never trust f->d_texture here, f->texdef and f->d_texture are out of sync when called by Brush_SetTexture
|
||||||
use Texture_ForName() to find the right shader
|
use Texture_ForName() to find the right shader
|
||||||
FIXME : send the right shader ( qtexture_t * ) in the parameters ?
|
FIXME : send the right shader ( qtexture_t * ) in the parameters ?
|
||||||
|
|
||||||
TTimo: surface plugin, added an IPluginTexdef* parameter
|
TTimo: surface plugin, added an IPluginTexdef* parameter
|
||||||
if not NULL, get ->Copy() of it into the face ( and remember to hook )
|
if not NULL, get ->Copy() of it into the face ( and remember to hook )
|
||||||
if NULL, ask for a default
|
if NULL, ask for a default
|
||||||
|
|
||||||
TTimo - shader code cleanup
|
TTimo - shader code cleanup
|
||||||
added IShader* parameter
|
added IShader* parameter
|
||||||
===============
|
===============
|
||||||
*/
|
*/
|
||||||
void SetFaceTexdef2( brush_t *b, face_t *f, IShader *pShader, texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef, bool bFitScale, IPluginTexdef* pPlugTexdef ) {
|
void SetFaceTexdef2( brush_t *b, face_t *f, IShader *pShader, texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef, bool bFitScale, IPluginTexdef* pPlugTexdef ) {
|
||||||
int oldFlags;
|
int oldFlags;
|
||||||
|
@ -2433,20 +2433,20 @@ void SetFaceTexdef2( brush_t *b, face_t *f, IShader *pShader, texdef_t *texdef,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
SetFaceTexdef
|
SetFaceTexdef
|
||||||
|
|
||||||
Doesn't set the curve flags
|
Doesn't set the curve flags
|
||||||
|
|
||||||
NOTE : ( TTimo )
|
NOTE : ( TTimo )
|
||||||
never trust f->d_texture here, f->texdef and f->d_texture are out of sync when called by Brush_SetTexture
|
never trust f->d_texture here, f->texdef and f->d_texture are out of sync when called by Brush_SetTexture
|
||||||
use Texture_ForName() to find the right shader
|
use Texture_ForName() to find the right shader
|
||||||
FIXME : send the right shader ( qtexture_t * ) in the parameters ?
|
FIXME : send the right shader ( qtexture_t * ) in the parameters ?
|
||||||
|
|
||||||
TTimo: surface plugin, added an IPluginTexdef* parameter
|
TTimo: surface plugin, added an IPluginTexdef* parameter
|
||||||
if not NULL, get ->Copy() of it into the face ( and remember to hook )
|
if not NULL, get ->Copy() of it into the face ( and remember to hook )
|
||||||
if NULL, ask for a default
|
if NULL, ask for a default
|
||||||
===============
|
===============
|
||||||
*/
|
*/
|
||||||
void SetFaceTexdef( face_t *f, texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef, bool bFitScale, IPluginTexdef* pPlugTexdef ) {
|
void SetFaceTexdef( face_t *f, texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef, bool bFitScale, IPluginTexdef* pPlugTexdef ) {
|
||||||
int oldFlags;
|
int oldFlags;
|
||||||
|
@ -2821,15 +2821,15 @@ void Brush_BuildWindings( brush_t *b, bool bSnap ){
|
||||||
if ( g_qeglobals.bNeedConvert ) {
|
if ( g_qeglobals.bNeedConvert ) {
|
||||||
BrushPrimitFaceToFace( face );
|
BrushPrimitFaceToFace( face );
|
||||||
/*
|
/*
|
||||||
// we have parsed brush primitives and need conversion back to standard format
|
// we have parsed brush primitives and need conversion back to standard format
|
||||||
// NOTE: converting back is a quick hack, there's some information lost and we can't do anything about it
|
// NOTE: converting back is a quick hack, there's some information lost and we can't do anything about it
|
||||||
// FIXME: if we normalize the texture matrix to a standard 2x2 size, we end up with wrong scaling
|
// FIXME: if we normalize the texture matrix to a standard 2x2 size, we end up with wrong scaling
|
||||||
// I tried various tweaks, no luck .. seems shifting is lost
|
// I tried various tweaks, no luck .. seems shifting is lost
|
||||||
brushprimit_texdef_t aux;
|
brushprimit_texdef_t aux;
|
||||||
ConvertTexMatWithQTexture( &face->brushprimit_texdef, face->d_texture, &aux, NULL );
|
ConvertTexMatWithQTexture( &face->brushprimit_texdef, face->d_texture, &aux, NULL );
|
||||||
TexMatToFakeTexCoords( aux.coords, face->texdef.shift, &face->texdef.rotate, face->texdef.scale );
|
TexMatToFakeTexCoords( aux.coords, face->texdef.shift, &face->texdef.rotate, face->texdef.scale );
|
||||||
face->texdef.scale[0]/=2.0;
|
face->texdef.scale[0]/=2.0;
|
||||||
face->texdef.scale[1]/=2.0;
|
face->texdef.scale[1]/=2.0;
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
for ( i = 0 ; i < w->numpoints ; i++ )
|
for ( i = 0 ; i < w->numpoints ; i++ )
|
||||||
|
@ -3063,14 +3063,14 @@ void Brush_FaceDraw( face_t *face, int nGLState ){
|
||||||
qglNormal3fv( face->plane.normal );
|
qglNormal3fv( face->plane.normal );
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
if (mode & DRAW_GL_TEXTURE_2D)
|
if (mode & DRAW_GL_TEXTURE_2D)
|
||||||
qglTexCoordPointer(2, GL_FLOAT, 5, &w->points[3]);
|
qglTexCoordPointer(2, GL_FLOAT, 5, &w->points[3]);
|
||||||
qglVertexPointer(3, GL_FLOAT, 5, w->points);
|
qglVertexPointer(3, GL_FLOAT, 5, w->points);
|
||||||
|
|
||||||
if (mode & DRAW_GL_FILL)
|
if (mode & DRAW_GL_FILL)
|
||||||
qglDrawArrays(GL_TRIANGLE_FAN, 0, w->numpoints);
|
qglDrawArrays(GL_TRIANGLE_FAN, 0, w->numpoints);
|
||||||
else
|
else
|
||||||
qglDrawArrays(GL_POLYGON, 0, w->numpoints);
|
qglDrawArrays(GL_POLYGON, 0, w->numpoints);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ( nGLState & DRAW_GL_FILL ) {
|
if ( nGLState & DRAW_GL_FILL ) {
|
||||||
|
@ -3790,44 +3790,46 @@ void aabb_draw( const aabb_t *aabb, int mode ){
|
||||||
qglEnd();
|
qglEnd();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
vec3_t Coords[8];
|
|
||||||
|
|
||||||
vec3_t vMin, vMax;
|
|
||||||
VectorSubtract(aabb->origin, aabb->extents, vMin);
|
|
||||||
VectorAdd(aabb->origin, aabb->extents, vMax);
|
|
||||||
VectorSet(Coords[0], vMin[0], vMax[1], vMax[2]);
|
|
||||||
VectorSet(Coords[1], vMax[0], vMax[1], vMax[2]);
|
|
||||||
VectorSet(Coords[2], vMax[0], vMin[1], vMax[2]);
|
|
||||||
VectorSet(Coords[3], vMin[0], vMin[1], vMax[2]);
|
|
||||||
VectorSet(Coords[4], vMin[0], vMax[1], vMin[2]);
|
|
||||||
VectorSet(Coords[5], vMax[0], vMax[1], vMin[2]);
|
|
||||||
VectorSet(Coords[6], vMax[0], vMin[1], vMin[2]);
|
|
||||||
VectorSet(Coords[7], vMin[0], vMin[1], vMin[2]);
|
|
||||||
|
|
||||||
vec3_t Normals[8] = { {-1, 0, 0 },
|
vec3_t Coords[8];
|
||||||
{ 0, 0, 0 },
|
|
||||||
{ 0, 0, 0 },
|
|
||||||
{ 0, 0, 1 },
|
|
||||||
{ 0, 0,-1 },
|
|
||||||
{ 0, 1, 0 },
|
|
||||||
{ 1, 0, 0 },
|
|
||||||
{ 0,-1, 0 } };
|
|
||||||
|
|
||||||
unsigned short Indices[24] = { 2, 1, 5, 6,
|
vec3_t vMin, vMax;
|
||||||
1, 0, 4, 5,
|
VectorSubtract(aabb->origin, aabb->extents, vMin);
|
||||||
0, 1, 2, 3,
|
VectorAdd(aabb->origin, aabb->extents, vMax);
|
||||||
3, 7, 4, 0,
|
VectorSet(Coords[0], vMin[0], vMax[1], vMax[2]);
|
||||||
3, 2, 6, 7,
|
VectorSet(Coords[1], vMax[0], vMax[1], vMax[2]);
|
||||||
7, 6, 5, 4 };
|
VectorSet(Coords[2], vMax[0], vMin[1], vMax[2]);
|
||||||
|
VectorSet(Coords[3], vMin[0], vMin[1], vMax[2]);
|
||||||
|
VectorSet(Coords[4], vMin[0], vMax[1], vMin[2]);
|
||||||
|
VectorSet(Coords[5], vMax[0], vMax[1], vMin[2]);
|
||||||
|
VectorSet(Coords[6], vMax[0], vMin[1], vMin[2]);
|
||||||
|
VectorSet(Coords[7], vMin[0], vMin[1], vMin[2]);
|
||||||
|
|
||||||
qglVertexPointer(3, GL_FLOAT, 0, Coords); // filling the arrays
|
vec3_t Normals[8] = { {-1, 0, 0 },
|
||||||
qglNormalPointer(GL_FLOAT, 0, Normals);
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 0, 0, 1 },
|
||||||
|
{ 0, 0,-1 },
|
||||||
|
{ 0, 1, 0 },
|
||||||
|
{ 1, 0, 0 },
|
||||||
|
{ 0,-1, 0 } };
|
||||||
|
|
||||||
//glLockArraysEXT(0, count); // extension GL_EXT_compiled_vertex_array
|
unsigned short Indices[24] = { 2, 1, 5, 6,
|
||||||
|
1, 0, 4, 5,
|
||||||
|
0, 1, 2, 3,
|
||||||
|
3, 7, 4, 0,
|
||||||
|
3, 2, 6, 7,
|
||||||
|
7, 6, 5, 4 };
|
||||||
|
|
||||||
qglDrawElements(GL_QUADS, 24, GL_UNSIGNED_SHORT, Indices);
|
qglVertexPointer(3, GL_FLOAT, 0, Coords); // filling the arrays
|
||||||
|
qglNormalPointer(GL_FLOAT, 0, Normals);
|
||||||
|
|
||||||
//glUnlockArraysEXT; // extension GL_EXT_compiled_vertex_array
|
//glLockArraysEXT(0, count); // extension GL_EXT_compiled_vertex_array
|
||||||
|
|
||||||
|
qglDrawElements(GL_QUADS, 24, GL_UNSIGNED_SHORT, Indices);
|
||||||
|
|
||||||
|
//glUnlockArraysEXT; // extension GL_EXT_compiled_vertex_array
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue