2016-04-06 9 views
0

Opengl-es'i bilmiyorum. ama android uygulamasında .obj 3d modelinin özelliklerini kullanmalıyım. .obj dosyasında, Vertices, Texcoords ve Normals'ı bulabilirim. fakat hiçbir Endeks yoktur ve bunun yerine yüz unsurları vardır. Herkes bana .obj dosyasından endeksleri nasıl alacağımı açıklayabilir mi?. Endekslerini alın.

+0

Sen Wavefront nesne dosyası şartname – Raki

+0

okumak gerekir: http://www.martinreddy.net/gfx/3d/OBJ.spec –

+0

Evet, öyle bir şey ve hatta wikipedia dan. Bunu kullanarak, yüzlerden endeksleri nasıl alacağımı biliyorum, sadece indeksler kullanılarak yüzler oluşturulacaktır. – Raki

cevap

2

Açıkça yazmak biraz zor çünkü OBJ'nin bir köşe noktası olarak gördüğü şey OpenGL'nin bir köşe noktası olarak gördüğü şey değil.

Bir OBJ dosya obj-köşeler (v), doku koordinatları (vt), normaller (n) listelerini kurar ... öğrenelim. Muhtemelen bunları OpenGL'e vermek istemezsiniz (ancak uyarının sonuna kadar atlayabilirsiniz). Bunlar, yükleme kodunuzun v1, vt3, vb. Anlamlarını belirleyebilmeleri için bir yoldur.

OpenGL-vertices öğesinin belirtildiği tek yer, f bildiriminin içinde. Örneğin. v1/vt1/vn1, "Konum, doku koordinatı ve listede belirtildiği gibi normal olan OpenGL köşe noktası" anlamına gelir.

  • örneğini opengl-tepe endekslere v/vt/vn üçlüsü gelen boş bir karma haritası, boş bir opengl-tepe listesi ve sonrası için endekslerin boş listesi:

    Yani yükleme çalışılabilir bir çözüm pseudocode olduğu glDrawElements için destek; OBJ dosyasındaki her üçlü için

  • : endeksi almak ve elementler listesine eklemek eğer öyleyse karma harita haline
    • bakmak, bu opengl-tepe zaten listede olup olmadığını belirlemek ve;
    • o zaman bir sonraki kullanılabilir endeksi üçlüye atar (böylece, bu sadece artan bir sayıdır), bunu karma haritasına ve öğe listesine koyup, üçlüyü birleştirin ve opengl-vertex listesine ekleyin.
Zamandan çizim de sizin opengl-tepe listesine ima derece rasgele erişim potansiyelini en aza indirmek için çalışarak daha iyi yapmaya çalışacağım, ama erken optimize etmez

.


Uyarı:

GPU köşe doku içine, vb obj-köşe birikmiş olan, o zaman sadece OpenGL doğrudan üçe kaynağı olabilir (vertex shader içinde yani doku örneklemesi) getirme destekliyorsa doku haritaları ve vertex gölgelendiricinizde dolaylı arama yapar. Verteks dokusu getirme ile, dokular gerçekten sadece rastgele erişim 2d dizileri haline gelir. Ancak, pek çok Android GPU'su vertex texture getirisini desteklemez (görünüşte bir sıfatıyla bir sıfırlama yapan ES 3'ü destekleseler bile, bir uygulama en fazla sıfır örnekleyiciyi desteklediğini belirtmesine izin verir). Bu demek