Keine Textur unter OpenGL

A

Andi0310

Neues Mitglied
0
Hallo.

Vieleicht kann mir jemand weiterhelfen, ich habe folgendes Problem.
Textur wird über Bitmapfactory.DecodeResource einwandfrei eingelesen !=null wird aber nicht gerendert.
Das Object erscheint nur in seiner Material Amb Dif einstellung.

Was mache ich Falsch ?

Code:
package com.Trials;

import java.nio.*;
import javax.microedition.khronos.opengles.*;
import android.opengl.*;
import android.graphics.*;
import android.content.*;


import android.net.http.*;public class Quad
{
    public FloatBuffer vertexBuffer,
                       normalBuffer,
                       uvBuffer;
    public ShortBuffer indexBuffer;
   
    private float[] matAmbDif={0f,.5f,.8f,1f};
   
    private float[] vertices={-3f,0f,-3f,
                                      3f,0f,-3f,
                                      3f,0f, 3f,
                                     -3f,0f, 3f};
                             
    private short[] indices={0,1,2,
                                      0,2,3};
   
    private float[] normals={0f,1f,0f,
                                     0f,1f,0f,
                                     0f,1f,0f,
                                     0f,1f,0f};
                            
    private float[] uv={1f,0f,
                             1f,1f,
                             0f,1f,
                             0f,0f};
   
    private int[] texturPointer;
   
    Context context;
                       
    public Quad(GL10 gl10,Context context)
    {
        GL11 gl=(GL11)gl10;
        this.context=context;
       
        ByteBuffer vbb=ByteBuffer.allocateDirect(vertices.length*4);
        vbb.order(ByteOrder.nativeOrder());
        vertexBuffer=vbb.asFloatBuffer();
        vertexBuffer.put(vertices);
        vertexBuffer.position(0);
       
        ByteBuffer nbb=ByteBuffer.allocateDirect(normals.length*4);
        nbb.order(ByteOrder.nativeOrder());
        normalBuffer=nbb.asFloatBuffer();
        normalBuffer.put(normals);
        normalBuffer.position(0);
       
        ByteBuffer uvbb=ByteBuffer.allocateDirect(uv.length*4);
        uvbb.order(ByteOrder.nativeOrder());
        uvBuffer=uvbb.asFloatBuffer();
        uvBuffer.put(uv);
        uvBuffer.position(0);
       
        ByteBuffer ibb=ByteBuffer.allocateDirect(indices.length*2);
        ibb.order(ByteOrder.nativeOrder());
        indexBuffer=ibb.asShortBuffer();
        indexBuffer.put(indices);
        indexBuffer.position(0);
       
        Bitmap textur=BitmapFactory.decodeResource(context.getResources(),R.drawable.test);
        // Hier wird !=null zurückgegeben.        

        texturPointer=new int[1];
        gl.glGenTextures(1,this.texturPointer,0);
        gl.glBindTexture(GL11.GL_TEXTURE_2D,texturPointer[0]);
        gl.glTexParameterf(GL11.GL_TEXTURE_2D,GL11.GL_TEXTURE_MIN_FILTER,GL11.GL_NEAREST);
        gl.glTexParameterf(GL11.GL_TEXTURE_2D,GL11.GL_TEXTURE_MAG_FILTER,GL11.GL_LINEAR);
        GLUtils.texImage2D(GL11.GL_TEXTURE_2D,0,textur,0);
        textur.recycle();
    }

    public void Draw(GL10 gl10)
    {
        GL11 gl=(GL11)gl10;
        
        gl.glEnable(GL11.GL_TEXTURE_2D);
        gl.glBindTexture(GL11.GL_TEXTURE_2D,texturPointer[0]);

        // Eigenschaften für das Material festlegen
        gl.glMaterialfv(GL11.GL_FRONT_AND_BACK,GL11.GL_AMBIENT_AND_DIFFUSE,matAmbDif,0);


        gl.glEnableClientState(GL11.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
        gl.glEnableClientState(GL11.GL_NORMAL_ARRAY);

        gl.glVertexPointer(3,GL11.GL_FLOAT,0,vertexBuffer);
        gl.glTexCoordPointer(2,GL11.GL_FLOAT,0,uvBuffer);
       
        gl.glDrawElements(GL11.GL_TRIANGLES,indices.length,GL11.GL_UNSIGNED_SHORT,indexBuffer);

        gl.glDisableClientState(GL11.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
        gl.glDisableClientState(GL11.GL_NORMAL_ARRAY);
        gl.glDisable(GL11.GL_TEXTURE_2D);
       
       
    }
}

Ich Compiliere und Code mit AIDE direct auf Android.

Kann jemand helfen ?
Danke !
 
Hat sich erledigt.
Die zuerst angegebene Textur gegen eine andere ausgetauscht hat funktioniert und danach wieder die alte Textur geladen und hat dann auch funktioniert.
Vieleicht weiss darauf jemand eine Antwort ? Würde mich interesieren.
 
Ich habe das vorherige Problem hinbekommen.

Aber jetzt ist es so, das wenn ich mit der App mit Textur in den Taskmanager gehe und diese dort wieder aufrufe das Object wieder ohne Textur dargestellt wird und wenn ich dann nur die Ansicht von Landscape auf Portrai wechsel dann wieder die Texture habe.

Bin am verzweifeln.

Brauche Hilfe.
 
Der OpenGL Kontext geht bei Android sehr leicht verloren wenn die Activity sich neu startet. (zum beispiel bei screenroatation oder app wechseln oder oder oder)


Ich rate dir zu einem Framwork anstatt OpenGL direkt anzusprechen : libGDX
 
Kannst du mir vieleicht ein paar Informationewn zum Einsatz eiens Frameworks geben oder vieleicht einen Info-Link.
Danke.
 
Was ein Framework ist weißt du ja bestimmt?!


Auf der Seite von libGDX gibt es ein Wiki wo alles beschrieben wird.Hier erfährst du was zu machen ist:Introduction · libgdx/libgdx Wiki · GitHub
einfach rechts im "table of content" durchklicken, da wird man Schritt für Schritt an die Sache herangeführt.

Hier ein Video zu einem Game in libGDX :

oder das:

Aber falls du lieber mit OpenGL direkt arbeiten möchtest kann ich dir das nicht verübeln...ist aber etwas umständlicher würde ich behaupten, nicht für jeden geeignet zumindestens...
 

Ähnliche Themen

P
Antworten
9
Aufrufe
1.935
pseudopat
P
A
Antworten
0
Aufrufe
2.192
Andi0310
A
I
  • in3rtex
Antworten
0
Aufrufe
879
in3rtex
I
Zurück
Oben Unten