⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jogllightrenderer.java

📁 基于java的3d开发库。对坐java3d的朋友有很大的帮助。
💻 JAVA
字号:
//===========================================================================//=-------------------------------------------------------------------------=//= Module history:                                                         =//= - March 17 2006 - Oscar Chavarro: Original base version                 =//===========================================================================package vsdk.toolkit.render.jogl;import javax.media.opengl.GL;import com.sun.opengl.cg.CgGL;import com.sun.opengl.cg.CGprogram;import vsdk.toolkit.common.ColorRgb;import vsdk.toolkit.common.Vector3D;import vsdk.toolkit.environment.Light;public class JoglLightRenderer extends JoglRenderer {    public static int supportedLightsInOpenGL = 8;    public static void deactivate(GL gl, Light l)    {        int lightNumber = l.getId();        if ( lightNumber >= supportedLightsInOpenGL || lightNumber < 0 ) {            return;        }        gl.glDisable(gl.GL_LIGHT0 + lightNumber);    }    public static void activate(GL gl, Light l)    {        //-----------------------------------------------------------------        if ( nvidiaCgAutomaticMode ) {            activateNvidiaGpuParameters(gl, l,                currentVertexShader, currentPixelShader);        }        //-----------------------------------------------------------------        float[] lightPosition=l.getPosition().exportToFloatArrayVect();        float global_ambient[] = {0, 0, 0, 1};        float global_twoside[] = {gl.GL_TRUE};  // WARNING: This is inefficient!        int lightNumber = l.getId();        if ( lightNumber >= supportedLightsInOpenGL || lightNumber < 0 ) {            return;        }        lightPosition[3]=1.0f;/*        if ( l.getLightType() == Light.DIRECTIONAL ) { // Why?            lightPosition[3]=0;        }*/        gl.glPushMatrix();        gl.glLoadIdentity();        gl.glLightModelfv(gl.GL_LIGHT_MODEL_AMBIENT, global_ambient, 0);   // OJO! Esta        gl.glLightModelfv(gl.GL_LIGHT_MODEL_TWO_SIDE, global_twoside, 0);  // cableado!        gl.glLightModeli(gl.GL_LIGHT_MODEL_LOCAL_VIEWER, gl.GL_TRUE); // OJO: ?        gl.glEnable(gl.GL_LIGHTING);  // Is it right to have this here and re-set all the time?        gl.glEnable(gl.GL_LIGHT0 + lightNumber);        gl.glLightfv(gl.GL_LIGHT0 + lightNumber, gl.GL_POSITION, lightPosition, 0);        gl.glLightfv(gl.GL_LIGHT0 + lightNumber, gl.GL_AMBIENT, l.getAmbient().exportToFloatArrayVect(), 0);        gl.glLightfv(gl.GL_LIGHT0 + lightNumber, gl.GL_DIFFUSE, l.getDiffuse().exportToFloatArrayVect(), 0);        gl.glLightfv(gl.GL_LIGHT0 + lightNumber, gl.GL_SPECULAR, l.getSpecular().exportToFloatArrayVect(), 0);        /*        gl.glLightf(gl.GL_LIGHT0 + lightNumber, gl.GL_CONSTANT_ATTENUATION, constantAtenuation);        gl.glLightf(gl.GL_LIGHT0 + lightNumber, gl.GL_LINEAR_ATTENUATION, linearAtenuation);        gl.glLightf(gl.GL_LIGHT0 + lightNumber, gl.GL_QUADRATIC_ATTENUATION, quadricAtenuation);*/        gl.glPopMatrix();    }    public static void activateNvidiaGpuParameters(GL gl, Light light,        CGprogram vertexShader, CGprogram pixelShader)    {        Vector3D lp = light.getPosition();        double lpos[] = {lp.x, lp.y, lp.z};        double lightColor[] = {1.0, 1.0, 1.0};        CgGL.cgGLSetParameter3dv(CgGL.cgGetNamedParameter(            vertexShader, "lightPositionGlobal"), lpos, 0);        CgGL.cgGLSetParameter3dv(CgGL.cgGetNamedParameter(            pixelShader, "lightColor"), lightColor, 0);    }    public static void draw(GL gl, Light l)    {        Vector3D p = l.getPosition();        ColorRgb c = l.getSpecular();        double delta = 0.1;        gl.glPushMatrix();        gl.glDisable(gl.GL_LIGHTING);        gl.glDisable(gl.GL_TEXTURE_2D);        gl.glLineWidth(2.0f);        gl.glBegin(gl.GL_LINES);            gl.glColor3d(c.r, c.g, c.b);            gl.glVertex3d(p.x - delta, p.y, p.z);            gl.glVertex3d(p.x + delta, p.y, p.z);            gl.glVertex3d(p.x, p.y - delta, p.z);            gl.glVertex3d(p.x, p.y + delta, p.z);            gl.glVertex3d(p.x, p.y, p.z - delta);            gl.glVertex3d(p.x, p.y, p.z + delta);        gl.glEnd();        gl.glPopMatrix();    }    public static void turnOffAllLights(GL gl)    {        int i;        for ( i = 0; i < supportedLightsInOpenGL; i++ ) {            gl.glDisable(gl.GL_LIGHT0 + i);        }    }    }//===========================================================================//= EOF                                                                     =//===========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -