OpenGL in Java auf Android



  • Ich bin etwas am verzweifeln. Ich bin im Bereich App-Programmierung noch nicht sehr erfahren dafür in C++. Ich will blos ein Viereck via OpenGL darstellen und habe mich an dieser Anleitung orientiert:
    http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/

    Ich hab den Programm Code nicht sehr stark abgewandelt. Es lässt sich auch die Hintergrundfarbe mit glClearColor und glClear verändern, aber das Viereck will er nicht darstellen.

    Sicher ist das ein ganz einfacher Fehler den ich die ganze Zeit einfach bloß übersehe. Wäre nett wenn jemand mal drüber schauen kann.

    Gruß Stratege993

    Render Klasse:

    class GameRenderer implements  GameGLSurfaceView.Renderer {
    	Context context;
    
    	private Point PointPaint; 
    
    	public GameRenderer(Context context) {
    		this.context = context;
    
    		this.PointPaint = new Point();
    	}   
    
        @Override
    	public void onDrawFrame(GL10 gl) {
    		gl.glClearColor(mRed, mGreen, mBlue, 1.0f);
    		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);  
    
            gl.glLoadIdentity(); 
            gl.glTranslatef(0.0f, 0.0f, -5.0f);     
            PointPaint.draw(gl);                      
    	}
    
        @Override
    	public void onSurfaceCreated(GL10 gl, javax.microedition.khronos.egl.EGLConfig config) {		
    	}   
    
        @Override
    	public void onSurfaceChanged(GL10 gl, int w, int h) { 
    		gl.glViewport(0, 0, w, h);  
    	}    
    
    	public void setColor(float r, float g, float b) {
    		mRed = r;
    		mGreen = g;
    		mBlue = b;
    	}    
    
    	private float mRed;
    	private float mGreen;
    	private float mBlue;
    }
    

    Die Point Klasse hab ich 1 zu 1 von dem Beispiel übernommen:

    public class Point {
    
    	private FloatBuffer vertexBuffer;	// buffer holding the vertices
    
    	private float vertices[] = {
    			-1.0f, -1.0f,  0.0f,		// V1 - bottom left
    			-1.0f,  1.0f,  0.0f,		// V2 - top left
    			 1.0f, -1.0f,  0.0f,		// V3 - bottom right
    			 1.0f,  1.0f,  0.0f			// V4 - top right
    	};
    
    	public Point() {
    		// a float has 4 bytes so we allocate for each coordinate 4 bytes
    		ByteBuffer vertexByteBuffer = ByteBuffer.allocateDirect(vertices.length * 4);
    		vertexByteBuffer.order(ByteOrder.nativeOrder());
    
    		// allocates the memory from the byte buffer
    		vertexBuffer = vertexByteBuffer.asFloatBuffer();
    
    		// fill the vertexBuffer with the vertices
    		vertexBuffer.put(vertices);
    
    		// set the cursor position to the beginning of the buffer
    		vertexBuffer.position(0);
    	}
    
    	/** The draw method for the square with the GL context */
    	public void draw(GL10 gl) {
    		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    
    		// set the colour for the square
    		gl.glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
    
    		// Point to our vertex buffer
    		gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    
    		// Draw the vertices as triangle strip
    		gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
    
    		//Disable the client state before leaving
    		gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    	}
    }
    


  • Wenn du c++ kannst, dann schreib deine Android Programme in c++, wozu der Umstieg?



  • Erstmal kurz: Hab das Problem gefunden, ab GLU.gluPerspective vergessen 🙄

    @bubsi: Bis jetzt habe ich immer die Empfehlung gehört das man für Apps, bis auf Ausnahmen, Java verwenden sollte. Daran hab ich mich orientiert. Und es ist ja auch nicht schlecht ein wenig Java zu können 😉


  • Mod

    gute platformen haben keine bindung an eine sprache 😉
    java lernen ist nicht zu verurteilen, android entwickeln lernen ist auch gut, beides gleichzeitig? muss nicht sein, finde ich.

    aber gut dass du den fehler gefunden hast, scheint komplett nicht zur sprache oder platform relevant gewesen zu sein 🙂


Anmelden zum Antworten