|
|
@@ -1,119 +0,0 @@ |
|
|
|
/** |
|
|
|
(c) Copyright 1993, Silicon Graphics, Inc. |
|
|
|
|
|
|
|
ALL RIGHTS RESERVED |
|
|
|
|
|
|
|
Permission to use, copy, modify, and distribute this software |
|
|
|
for any purpose and without fee is hereby granted, provided |
|
|
|
that the above copyright notice appear in all copies and that |
|
|
|
both the copyright notice and this permission notice appear in |
|
|
|
supporting documentation, and that the name of Silicon |
|
|
|
Graphics, Inc. not be used in advertising or publicity |
|
|
|
pertaining to distribution of the software without specific, |
|
|
|
written prior permission. |
|
|
|
|
|
|
|
THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU |
|
|
|
"AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR |
|
|
|
OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF |
|
|
|
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO |
|
|
|
EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE |
|
|
|
ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR |
|
|
|
CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER, |
|
|
|
INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, |
|
|
|
SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR |
|
|
|
NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY |
|
|
|
OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
|
|
|
ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR |
|
|
|
PERFORMANCE OF THIS SOFTWARE. |
|
|
|
|
|
|
|
US Government Users Restricted Rights |
|
|
|
|
|
|
|
Use, duplication, or disclosure by the Government is subject to |
|
|
|
restrictions set forth in FAR 52.227.19(c)(2) or subparagraph |
|
|
|
(c)(1)(ii) of the Rights in Technical Data and Computer |
|
|
|
Software clause at DFARS 252.227-7013 and/or in similar or |
|
|
|
successor clauses in the FAR or the DOD or NASA FAR |
|
|
|
Supplement. Unpublished-- rights reserved under the copyright |
|
|
|
laws of the United States. Contractor/manufacturer is Silicon |
|
|
|
Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA |
|
|
|
94039-7311. |
|
|
|
|
|
|
|
OpenGL(TM) is a trademark of Silicon Graphics, Inc. |
|
|
|
*/ |
|
|
|
|
|
|
|
/* Taken from the projshadow.c - by Tom McReynolds, SGI */ |
|
|
|
|
|
|
|
/* Modified by David Bucciarelli */ |
|
|
|
|
|
|
|
/* Rendering shadows using projective shadows. */ |
|
|
|
|
|
|
|
#include <GL/glut.h> |
|
|
|
#include "shadow.h" |
|
|
|
|
|
|
|
|
|
|
|
enum { |
|
|
|
X, Y, Z, W |
|
|
|
}; |
|
|
|
enum { |
|
|
|
A, B, C, D |
|
|
|
}; |
|
|
|
|
|
|
|
/* create a matrix that will project the desired shadow */ |
|
|
|
void |
|
|
|
shadowmatrix(GLfloat shadowMat[4][4], |
|
|
|
GLfloat groundplane[4], |
|
|
|
GLfloat lightpos[4]) |
|
|
|
{ |
|
|
|
GLfloat dot; |
|
|
|
|
|
|
|
/* find dot product between light position vector and ground plane normal */ |
|
|
|
dot = groundplane[X] * lightpos[X] + |
|
|
|
groundplane[Y] * lightpos[Y] + |
|
|
|
groundplane[Z] * lightpos[Z] + |
|
|
|
groundplane[W] * lightpos[W]; |
|
|
|
|
|
|
|
shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; |
|
|
|
shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; |
|
|
|
shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; |
|
|
|
shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; |
|
|
|
|
|
|
|
shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; |
|
|
|
shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; |
|
|
|
shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; |
|
|
|
shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; |
|
|
|
|
|
|
|
shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; |
|
|
|
shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; |
|
|
|
shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; |
|
|
|
shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; |
|
|
|
|
|
|
|
shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; |
|
|
|
shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; |
|
|
|
shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; |
|
|
|
shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/* find the plane equation given 3 points */ |
|
|
|
void |
|
|
|
findplane(GLfloat plane[4], |
|
|
|
GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]) |
|
|
|
{ |
|
|
|
GLfloat vec0[3], vec1[3]; |
|
|
|
|
|
|
|
/* need 2 vectors to find cross product */ |
|
|
|
vec0[X] = v1[X] - v0[X]; |
|
|
|
vec0[Y] = v1[Y] - v0[Y]; |
|
|
|
vec0[Z] = v1[Z] - v0[Z]; |
|
|
|
|
|
|
|
vec1[X] = v2[X] - v0[X]; |
|
|
|
vec1[Y] = v2[Y] - v0[Y]; |
|
|
|
vec1[Z] = v2[Z] - v0[Z]; |
|
|
|
|
|
|
|
/* find cross product to get A, B, and C of plane equation */ |
|
|
|
plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y]; |
|
|
|
plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]); |
|
|
|
plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X]; |
|
|
|
|
|
|
|
plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]); |
|
|
|
} |