Android'de kullanılmak üzere eskiz oluşturulmuş bir 3B modelin dışa aktarılması

Basit bir dikdörtgen çizmek için android üzerinde opengl kullanarak bir sorunum var. Yaptığım şey buydu.

Sketchup ile basit bir dikdörtgen çizdim. Sonucu kullanarak verdim Bir 3d modeli collada .dae dosyası. Sonra vertices verilerini kopyaladım. .dae (xml) dosyası ve bir diziye koyun. Diziyi yerel olarak kopyaladım bir kayan tampon için biçimlendirin. Sonra üçgen kullanarak çizgi çizdim modu. Sonuç neredeyse bir dikdörtgen. Üzerinde bir üçgen eksik her bir yüzey.

İşte kodun ilgili kısmı ve sonucu.

public void draw(GL10 gl) {
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
   //Enable color tracking
    gl.glEnable(GL10.GL_COLOR_MATERIAL);
    for (int i=0; i<108/4; i=i+4) {
        myDrawColor(gl,i);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,i,4);// mode, first, count
    }
}

the result is shown here http://imgur.com/a/o3HTP

0

2 cevap

Büyük olasılıkla köşe noktanızda yanlış sıraya sahip olursunuz (bu da ihracatın hatası olabilir). Ben yanlış yerlere köşeleri vardı zaman benim quads aldım budur. Dışarıdan saat yönünün tersine inşa etmek isteyeceksiniz. Ayrıca bu üçgen şeridi, köşelerinizle ilgili sorunlara neden olabilir, bu GL_QUADS'i deneyebileceğiniz basit bir uygulamadır.

1
katma

Kod çalışıyor. Üç problem vardı.

  1. DrawArrays, köşe dizisi boyunca ileri doğru çalışır. yani. Dizideki bir öğeyi bir kerede çizin ve sonra bir sonraki sayfaya geçin. Onu ileri geri atlayamazsın.
  2. .xml dosyasındaki ofset listesini kullanarak, vertices listesinde dolaştığı glDrawElements ile kullanabileceğim bir dizi oluşturdum.
  3. Unsigned ofset değerini kullanmanız gerekiyor. Bir tamsayı kullanıyordum ve işe yaramadı.

İşte sonuçta ortaya çıkan kod. Sorun benimdir. Sketchup'dan üretilmiş .xml dosyası değil.

public void draw(GL10 gl) {
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorsBuffer);
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
// Enable color tracking 
    gl.glEnable(GL10.GL_COLOR_MATERIAL);
    gl.glDrawElements(GL10.GL_TRIANGLES, myoffsets.length, GL10.GL_UNSIGNED_SHORT, mIndicesBuffer);//mode, count, type, indices
}
0
katma