improved DepthTest, fixing Clipping bugs

This commit is contained in:
zicodxx 2007-02-26 13:32:00 +00:00
parent 9e46ec19c8
commit 09ea33ca94
4 changed files with 27 additions and 21 deletions

View file

@ -26,6 +26,7 @@
#include "polyobj.h"
#include "gamefont.h"
#include "laser.h"
#include "endlevel.h"
//change to 1 for lots of spew.
#if 0
@ -74,7 +75,6 @@ int circleh10=0;
int cross_lh[2]={0,0};
int primary_lh[3]={0,0,0};
int secondary_lh[5]={0,0,0,0,0};
int bNoDepthTest=0;
extern int glalpha_effects;
extern GLubyte *pixels;
extern GLubyte *texbuf;
@ -584,11 +584,12 @@ bool g3_draw_poly(int nv,g3s_point **pointlist)
int c;
r_polyc++;
c=grd_curcanv->cv_color;
OGL_DISABLE(TEXTURE_2D);
if (Gr_scanline_darkening_level >= GR_FADE_LEVELS) {
glColor3f(PAL2Tr(c), PAL2Tg(c), PAL2Tb(c));
glDisable(GL_DEPTH_TEST); // ZICO - disable to show lasers correctly
}else{
glDepthMask(GL_FALSE);
glColor4f(PAL2Tr(c), PAL2Tg(c), PAL2Tb(c), 1.0 - (float)Gr_scanline_darkening_level / ((float)GR_FADE_LEVELS - 1.0));
}
glBegin(GL_TRIANGLE_FAN);
@ -596,7 +597,7 @@ bool g3_draw_poly(int nv,g3s_point **pointlist)
glVertex3f(f2glf(pointlist[c]->p3_vec.x),f2glf(pointlist[c]->p3_vec.y),-f2glf(pointlist[c]->p3_vec.z));
}
glEnd();
glEnable(GL_DEPTH_TEST); // ZICO - enable it again to stay correct
glDepthMask(GL_TRUE);
return 0;
}
@ -639,8 +640,6 @@ bool g3_draw_tmap(int nv,g3s_point **pointlist,g3s_uvl *uvl_list,grs_bitmap *bm)
}else{
mprintf((0,"g3_draw_tmap: unhandled tmap_drawer %p\n",tmap_drawer_ptr));
}
if (!bNoDepthTest)
glEnable(GL_DEPTH_TEST); // ZICO - we need this so we do not run into any problems if lasers or sprites show up
return 0;
}
@ -822,9 +821,11 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm,object *
ogl_bindbmtex(bm);
ogl_texwrap(bm->gltexture,GL_CLAMP);
glDisable(GL_DEPTH_TEST); // ZICO - disable to prevent sprites get cutted by polygons
if (Endlevel_sequence)
glDepthFunc(GL_ALWAYS);
glBegin(GL_QUADS);
// Define alpha by looking for object TYPE or ID. We do this here so we have it seperated from the rest of the code.
if (glalpha_effects && // if -gl_transparency draw following bitmaps
(obj->type==OBJ_FIREBALL || // all types of explosions and energy-effects
@ -837,8 +838,9 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm,object *
glColor4f(1.0,1.0,1.0,0.6); // ... with 0.6 alpha
else
glColor3f(1.0,1.0,1.0);
width = fixmul(width,Matrix_scale.x);
height = fixmul(height,Matrix_scale.y);
width = fixmul(width,Matrix_scale.x);
height = fixmul(height,Matrix_scale.y);
for (i=0;i<4;i++){
vm_vec_sub(&v1,pos,&View_position);
vm_vec_rotate(&pv,&v1,&View_matrix);
@ -864,11 +866,14 @@ bool g3_draw_bitmap(vms_vector *pos,fix width,fix height,grs_bitmap *bm,object *
pv.y+=-height;
break;
}
if (obj->id == 5 && obj->type == 1) // create small z-Offset for missile explodihg effect - prevents ugly wall-clipping
pv.z -= F1_0;
glVertex3f(f2glf(pv.x),f2glf(pv.y),-f2glf(pv.z));
}
glEnd();
if (!bNoDepthTest) // ZICO - need this for escape seq
glEnable(GL_DEPTH_TEST);
return 0;
}
bool ogl_ubitmapm_c(int x, int y,grs_bitmap *bm,int c)
@ -1167,7 +1172,6 @@ void ogl_start_frame(void){
gluPerspective(90.0,1.0,0.01,1000000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();//clear matrix
// printf("bNoDepthTest: %i\n", bNoDepthTest);
}
#ifndef NMONO

View file

@ -1,5 +1,9 @@
D1X-Rebirth Changelog
20070226
--------
arch/ogl/ogl.c, main/endlevel.c, main/object.c: improved DepthTest, fixing Clipping bugs
20070220
--------
arch/sdl/key.c: Added ENTER as Game key

View file

@ -415,9 +415,6 @@ vms_angvec exit_angles={-0xa00,0,0};
vms_matrix surface_orient;
int endlevel_data_loaded=0;
#ifdef OGL
extern int bNoDepthTest;
#endif
void start_endlevel_sequence()
{
@ -509,9 +506,7 @@ void start_endlevel_sequence()
#endif
Endlevel_sequence = EL_FLYTHROUGH;
#ifdef OGL
bNoDepthTest=1;
#endif
ConsoleObject->movement_type = MT_NONE; //movement handled by flythrough
ConsoleObject->control_type = CT_NONE;
@ -626,9 +621,6 @@ void stop_endlevel_sequence()
Endlevel_sequence = EL_OFF;
PlayerFinishedLevel(0);
#ifdef OGL
bNoDepthTest=0;
#endif
}
#define VCLIP_BIG_PLAYER_EXPLOSION 58

View file

@ -698,7 +698,14 @@ void draw_polygon_object(object *obj)
else
draw_cloaked_object(obj,light,&engine_glow_value, GameTime-F1_0*10, GameTime+F1_0*10,alt_textures);
} else {
#ifdef OGL
if (obj->type == OBJ_WEAPON && (Weapon_info[obj->id].model_num_inner > -1 ))
Gr_scanline_darkening_level = 1;
#endif
draw_polygon_model(&obj->pos,&obj->orient,obj->rtype.pobj_info.anim_angles,obj->rtype.pobj_info.model_num,obj->rtype.pobj_info.subobj_flags,light,&engine_glow_value,alt_textures);
#ifdef OGL
Gr_scanline_darkening_level = GR_FADE_LEVELS;
#endif
if (obj->type == OBJ_WEAPON && (Weapon_info[obj->id].model_num_inner > -1 )) {
fix dist_to_eye = vm_vec_dist_quick(&Viewer->pos, &obj->pos);
if (dist_to_eye < Simple_model_threshhold_scale * F1_0*2)
@ -708,7 +715,6 @@ void draw_polygon_object(object *obj)
}
Interpolation_method = imsave;
}
//------------------------------------------------------------------------------