2013-08-22 16 views
11

OpenGL'de bir model (örneğin insan, yürüyüş) canlandırmak istiyorum. Ben OpenGL'de 3B model (mesh) nasıl canlandırılır?

  1. Şimdi do Blender'da
  2. bu model için bir iskelet oluşturma
  3. Blender'da
  4. bir model oluşturma .... Bu konuda (zor matematik) iskelet-animasyon, ama ne gibi şeyler olduğunu biliyorum bu model ve iskelet
  5. ile Blender'da bir yürüyüş animasyon (
  6. OpenGL için oBJ dosya yükleyici olun o animasyonun bazı "anahtar karelere" al ve (obj dosya olarak örneğin) tek bir model olarak her "karesine" ihraç köşe, doku, normal ve yüz verileri elde etmek için)
  7. kullanın VBO OpenGL'de o animasyonlu modelini çizmek (ve nasıl geçerli "anahtar kare" VBO içinde/modelini ... glMapBufferRange

Tamam ile belki bir şeyler değiştirmek için bazı hileli fikir edinmek için, ben bu fikri biliyorum sadece küçük bir senaryo, ama daha fazla araştırmaya değer mi? VBO'daki "keyFrame"/modelleri değiştirmek için iyi bir konsept nedir?

Bellek sorununu biliyorum, ancak küçük modellerle (ve çok fazla animasyon olmasa bile) yapılabilir.

cevap

8

Evet, atıfta bulunduğunuz yöntem, erken 3D video oyunlarında (deprem vb.) Çok popülerdi.

Bunu anlattığınız şekilde biraz farklı bir şekilde uygulamanızı öneririm. Her olası animasyon karesi için bir anahtar kare vermek yerine. Daha fazla yayılma tuşunu dışa aktarın ve köşe pozisyonlarını enterpolasyon yapın. Bu, önemli ölçüde daha az bellek kullanımıyla daha sorunsuz oynatmaya olanak tanır.

Bu, yalnızca bir (akış veya dinamik) VBO gerektirir. Önceki ve sonraki anahtar kareleri bulacağınız her kare, köşeleri enterpole eder ve sonucu VBO'ya yükler.

Bir sahnenin her karesini OBJ olarak dışa aktarmak için blender'ı gerçekten ayarlayabilirsiniz. Özel bir araç daha sonra bu dosyaları güzel bir animasyon biçiminde derleyebilir.

İşte Oku:

+3

Dürüst olmak gerekirse, bir köşe düzeyde bu anahtar kare ara doldurması uygulamak çok muhtemelen olduğunu daha fazla çaba, imple bir iskelet animasyonu sistemi. İskelet animasyonu "eski" günlerde yapılmadı, çünkü CPU'nun tüm bu ek vertex dönüşümlerini gerçekleştirmek için beygir gücü yok. Ancak bugünün GPU'ları kahvaltı için ek matris ve enterpolasyonu kırıyor ve GLSL'de çok daha az kod var. – datenwolf

+0

@datenwolf Performans konusunda sizinle aynı fikirdeyim, fakat iskelet animasyonunu uygulamanın kolaylığına katılmıyorum. Köşeli ara doldurma, 'i için verts [i] = lerp (t, önceki [i], sonraki [i])} 'Kuaterniyonların bir hiyerarşisini, ilişkilerle ve uzunluklarla işaretlemeye kıyasla, (o bölüm kötü değil) ama sonra köşe ağırlıklarını kemiklerle ilişkilendirmelisin. Yönetmek için sadece çok daha fazla veri.Hızlı cevap için –

+1

thx! – user2602528