Temel Öğeler Oluşturma – Analizi Yaptırma Fiyatları – Yazılım Analizi Örnekleri – Ücretli Analizi Yaptırma – Ücretli Yazılım Yaptırma

info@akademidelisi.com * 0 (312) 276 75 93 * Her bölümden, Ödev Yazdırma, Proje Yaptırma, Tez Yazdırma, Rapor Yazdırma, Makale Yazdırma, Araştırma Yazdırma, Tez Önerisi Yazdırma talepleriniz için iletişim adreslerini kullanın. Makale YAZDIRMA siteleri, Parayla makale YAZDIRMA, Seo makale fiyatları, Sayfa başı yazı yazma ücreti, İngilizce makale yazdırma, Akademik makale YAZDIRMA, Makale Fiyatları 2022, Makale yazma, Blog Yazdırma, Blog Yazdırmak İstiyorum

Temel Öğeler Oluşturma – Analizi Yaptırma Fiyatları – Yazılım Analizi Örnekleri – Ücretli Analizi Yaptırma – Ücretli Yazılım Yaptırma

12 Nisan 2023 Bileşen Nedir Web sitesinin alt bileşenleri nelerdir 0
Betik Düzenleyici

Temel Öğeler Oluşturma

InitD3D10Device yönteminde, gölgelendirici oluşturmayı etkinleştirmek için bazı yeni kod segmentleri ekliyoruz. Efekt dosyasından bir efekt nesnesi oluşturuyoruz ve oluşturulan efekt nesnesinden render tekniklerini alıyoruz. Ayrıca ilkel öğeler için tepe noktaları ve grafik boru hattına köşelerin formatını söyleyen bir giriş düzeni oluşturuyoruz.

Yukarıdaki kodda, önce bir ASCII efekt dosyasından bir efekt nesnesi oluşturuyoruz. Efekt dosyası, gölgelendirici programları (veya sadece gölgelendiricileri) ve işleme ve animasyon için gerekli teknikleri içerir. Bu örnekte, çalışma zamanında ilkel konumları ve renkleri değiştirmek için gölgelendiriciler kullanıyoruz.

İlkel konumları ve renkleri değiştirmek için uygulamada C++ kodu yazarak aynı şeyi başarabilsek de, gölgelendiriciler daha fazla esneklik ve verimlilik sağlar. Bu çalışmada, C++ uygulama programı ile gölgelendirici programlarını basitçe uygulama ve gölgelendiriciler olarak adlandırarak ayırt edeceğiz. Efekt nesnesini oluşturmak için kod aşağıdadır. Efekt dosyasını daha sonra detaylı olarak anlatacağız.

Bir işleme tekniği, işlemeyi gerçekleştirmek için köşe gölgelendirici, geometri gölgelendirici, piksel gölgelendirici, örnekleyici, doku ve diğerlerinin durumlarını belirtir. Normalde bir efekt dosyası, bir veya daha fazla işleme tekniğini tanımlar.

Example01.fx dosyasında “RenderScene” adında bir teknik tanımlıyoruz. Teknik nesneyi elde etmek için ID3D10Effect::GetTechniqueByName() yöntemini çağırıyoruz ve ad olarak “RenderScene” kullanıyoruz. Daha sonra gerçek işlemeyi yapmak için bu tekniği kullanacağız.

Bir tepe noktasının bir konumu ve ayrıca renk, normal ve doku koordinatları gibi diğer isteğe bağlı nitelikleri vardır. Bu örnekte, bir tepe noktası için yalnızca konum özniteliğini kullanıyoruz.

Primitif vertex pozisyonunu GPU’ya gönderebilmek için uygulamamızda vertex formatını tanımlamamız gerekmektedir. Direct3D 10’da, bir C yapısı kullanılarak bir köşe biçimi tanımlanır. Yapı, farklı köşe özellikleri için alanlara sahiptir. Bu örnekte sadece vertex pozisyonunu kullandığımız için vertex format yapımızı tek bir D3DXVECTOR3 alanı ile tanımlıyoruz.

Daha sonra, ilkel köşeleri saklamak için sistem belleğinde bir arabellek oluşturuyoruz. Tampon, işleme için GPU’ya gönderilecek. Tampon yalnızca bir bellek yığını olduğundan, GPU’ya tampondan öznitelikleri nasıl çıkaracağını söylememiz gerekir.

Bu, bir giriş düzeni oluşturarak yapılır. Giriş düzeni, köşelerin yapısını GPU tarafından anlaşılabilecek şekilde tanımlayan bir Direct3D nesnesidir. Bir D3D10_INPUT_ELEMENT_DESC dizisi oluşturarak bir giriş düzeni tanımlarız.

Dizinin içinde, her öğe bir köşe özelliğine karşılık gelir ve yedi alana sahiptir:

