في OpenGL Vertex Shaders، ما هو W، ولماذا أقسم به؟
-
19-09-2019 - |
سؤال
void main(void)
{
vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
gl_Position = clipCoord;
gl_FrontColor = gl_Color;
vec3 ndc = clipCoord.xyz / clipCoord.w;
لذلك clipCoord
هو مجرد القيام بتحويل خط أنابيب ثابت قياسي. لماذا أقسم w
, ، وما الذي أحصل عليه من هذا؟
المحلول
W هو الإحداثيات الرابعة لفترتكس ثلاثي الأبعاد؛ وتسمى هذه الرأس من تنسيق Vertex متجانس.
في عدد قليل من الكلمات، فإن مكون W هو عامل يقسم مكونات ناقلات أخرى. عندما تكون W 1.0، فإن إحداثيات Vertex متجانسة "تطبيع". لمقارنة رأيتين، يجب عليك تطبيع قيمة W إلى 1.0.
فكر في قمة الرأس (1،1،1،1). الآن زيادة قيمة W (W> 1.0). الموقف الطبيعي هو التحجيم! وهو ذاهب إلى الأصل. فكر في قمة الرأس (1،1،1،1). الآن تقليل قيمة W (W <1.0). الوضع الطبيعي هو الذهاب إلى نقطة لانهائية.
بصرف النظر عن إحداثيات Scaling Vertex، فإن الإحداثيات W ضروري لأنك تضرب مصفوفة 4x4 (عرض النموذج و / أو مصفوفات الإسقاط) مع مصفوفة 4x1 (Vertex).
بالطبع، الكتاب الأحمر هو دليل محدد: