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="http://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 }