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 }