r_waterwarp -1 warps the fov, not a post-processing pass.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1398 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2005-09-29 23:32:22 +00:00
parent 4a15a60ab1
commit 710d7aa3ed
1 changed files with 23 additions and 10 deletions

View File

@ -872,6 +872,7 @@ void GLR_DrawEntitiesOnList (void)
RQ_AddDistReorder(GLR_DrawSprite, currententity, NULL, currententity->origin);
// R_DrawSpriteModel(currententity);
continue;
#ifdef Q3SHADERS
case RT_BEAM:
case RT_RAIL_RINGS:
case RT_LIGHTNING:
@ -880,6 +881,7 @@ void GLR_DrawEntitiesOnList (void)
case RT_RAIL_CORE:
R_DrawRailCore(currententity);
continue;
#endif
}
if (currententity->flags & Q2RF_BEAM)
{
@ -1360,7 +1362,7 @@ void GLR_SetupFrame (void)
}
void MYgluPerspective( GLdouble fovy, GLdouble aspect,
void MYgluPerspective( GLdouble fovx, GLdouble fovy,
GLdouble zNear, GLdouble zFar )
{
GLdouble xmin, xmax, ymin, ymax;
@ -1368,8 +1370,8 @@ void MYgluPerspective( GLdouble fovy, GLdouble aspect,
ymax = zNear * tan( fovy * M_PI / 360.0 );
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
xmax = zNear * tan( fovx * M_PI / 360.0 );
xmin = -xmax;
r_projection_matrix[0] = (2*zNear) / (xmax - xmin);
r_projection_matrix[4] = 0;
@ -1392,7 +1394,7 @@ void MYgluPerspective( GLdouble fovy, GLdouble aspect,
r_projection_matrix[15] = 0;
}
void GL_InfinatePerspective( GLdouble fovy, GLdouble aspect,
void GL_InfinatePerspective( GLdouble fovx, GLdouble fovy,
GLdouble zNear)
{
// nudge infinity in just slightly for lsb slop
@ -1403,8 +1405,8 @@ void GL_InfinatePerspective( GLdouble fovy, GLdouble aspect,
ymax = zNear * tan( fovy * M_PI / 360.0 );
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
xmax = zNear * tan( fovx * M_PI / 360.0 );
xmin = -xmax;
r_projection_matrix[0] = (2*zNear) / (xmax - xmin);
r_projection_matrix[4] = 0;
@ -1461,6 +1463,8 @@ void R_SetupGL (void)
float screenaspect;
extern int glwidth, glheight;
int x, x2, y2, y, w, h;
float fov_x, fov_y;
//
// set up viewpoint
//
@ -1492,6 +1496,15 @@ void R_SetupGL (void)
qglMatrixMode(GL_PROJECTION);
fov_x = r_refdef.fov_x;//+sin(cl.time)*5;
fov_y = r_refdef.fov_y;//-sin(cl.time+1)*5;
if (r_waterwarp.value<0 && r_viewleaf->contents <= Q1CONTENTS_WATER)
{
fov_x *= 1 + (((sin(cl.time * 4.7) + 1) * 0.015) * r_waterwarp.value);
fov_y *= 1 + (((sin(cl.time * 3.0) + 1) * 0.015) * r_waterwarp.value);
}
screenaspect = (float)r_refdef.vrect.width/r_refdef.vrect.height;
if (r_refdef.useperspective)
{
@ -1501,17 +1514,17 @@ void R_SetupGL (void)
// yfov = (2.0 * tan (scr_fov.value/360*M_PI)) / screenaspect;
// yfov = 2*atan((float)r_refdef.vrect.height/r_refdef.vrect.width)*(scr_fov.value*2)/M_PI;
// MYgluPerspective (yfov, screenaspect, 4, 4096);
MYgluPerspective (r_refdef.fov_y, screenaspect, gl_mindist.value, gl_maxdist.value);
MYgluPerspective (fov_x, fov_y, gl_mindist.value, gl_maxdist.value);
}
else
{
GL_InfinatePerspective(r_refdef.fov_y, screenaspect, gl_mindist.value);
GL_InfinatePerspective(fov_x, fov_y, gl_mindist.value);
}
}
else
{
if (gl_maxdist.value>=1)
GL_ParallelPerspective(-r_refdef.fov_x/2, r_refdef.fov_x/2, r_refdef.fov_y/2, -r_refdef.fov_y/2, -gl_maxdist.value, gl_maxdist.value);
GL_ParallelPerspective(-fov_x/2, fov_x/2, fov_y/2, -fov_y/2, -gl_maxdist.value, gl_maxdist.value);
else
GL_ParallelPerspective(0, r_refdef.vrect.width, 0, r_refdef.vrect.height, -9999, 9999);
}
@ -2227,7 +2240,7 @@ void GLR_RenderView (void)
// SCENE POST PROCESSING
// we check if we need to use any shaders - currently it's just waterwarp
if (scenepp_ww_program)
if (((r_waterwarp.value && r_viewleaf && r_viewleaf->contents <= Q1CONTENTS_WATER) || r_waterwarp.value<0))
if ((r_waterwarp.value>0 && r_viewleaf && r_viewleaf->contents <= Q1CONTENTS_WATER))
{
float vwidth = 1, vheight = 1;
float vs, vt;