Ağ Örgüsü (Mesh)
Assimp ile uygulamaya birçok farklı model yükleyebiliriz, ancak bir kez yüklendikten sonra hepsi Assimp' in veri yapılarında saklanabilirler. Sonunda istediğimiz şey, bu verileri OpenGL' in anlayabileceği bir formata dönüştürmektir. Bir meshtek bir çekilebilir varlığı temsil ettiği önceki bölümden öğrendik, bu yüzden kendi mesh sınıfımızı tanımlayarak başlayalım.
Bir ağın, bir ağın minimum olarak verisi olarak ne yapması gerektiğini düşünmek için bugüne kadar öğrendiğimizden birini gözden geçirelim. Bir ağ, en azından her bir köşe bir konum vektörü, normal bir vektör ve bir doku koordinat vektörü içerdiği bir dizi köşeye ihtiyacınız olmalıdır. Bir örgü ayrıca endeksli çizim için endeksler içermeli ve dokular şeklinde (yaygın / speküler haritalar) malzeme verileri içermelidir.
Şimdi bir mesh sınıfı için minimum gereksinimleri belirledik, OpenGL' de bir vertex tanımlayabiliriz:
Gerekli vertex özniteliklerinin her birini, Vertex denilen bir struct'a kaydeceğiz. Bir Vertex struct' ının yanı sıra, doku verilerini de bir Texture struct'ında düzenlemek istiyoruz:
Dokunun id bilgisini ve tipini saklıyoruz (örneğin; dağıtılmış ya da yansıtıcı doku).
Bir vertex ve dokunun gerçek temsilini bilirsek, Mesh sınıfının yapısını tanımlamaya başlayabiliriz:
Gördüğünüz gibi, sınıf çok karmaşık değil. Kurucu işlevde, gerekli tüm verileri veriyoruz, SetupMesh
işlevindeki tamponları başlatıyoruz ve son olarak Draw
işlevi ile çizdiriyoruz. Draw
işlevine bir tonlandırıcıyı verdiğimizi unutmayın; Shader' ı mesh'e ileterek, çizimden önce birkaç uniform değişken ayarlayabiliriz (örnekleyicileri doku birimlerine bağlamak gibi).
Kurucu işlevin içeriği oldukça basittir. Sınıfın public değişkenlerini kurucunun ilgili argüman değişkenleriyle ayarlıyoruz. Ayrıca kurucuda setupMesh
işlevini de çağırıyoruz:
Burada başka özel açıklanacak bir şey yok Şimdi setupMesh
işlevine girelim.
İlklendirme
Kurucu sayesinde, şimdi sahneleme için kullanabileceğimiz büyük mesh listesine sahibiz. Uygun tamponları ayarlamamız ve Vertex Shader Düzenini Vertex Özniteliği işaretçileri üzerinden belirlememiz gerekir. Şimdiye kadar bu kavramlarla ilgili herhangi bir sorun yaşamamalısınız, ancak yapılardaki Vertex verilerinin tanıtılmasıyla bu kez biraz heyecanlı hale getirdik:
Kod, beklediğinizden çok farklı değil, ancak Vertex
yapısının yardımıyla birkaç küçük püf noktası kullanılmıştır.
Yapılar, bellek düzenlerinin sıralı olduğu C++ 'da harika bir özelliğe sahiptir. Yani, bir yapıyı bir dizi veri olarak temsil edebildiydik, yalnızca bir dizi tamponu için istediğimiz bir float (aslında bayt) dizisini doğrudan çeviren sırayla değişkenlerini içerir. Örneğin, doldurulmuş bir köşe yapımız varsa, bellek düzeni aşağıdakilere eşit olacaktır.
Orijinal Kaynak: Mesh
Last updated