OpenGL: ماذا يحدث إذا قمت بتحديد ضوء على حد سواء على حد سواء منتشرة؟
سؤال
على مثال إضاءة الكرة على Redbook ، قرأت هذا:
GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
ثم تقول:
في هذا المثال ، تكون المكالمات الثلاثة الأولى لـ GllightFV () غير ضرورية ، حيث يتم استخدامها لتحديد القيم الافتراضية للمعلمة GL_AMBIENT و GL_DIFFUSE و GL_SPECULAR
كما أفهم حتى الآن ، فإن كل مصدر للضوء لديه قيم افتراضية لمعلماتها المحيطة والمنتشرة والمعلمات ، وهذه المصفوفات الثلاثة تحدد تلك القيم الافتراضية ، هل هذا صحيح؟ هل كل مصدر للضوء هو افتراضيًا منتشرًا ومخففًا ومحيطًا؟
المحلول
في نموذج إضاءة OpenGL ، يتم حساب 4 معادلات إضاءة منفصلة لكائن: المحيط ، المنتشر ، المحآج ، والانبعاثات. لا تأخذ Ambient القواعد الطبيعية في الاعتبار ، ومنتشرة ومخاعدة ، ولا يسلط الانبعاثات في الاعتبار على الإطلاق.
يتم تلخيص كل قيم الإضاءة المختلفة هذه لإعطاء اللون النهائي للكائن.
نصائح أخرى
نعم ، هذه هي القيم الافتراضية لـ Light0: http://www.opengl.org/sdk/docs/man/xhtml/gllight.xml