1. SemanticName: POSITION, COLOR, vb. gibi shader sistemi tarafından önceden tanımlanmış bu öğenin doğasını veya amacını açıklayan bir kelime içeren bir dize.
2. SemanticIndex: anlamsal isme ek. Bir köşe, aynı yapıya sahip birden fazla özniteliğe sahip olabilir. Örneğin, 2 set doku koordinatına veya 2 set renge sahip olabilir. “COLOR0” ve “COLOR1” gibi sayıların eklendiği anlamsal adları kullanmak yerine, iki öğe, 0 ve 1 farklı anlamsal indeksleri olan “COLOR” adlı tek bir anlamsal adı paylaşabilir.
3. Format: bu eleman için kullanılacak veri tipi. Örneğin, bir DXGI_FORMAT_R32G32B32_FLOAT biçimi, öğeyi 12 bayt uzunluğunda yapan üç adet 32 bitlik kayan nokta sayısına sahiptir. DXGI_FORMAT_R16G16B16A16_UINT biçimi, öğeyi 8 bayt uzunluğunda yapan dört adet 16 bitlik işaretsiz tam sayıya sahiptir.
4. InputSlot: köşe arabelleğinin konumu. Bir Direct3D 10 uygulaması, bir köşe arabelleği kullanılarak köşe verilerini GPU’ya gönderir. Çoklu (16) köşe arabelleği GPU’ya aynı anda beslenebilir. Her köşe arabelleği, 0 ile 15 arasında değişen bir giriş yuvası numarasına bağlıdır. Girdi Yuvası alanı, GPU’ya bu öğe için hangi köşe arabelleğini getirmesi gerektiğini söyler.
5. AlignedByteOffset: köşe arabelleğinde bir kayma. Köşe arabelleği, yalnızca bir bellek yığınıdır. AlignedByteOffset alanı, GPU’ya bu öğe için bu bellek öbeğinde nereden getirmeye başlaması gerektiğini söyler.
6. InputSlotClass: Bu alan D3D10_INPUT_PER_VERTEX_DATA değerine sahiptir. Bir uygulama örnekleme kullandığında, bir giriş düzeninin InputSlotClass’ını D3D10_INPUT_PER_INSTANCE_DATA olarak ayarlayabilir. Örneklerimiz için özel olarak D3D10_INPUT_PER_VERTEX_DATA kullanacağız.
7. InstanceDataStepRate: Bu alan örnekleme için kullanılır. Şu anda örnekleme kullanmadığımız için bu alan kullanılmaz ve 0 olarak ayarlanır.


Web sitesinin alt bileşenleri nelerdir
Bileşen Nedir


Örnek tepe noktamızın yalnızca bir özelliği, konumu olduğundan, dizinin yalnızca bir öğesi vardır. Son olarak, gerçekten bir köşe düzeni nesnesi oluşturmak için ID3D10Device::CreateInputLayout() yöntemini çağırıyoruz. CreateInputLayout() yöntemi, köşe gölgelendiricisinden, yani giriş imzasından bir parametre listesi gerektirir.

Bunu, tekniğin ilk işleme geçişini temsil eden bir geçiş nesnesi elde etmek için önce tekniğin GetPassByIndex() yöntemini çağırarak yaparız. Geçişlerde oluşturma, sahnenin farklı niteliklerini ayrı ayrı oluşturma işlemidir.

Burada çok geçişli oluşturmayı kullanmasak da, Direct3D böyle bir mekanizma sağlar. Ardından, bir geçiş açıklama yapısı elde etmek için geçiş nesnesinin GetDesc() yöntemini çağırırız. Bu yapı içinde, bu geçişte kullanılan vertex shader’ın giriş imzasını temsil eden ikili verilere bir işaretçi olan pIAInputSignature adlı bir alan vardır.

Etkin köşe düzeni olarak bir köşe düzeni nesnesi oluşturmak için öğesini çağırıyoruz. Bunların hepsini yapmak için kod aşağıda gösterilmiştir.

CreateVertexBuffer() yönteminde, ilkel konum için gerçek verileri yaratır ve bu verileri işleme için grafik boru hattına göndeririz. Yöntemde, gerçek köşe verilerini köşe arabelleği nesnesinde depolarız ve nesneyi grafik boru hattına göndeririz.

Direct3D 10’da bir köşe arabelleği oluşturmak için iki yapıyı, D3D10_BUFFER_DESC ve D3D10_SUBRESOURCE_DATA’yı dolduruyoruz ve ardından arabellek oluşturmayı bitirmek için ID3D10Device::CreateBuffer()’ı çağırıyoruz.

D3D10_BUFFER_DESC, oluşturulacak köşe arabelleği nesnesini tanımlar ve D3D10_SUBRESOURCE_DATA, oluşturma sırasında köşe arabelleğine kopyalanacak gerçek verileri açıklar. Köşe arabelleği oluşturulduktan sonra, onu aygıta bağlamak için ID3D10Device::IASetVertexBuffers() öğesini çağırırız.

Nokta, çizgi listesi, çizgi şeridi, üçgen listesi ve üçgen şeridi için gerçek köşe verileri oluşturuyoruz. Birden çok köşe arabelleği oluşturmak yerine, tüm bu köşeleri tek bir ara belleğe koyuyoruz ve farklı ilkelleri oluşturmak için ofset ve köşe sayımı kullanıyoruz. İlk adım, aşağıdaki kodu kullanarak bir köşe dizisi oluşturmaktır.

g_totalVertexNum global değişkeni, tüm ilkel öğeler için toplam köşe sayısını saklar. Köşe dizisindeki her bir ilkel türü için tepe numarasını ve başlangıç ofsetini saklamak için önceden tanımlanmış iki dizi kullanırız. Ekranda hangi tür ilkellerin görüntüleneceğini belirtmek için başka bir global değişken kullanılır.

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir