Hopefully you have a good reason to structure your classes they way you have done.
To start BlaRenderer is a proper derived class that will get called. So this is a concrete class by itself. Number 2, the player class looks more like a utilitiy class and hence doesn't need to derive from BlaRenderer. In your code I don't see the Player class playing the role of a renderer. Number 3, BlaRenderer has a local variable pointing to a Player class. So the variables of Player class are physically separate from the variables of BlaRenderer. if your intention is to have the Player as a utility class, then 1. Don't inherit from Renderer 2. Remove the local variables in the BlaRenderer which are now controlled by Renderer Hope that helps http://satyakomatineni.com/android/training http://satyakomatineni.com http://androidbook.com http://twitter.com/SatyaKomatineni On Wed, Aug 15, 2012 at 8:37 PM, Braindrool <cawehk...@gmail.com> wrote: > I've been programming for years, but I have very little experience with 3D > graphics. I thought OpenGL would be the most efficient in this project. It's > coming along alright, I am still studying the API and documentation. But I > have encountered a problem using multiple classes. For instance, here I try > to use a separate class for the player model. (Yes, currently it's just a > cube.) > > Renderer: > > Code: > > package com.braindrool.bla; > > import java.nio.ByteBuffer; > import java.nio.ByteOrder; > import java.nio.FloatBuffer; > import java.nio.ShortBuffer; > > import javax.microedition.khronos.egl.EGLConfig; > import javax.microedition.khronos.opengles.GL10; > > import android.opengl.GLSurfaceView.Renderer; > > public class BlaRenderer implements Renderer { > > int nrOfVertices; > float A; > Player player = new Player(); > > public void onSurfaceCreated(GL10 gl, EGLConfig config) { > // TODO Auto-generated method stub > > gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); > gl.glEnableClientState(GL10.GL_COLOR_ARRAY); > > gl.glEnable(GL10.GL_CULL_FACE); > > gl.glFrontFace(GL10.GL_CCW); > gl.glCullFace(GL10.GL_BACK); > > gl.glClearColor(0.3f, 0.8f, 0.9f, 1); > > // initTriangle(); > player.initPlayer(); > > } > > public void onDrawFrame(GL10 gl) { > // TODO Auto-generated method stub > > > > gl.glLoadIdentity(); > > gl.glClear(GL10.GL_COLOR_BUFFER_BIT); > > // gl.glRotatef(A * 2, 1f, 0f, 0f); > // gl.glRotatef(A, 0f, 1f, 0f); > // > // gl.glColor4f(0.5f, 0, 0, 1); > > gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); > gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer); > gl.glDrawElements(GL10.GL_TRIANGLES, nrOfVertices, > GL10.GL_UNSIGNED_SHORT, indexBuffer); > // A++; > > } > > public void onSurfaceChanged(GL10 gl, int width, int height) { > // TODO Auto-generated method stub > gl.glViewport(0, 0, width, height); > > } > > private FloatBuffer vertexBuffer; > private ShortBuffer indexBuffer; > > private FloatBuffer colorBuffer; > > private void initTriangle() { > > float[] coords = { 0, 0.5f, 0, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, > 0.5f, > 0, 0, -0.5f }; > > nrOfVertices = coords.length; > > ByteBuffer vbb = ByteBuffer.allocateDirect(nrOfVertices * 3 * > 4); > vbb.order(ByteOrder.nativeOrder()); > vertexBuffer = vbb.asFloatBuffer(); > > ByteBuffer ibb = ByteBuffer.allocateDirect(nrOfVertices * 2); > ibb.order(ByteOrder.nativeOrder()); > indexBuffer = ibb.asShortBuffer(); > > ByteBuffer cbb = ByteBuffer.allocateDirect(4 * nrOfVertices * > 4); > cbb.order(ByteOrder.nativeOrder()); > colorBuffer = cbb.asFloatBuffer(); > > float[] colors = { 1f, 0f, 0f, 1f, // point 1 > 0f, 1f, 0f, 1f, // point 2 > 0f, 0f, 1f, 1f, // point 3 > }; > > short[] indices = new short[] { > // indices > 0, 1, 2, 0, 2, 3, 0, 3, 1, 3, 1, 2 > > }; > > vertexBuffer.put(coords); > indexBuffer.put(indices); > colorBuffer.put(colors); > > vertexBuffer.position(0); > indexBuffer.position(0); > colorBuffer.position(0); > > } > > } > > And now the player class. > > Code: > > package com.braindrool.bla; > > import java.nio.ByteBuffer; > import java.nio.ByteOrder; > import java.nio.FloatBuffer; > import java.nio.ShortBuffer; > > import javax.microedition.khronos.egl.EGLConfig; > import javax.microedition.khronos.opengles.GL10; > > public class Player extends BlaRenderer{ > > private FloatBuffer vertexBuffer; > private ShortBuffer indexBuffer; > private FloatBuffer colorBuffer; > private int nrOfVertices; > float A; > > public void initPlayer() { > > float[] coords = { > > -0.5f, 0.5f, 0, // P0 > -0.5f, 0, 0, // P1 > 0.5f, 0, 0, // P2 > 0.5f, 0.5f, 0, // P3 > 0.5f, 0.5f, 0.5f, // P4 > -0.5f, 0.5f, 0.5f, // P5 > -0.5f, 0, 0.5f, // P6 > 0.5f, 0, 0.5f // P7 > }; > > nrOfVertices = coords.length; > > ByteBuffer vbb = ByteBuffer.allocateDirect(nrOfVertices * 4); > vbb.order(ByteOrder.nativeOrder()); > vertexBuffer = vbb.asFloatBuffer(); > > ByteBuffer ibb = ByteBuffer.allocate(nrOfVertices * 2); > ibb.order(ByteOrder.nativeOrder()); > indexBuffer = ibb.asShortBuffer(); > > ByteBuffer cbb = ByteBuffer.allocate(12 * 4); > ibb.order(ByteOrder.nativeOrder()); > colorBuffer = cbb.asFloatBuffer(); > > short[] indices = { > > 0, 1, 2, 3, 0, 2, 0, 6, 1, 0, 5, 6, 5, 7, 6, 5, 4, 7, 4, 3, 7, > 3, 2, 7 > > }; > > float[] colors = { 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1 }; > > vertexBuffer.put(coords); > indexBuffer.put(indices); > colorBuffer.put(colors); > > vertexBuffer.position(0); > indexBuffer.position(0); > colorBuffer.position(0); > > } > } > > > It's a bit sloppy but meh. > > > The error: > > Code: > > Player player = new Player() > > & > > Code: > > public class Player extends BlaRenderer{ > > Help appreciated! > > ~Braindrool > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en