سؤال

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).

بالطبع، الكتاب الأحمر هو دليل محدد:

الكتاب الأحمر الملحق

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top