001        package com.croftsoft.apps.jogl.imp;
002    
003        import javax.media.opengl.GL;
004        import javax.media.opengl.glu.GLU;
005    
006        import com.croftsoft.core.lang.NullException;
007        import com.croftsoft.core.math.axis.AxisAngle;
008        import com.croftsoft.core.media.jogl.JoglLib;
009        import com.croftsoft.core.media.jogl.JoglRenderer;
010        import com.croftsoft.core.media.jogl.camera.JoglCamera;
011        import com.croftsoft.core.media.jogl.render.JoglFrameRate;
012        import com.croftsoft.core.media.jogl.render.JoglSpinCube;
013    
014        import com.croftsoft.apps.jogl.JoglModel;
015    
016        /***********************************************************************
017        * ComponentAnimator.
018        *
019        * @version
020        *   $Date: 2008/05/17 01:32:31 $
021        * @since
022        *   2005-08-12
023        * @author
024        *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
025        ***********************************************************************/
026        
027        public final class  JoglRendererImp
028          implements JoglRenderer
029        ////////////////////////////////////////////////////////////////////////
030        ////////////////////////////////////////////////////////////////////////
031        {
032          
033        private final JoglModel         joglModel;
034        
035        private final JoglRenderer [ ]  joglRenderers;
036        
037        ////////////////////////////////////////////////////////////////////////
038        // constructor methods
039        ////////////////////////////////////////////////////////////////////////
040    
041        /***********************************************************************
042        * Main constructor.
043        ***********************************************************************/
044        public  JoglRendererImp ( final JoglModel  joglModel )
045        ////////////////////////////////////////////////////////////////////////
046        {
047          NullException.check ( this.joglModel = joglModel );
048          
049          final JoglFrameRate  joglFrameRate = new JoglFrameRate ( );
050          
051          joglFrameRate.setOffsetX ( 10 );
052          
053          joglFrameRate.setOffsetY ( 10 );
054          
055          joglRenderers = new JoglRenderer [ ] {
056            new JoglSpinCube ( joglModel.getJoglSpinCubeModel ( ) ),
057            joglFrameRate };
058        }
059         
060        ////////////////////////////////////////////////////////////////////////
061        // interface GLEventListener methods
062        ////////////////////////////////////////////////////////////////////////
063    
064        public void init ( final GL  gl )
065        ////////////////////////////////////////////////////////////////////////
066        {
067          JoglLib.printInfo ( gl );
068           
069          gl.glClearColor ( 0f, 0f, 0f, 0f );
070          
071          for ( final JoglRenderer  joglRenderer : joglRenderers )
072          {
073            joglRenderer.init ( gl );
074          }
075           
076          JoglLib.checkError ( gl );      
077        }
078    
079        public void  destroy ( final GL  gl )
080        ////////////////////////////////////////////////////////////////////////
081        {
082          System.out.println ( getClass ( ).getName ( ) + ".destroy()" );
083          
084          for ( final JoglRenderer  joglRenderer : joglRenderers )
085          {
086            joglRenderer.destroy ( gl );
087          }
088           
089          JoglLib.checkError ( gl );      
090        }
091        
092        public void  setBounds (
093          final GL   gl,
094          final int  x,
095          final int  y,
096          final int  width,
097          final int  height )
098        ////////////////////////////////////////////////////////////////////////
099        {
100          for ( final JoglRenderer  joglRenderer : joglRenderers )
101          {
102            joglRenderer.setBounds ( gl, x, y, width, height );
103          }
104          
105          gl.glViewport ( x, y, width, height );
106    
107          gl.glMatrixMode ( GL.GL_PROJECTION );
108    
109          gl.glLoadIdentity ( );
110    
111          new GLU ( ).gluPerspective (
112            45.0,
113            ( double ) width / ( double ) height,
114            1,
115            100 );
116    
117          JoglLib.checkError ( gl );
118        }
119    
120        public void  render ( final GL  gl )
121        ////////////////////////////////////////////////////////////////////////
122        {
123          gl.glClear (
124              GL.GL_COLOR_BUFFER_BIT
125            | GL.GL_DEPTH_BUFFER_BIT );
126          
127          gl.glMatrixMode ( GL.GL_MODELVIEW );
128          
129          gl.glLoadIdentity ( );
130          
131          final JoglCamera  joglCamera = joglModel.getJoglCamera ( );
132          
133          final AxisAngle  axisAngle = joglCamera.getAxisAngle ( );
134    
135          gl.glRotated (
136            -axisAngle.getDegrees ( ),
137            axisAngle.getX ( ),
138            axisAngle.getY ( ),
139            axisAngle.getZ ( ) );
140          
141          gl.glTranslated (
142            -joglCamera.getX ( ),
143            -joglCamera.getY ( ),
144            -joglCamera.getZ ( ) );
145    
146          for ( final JoglRenderer  joglRenderer : joglRenderers )
147          {
148            joglRenderer.render ( gl );
149          }
150    
151          JoglLib.checkError ( gl );
152        }
153    
154        ////////////////////////////////////////////////////////////////////////
155        ////////////////////////////////////////////////////////////////////////
156        }