Primitiv (dasturlashda)
Bu maqolada bir qancha muammolar mavjud. Iltimos, ularni tuzatib yordam qiling yoki shu muammolarni munozara sahifasida muhokama qiling.
|
Primitiv – OpenGL-da ikkita oʻxshash, ammo alohida tushunchalarga boʻlinadi. Birinchi maʼnosi, OpenGL tomonidan koʻrsatilgan vertex-lar oqimi nimani anglatishini tavsiflash uchun ishlatiladigan talqin sxemasiga ishora qiladi. Masalan: „GL_POINTS“. Bunday uchlar xohlagancha uzunlik qiymatiga ega boʻlishi mumkin. Ikkinchi, yaʼni „Asosiy primitiv“ deb ataluvchining maʼnosi Primitiv Assambleya sifatida vertex-lar oqimining talqini natijasiga ishora qilishini anglatadi. Shuning uchun, primitivlarning tartiblangan ketma-ketligida primitivning talqini ushbu nuqta oqimini qayta ishlash natijalariga bogʻliq boʻladi.
Vertex oqimi
[tahrir | manbasini tahrirlash]Vertex oqimi – bu vertex-larning tartiblangan roʻyxati. Ushbu oqim qayerdan kelib chiqishi primitiv yigʻilish qachon boʻlib oʻtishi va renderlash quvurining qaysi bosqichlari ishtirok etishiga bogʻliq. Vertex oqimlari quyidagilardan kelishi mumkin:
- Vertex Spetsifikatsiyasi orqali aniqlangan va Vertex Shader tomonidan qayta ishlanadigan Vertex Rendering buyruqlari. Primitiv tip – renderlash buyrugʻi bilan belgilangan tur.
- Tessellation, Tessellation Evaluation Shader bajarilgandan soʻng. Primitiv tip TESda koʻrsatilgan mavhum yamoq turi bilan belgilanadi.
- Geometry Shader primitiv chiqishlari. Primitiv turi GS tomonidan belgilanadi.
Oqim bilan bogʻlangan primitv bu oqimning qanday qilib asosiy primitivlarning tartiblangan ketma-ketligiga boʻlinishini belgilaydi: nuqtalar, chiziqlar yoki uchburchaklar.
Nuqta primitivlari
[tahrir | manbasini tahrirlash]Faqat bir turdagi primitiv nuqta mavjud: GL_POINTS
. Bu OpenGL ning oqimdagi har bir alohida vertex-ni nuqta sifatida izohlashiga olib keladi. Ularga tekstura koʻrsatilgan nuqtalar koʻpincha „nuqta spritlari“ deb ataladi.
Nuqtalar maʼlum bir oyna maydoni oʻlchamidagi ekranga moslashtirilgan kvadratchalar sifatida rasterlanadi. Oʻlcham ikki usulda berilishi mumkin: oxirgi faol vertex-larni qayta ishlash shader bosqichi yoki kontekst holati boʻyicha. Shaderdan nuqta oʻlchamini oʻrnatish uchun dasturdan nuqta oʻlchamini oʻrnatish uchun argument bilan glEnable (GL_PROGRAM_POINT_SIZE)
ni yoqing. Agar GL_PROGRAM_POINT_SIZE
yoqilgan boʻlsa, nuqta oʻlchami float gl_PointSize
chiqish oʻzgaruvchisidan olinadi. Agar u oʻchirilgan boʻlsa, nuqta oʻlchami primitivning barcha nuqtalari uchun doimiy boʻladi va glPointSize
funksiyasi tomonidan oʻrnatiladi.
Oʻlcham nuqta kvadratining har bir tomoni egallagan oyna piksellari sonini belgilaydi. Nuqtaning joylashuvi bu kvadratning markazini belgilaydi.
Nuqta oʻlchami qanday aniqlanganidan qatʼi nazar, u 0 dan katta boʻlishi kerak, aks holda aniqlanmagan xatti-harakatlar natijalari. Nuqta oʻlchamlari uchun amalda aniqlangan diapazon mavjud va har ikkala usulda berilgan oʻlcham ushbu diapazonga mahkamlanadi. Siz diapazonni GL_POINT_SIZE_RANGE
bilan soʻrashingiz mumkin (2 ta suzishni qaytaradi). GL_POINT_SIZE_GRANULARITY
bilan soʻrashingiz mumkin boʻlgan nuqta granularligi ham mavjud; amalga oshirish oʻlchamlarni donadorlikning eng yaqin karraligacha mahkamlaydi.