2010-08-30 10 views
8

Zaten daha hızlı opengl-es yüzeyi ile zaten sahip olduğum Canvas tabanlı oluşturma sistemini değiştirmeye çalışıyorum, ancak böyle bir duruma uygun bir openGL renderer elde edemiyorum. perspektif görünümden ziyade 2d alanı gibi davranır.Tuval değiştirmek için OpenGL kullanma - Android

 @Override 
    public void onSurfaceChanged(GL10 gl, int width, int height) { 
     gl.glViewport(0, 0, width, height); 
     gl.glMatrixMode(GL10.GL_PROJECTION); 
     gl.glLoadIdentity(); 
     gl.glOrthof(0.0f, width, 0.0f, height, 0.0f, 1.0f); 

     gl.glShadeModel(GL10.GL_FLAT); 
     gl.glEnable(GL10.GL_BLEND); 
     gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 
     gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000); 
     gl.glEnable(GL10.GL_TEXTURE_2D); 
    } 

    @Override 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); 

     gl.glClearColor(0.5f, 0.5f, 0.5f, 1); 
     gl.glShadeModel(GL10.GL_FLAT); 
     gl.glDisable(GL10.GL_DEPTH_TEST); 
     gl.glEnable(GL10.GL_TEXTURE_2D); 

     gl.glDisable(GL10.GL_DITHER); 
     gl.glDisable(GL10.GL_LIGHTING); 

     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);  
    } 

nasıl kurulum oluşturucu çevirmek dönüşüm ekrandaki piksellere ile eşleşir böylece şu şekildedir: gerçekleyicisi

Benim şu anki kod görünüyor? (böylece 5'i sağa çevirmek 5'i hareket ettirirdi)

+0

Neden sadece bir GL örneğini Tuval yapıcısına geçirmiyorsunuz. http://developer.android.com/reference/android/graphics/Canvas.html –

+0

Bu, openGL'nin hız avantajlarını Bitmap'lerin çiziminde temel Canvas'a göre korur mu? – GuyNoir

+0

Bunun için Tuval kullanmayın. Belgeli olmasına rağmen işe yaramıyor. Ayrıca, IRC’de yapılan görüşmelere göre, Canvas’ın geliştiricisi gelecekteki sürümler için onu API’ndan zaten kaldırdı. – Moncader

cevap

9

Lütfen OpenGL'de Y koordinatının tersine çevrildiğini unutmayın. Aksi halde hepsi aynıdır. http://code.google.com/p/replicaisland/ İşte

Ben kendi kodunda kullanmak ne:: Doğru bayrakları gelince
, sana açık kaynak android oyun çoğaltma adanın kontrol tavsiye mViewWidth & mViewHeight boyutu vardır

public void onSurfaceChanged(GL10 gl, int width, int height) 
{ 
    mViewWidth = width; 
    mViewHeight = height; 

    gl.glViewport(0, 0, mViewWidth, mViewHeight); 
    gl.glLoadIdentity(); 
    GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0); 
} 

public void onSurfaceCreated(GL10 gl, EGLConfig config) 
{ 
    gl.glClearColor(0.5f, 0.5f, 0.5f, 1); 
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); 
    gl.glShadeModel(GL10.GL_FLAT); 
    gl.glDisable(GL10.GL_DEPTH_TEST); 
    gl.glEnable(GL10.GL_BLEND); 
    gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); 

    gl.glViewport(0, 0, mViewWidth, mViewHeight); 
    gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); 
    gl.glEnable(GL10.GL_BLEND); 
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 
    gl.glShadeModel(GL10.GL_FLAT); 
    gl.glEnable(GL10.GL_TEXTURE_2D); 

    GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0); 
} 

Ekran

+0

Ancak, kod, optimizasyonlar ve çini tabanlı sistemler ile çok kalın, bu da ekrana birkaç dokuyu işlemek için ihtiyaç duyduğum basit kodu bulmak için oldukça kullanışsız. – GuyNoir

+0

Benzer bir sorun yaşadım ve çoğaltma adaları yazarının gl kanvasını düzenlediği bölümü bulmakta sorun yaşamadım. GameRenderer.java adlı dosyada. Orijinal yanıtımı kullandığım kurulum kodunu içerecek şekilde düzenledim. –

+0

Tamam, teşekkürler. Yine de genel kod yapılarımın geçişi konusunda oldukça fazla çalışmadığı halde. Taban-2 olmayan boyutlarda dokuları depolamanın bir yolu var mı? Eğer olmasa bile, openGL kullanmanın zorluğuna değmez (zaten Android'in bellek sınırlarını zorluyorum). – GuyNoir

İlgili konular