Bagikan melalui


Topologi Primitif

Direct3D 10 dan yang lebih tinggi mendukung beberapa jenis primitif (atau topologi) yang diwakili oleh jenis enumerasi D3D_PRIMITIVE_TOPOLOGY . Jenis-jenis ini menentukan bagaimana simpul ditafsirkan dan dirender oleh alur.

Jenis Primitif Dasar

Jenis primitif dasar berikut didukung:

Untuk visualisasi setiap jenis primitif, lihat diagram nanti dalam topik ini di Arah Berliku dan Posisi Verteks Terdepan.

Tahap input-assembler membaca data dari buffer puncak dan indeks, menyusun data ke dalam primitif ini, lalu mengirim data ke tahap alur yang tersisa. (Anda dapat menggunakan metode ID3D11DeviceContext::IASetPrimitiveTopology untuk menentukan jenis primitif untuk tahap input-assembler.)

Kedekatan Primitif

Semua Jenis primitif Direct3D 10 dan yang lebih tinggi (kecuali daftar titik) tersedia dalam dua versi: satu jenis primitif dengan kedekatan dan satu jenis primitif tanpa kedekatan. Primitif dengan kedekatan berisi beberapa simpul di sekitarnya, sementara primitif tanpa kedekatan hanya mengandung simpul primitif target. Misalnya, daftar baris primitif (diwakili oleh nilai D3D_PRIMITIVE_TOPOLOGY_LINELIST ) memiliki daftar baris primitif terkait yang menyertakan kedekatan (diwakili oleh nilai D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ .)

Primitif yang berdekatan dimaksudkan untuk memberikan informasi lebih lanjut tentang geometri Anda dan hanya terlihat melalui shader geometri. Kedekatan berguna untuk shader geometri yang menggunakan deteksi siluet, ekstrusi volume bayangan, dan sebagainya.

Misalnya, Anda ingin menggambar daftar segitiga dengan kedekatan. Daftar segitiga yang berisi 36 simpul (dengan kedekatan) akan menghasilkan 6 primitif lengkap. Primitif dengan kedekatan (kecuali garis garis) berisi tepat dua kali lebih banyak simpul sebagai primitif yang setara tanpa kedekatan, di mana setiap puncak tambahan adalah puncak yang berdekatan.

Arah Berliku dan Posisi Puncak Terdepan

Seperti yang ditunjukkan dalam ilustrasi berikut, puncak terkemuka adalah puncak pertama yang tidak berdekatan dalam primitif. Jenis primitif dapat memiliki beberapa simpul terkemuka yang ditentukan, selama masing-masing digunakan untuk primitif yang berbeda. Untuk strip segitiga dengan kedekatan, simpul terkemuka adalah 0, 2, 4, 6, dan sebagainya. Untuk garis garis dengan kedekatan, simpul utama adalah 1, 2, 3, dan sebagainya. Primitif yang berdekatan, di sisi lain, tidak memiliki puncak terkemuka.

Ilustrasi berikut menunjukkan pengurutan puncak untuk semua jenis primitif yang dapat dihasilkan oleh perakitan input.

diagram pengurutan puncak untuk jenis primitif

Simbol dalam ilustrasi sebelumnya dijelaskan dalam tabel berikut.

Simbol Nama Deskripsi
simbol untuk verteks Puncak Titik dalam ruang 3D.
simbol untuk arah berliku Arah Berliku Urutan puncak saat merakit primitif. Bisa searah jajar atau berlawanan arah jajaran; tentukan ini dengan memanggil ID3D11Device1::CreateRasterizerState1.
simbol untuk puncak awal Puncak Terdepan Puncak pertama yang tidak berdekatan dalam primitif yang berisi data per konstanta.

 

Menghasilkan Beberapa Strip

Anda dapat menghasilkan beberapa strip melalui pemotongan strip. Anda dapat melakukan pemotongan strip dengan secara eksplisit memanggil fungsi RestartStrip HLSL, atau dengan memasukkan nilai indeks khusus ke dalam buffer indeks. Nilai ini adalah –1, yang 0xffffffff untuk indeks 32-bit atau 0xffff untuk indeks 16-bit. Indeks –1 menunjukkan 'potong' atau 'mulai ulang' eksplisit dari strip saat ini. Indeks sebelumnya menyelesaikan primitif atau strip sebelumnya dan indeks berikutnya memulai primitif atau strip baru. Untuk informasi selengkapnya tentang membuat beberapa strip, lihat Tahap Geometry-Shader.

Catatan

Anda memerlukan perangkat keras tingkat fitur 10.0 atau yang lebih tinggi karena tidak semua perangkat keras 10level9 menerapkan fungsionalitas ini.

 

Memulai Tahap Input-Assembler

Tahapan Alur (Direct3D 10)