diff options
author | Kevin Rushforth <[email protected]> | 2004-06-09 04:25:41 +0000 |
---|---|---|
committer | Kevin Rushforth <[email protected]> | 2004-06-09 04:25:41 +0000 |
commit | 343b658c32a6473c545187c1e276ee5d06c2686a (patch) | |
tree | ad2606538b7db1c3553c53a79ccccb2ed5b5e4e2 /src/native/ogl/Lights.c | |
parent | 06cebb1e576da6f7222f999ab059dcfa3d8edd39 (diff) |
Initial creation of j3d-core-utils sources in CVS repository
git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@7 ba19aa83-45c5-6ac9-afd3-db810772062c
Diffstat (limited to 'src/native/ogl/Lights.c')
-rw-r--r-- | src/native/ogl/Lights.c | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/src/native/ogl/Lights.c b/src/native/ogl/Lights.c new file mode 100644 index 0000000..89ab98e --- /dev/null +++ b/src/native/ogl/Lights.c @@ -0,0 +1,168 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2004 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <jni.h> + +#include "gldefs.h" + +#ifdef DEBUG +/* Uncomment the following for VERBOSE debug messages */ +/* #define VERBOSE */ +#endif /* DEBUG */ + + +const float black[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; + +JNIEXPORT +void JNICALL Java_javax_media_j3d_DirectionalLightRetained_updateLight( + JNIEnv *env, + jobject light, + jlong ctxInfo, + jint lightSlot, + jfloat red, + jfloat green, + jfloat blue, + jfloat dirx, + jfloat diry, + jfloat dirz) +{ + int lightNum; + float values[4]; + GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; + jlong ctx = ctxProperties->context; + +#ifdef VERBOSE + fprintf(stderr, + "Directional Light %d: %f %f %f direction, %f %f %f color\n", + lightSlot, dirx, diry, dirz, red, green, blue); +#endif + lightNum = GL_LIGHT0 + lightSlot; + values[0] = red; + values[1] = green; + values[2] = blue; + values[3] = 1.0f; + glLightfv(lightNum, GL_DIFFUSE, values); + glLightfv(lightNum, GL_SPECULAR, values); + values[0] = -dirx; + values[1] = -diry; + values[2] = -dirz; + values[3] = 0.0f; + glLightfv(lightNum, GL_POSITION, values); + glLightfv(lightNum, GL_AMBIENT, black); + glLightf(lightNum, GL_CONSTANT_ATTENUATION, 1.0f); + glLightf(lightNum, GL_LINEAR_ATTENUATION, 0.0f); + glLightf(lightNum, GL_QUADRATIC_ATTENUATION, 0.0f); + glLightf(lightNum, GL_SPOT_EXPONENT, 0.0f); + glLightf(lightNum, GL_SPOT_CUTOFF, 180.0f); +} + +JNIEXPORT +void JNICALL Java_javax_media_j3d_PointLightRetained_updateLight( + JNIEnv *env, + jobject light, + jlong ctxInfo, + jint lightSlot, + jfloat red, + jfloat green, + jfloat blue, + jfloat attenx, + jfloat atteny, + jfloat attenz, + jfloat posx, + jfloat posy, + jfloat posz) +{ + int lightNum; + float values[4]; + +#ifdef VERBOSE + fprintf(stderr, "Positional Light %d: %f %f %f position, %f %f %f color\n\t %f %f %f attenuation\n", + lightSlot, posx, posy, posz, red, green, blue, + attenx, atteny, attenz); +#endif + + lightNum = GL_LIGHT0 + lightSlot; + values[0] = red; + values[1] = green; + values[2] = blue; + values[3] = 1.0f; + glLightfv(lightNum, GL_DIFFUSE, values); + glLightfv(lightNum, GL_SPECULAR, values); + glLightfv(lightNum, GL_AMBIENT, black); + values[0] = posx; + values[1] = posy; + values[2] = posz; + glLightfv(lightNum, GL_POSITION, values); + glLightf(lightNum, GL_CONSTANT_ATTENUATION, attenx); + glLightf(lightNum, GL_LINEAR_ATTENUATION, atteny); + glLightf(lightNum, GL_QUADRATIC_ATTENUATION, attenz); + glLightf(lightNum, GL_SPOT_EXPONENT, 0.0f); + glLightf(lightNum, GL_SPOT_CUTOFF, 180.0f); +} + +JNIEXPORT +void JNICALL Java_javax_media_j3d_SpotLightRetained_updateLight( + JNIEnv *env, + jobject light, + jlong ctxInfo, + jint lightSlot, + jfloat red, + jfloat green, + jfloat blue, + jfloat attenx, + jfloat atteny, + jfloat attenz, + jfloat posx, + jfloat posy, + jfloat posz, + jfloat spreadAngle, + jfloat concentration, + jfloat dirx, + jfloat diry, + jfloat dirz) +{ + int lightNum; + float values[4]; + +#ifdef VERBOSE + fprintf(stderr, "Spot Light %d: %f %f %f position, %f %f %f color\n\t %f %f %f attenuation\n\t %f %f %f direction, %f spreadAngle, %f concentration\n", + lightSlot, posx, posy, posz, red, green, blue, + attenx, atteny, attenz, dirx, diry, dirz, + spreadAngle*180.0 / M_PI, concentration); +#endif + lightNum = GL_LIGHT0 + lightSlot; + values[0] = red; + values[1] = green; + values[2] = blue; + values[3] = 1.0f; + glLightfv(lightNum, GL_DIFFUSE, values); + glLightfv(lightNum, GL_SPECULAR, values); + glLightfv(lightNum, GL_AMBIENT, black); + values[0] = posx; + values[1] = posy; + values[2] = posz; + glLightfv(lightNum, GL_POSITION, values); + glLightf(lightNum, GL_CONSTANT_ATTENUATION, attenx); + glLightf(lightNum, GL_LINEAR_ATTENUATION, atteny); + glLightf(lightNum, GL_QUADRATIC_ATTENUATION, attenz); + values[0] = dirx; + values[1] = diry; + values[2] = dirz; + glLightfv(lightNum, GL_SPOT_DIRECTION, values); + glLightf(lightNum, GL_SPOT_EXPONENT, concentration); + glLightf(lightNum, GL_SPOT_CUTOFF, (float) (spreadAngle * 180.0f / M_PI)); +} + |