C++ OpenGL中定位光和直射光的区别?

Posted

技术标签:

【中文标题】C++ OpenGL中定位光和直射光的区别?【英文标题】:Difference between positioned and direct light in C++ OpenGL? 【发布时间】:2013-05-06 20:36:13 【问题描述】:

我刚刚在 videotutorialsrock.com 上做了一个关于 C++ OpenGL 照明的教程。我了解环境光,但不了解定位光和直射光之间的区别,因为两者的想法和代码看起来非常相似。这是我的定位光代码:

//Add positioned light
GLfloat lightColor0[] = .6, .6, .6, 1;
GLfloat lightPos0[] = 4, 0, 8, 1;
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);

对于定向光:

//Add direct light
GLfloat lightColor1[] = .5, .2, .2, 1;
GLfloat lightPos1[] = -1, .5, .5, 0;
glLightfv(GL_LIGHT1, GL_DIFFUSE, lightColor1);
glLightfv(GL_LIGHT1, GL_POSITION, lightPos1);

谁能解释一下?

【问题讨论】:

这有帮助吗? okino.com/new/toolkit/image22.gif 是的,现在知道了。如果您从该评论中做出回答,我会为您接受。谢谢! 【参考方案1】:

在定向中,光只来自一个方向,而点光从它向各个方向辐射光。

定向光可用于模拟非常远处的点光,例如照在地球上的太阳。

(图片来自 okino.com)

【讨论】:

【参考方案2】:

位置向量(xyzw)中的不同w。

GLfloat lightPos0[] = 4, 0, 8, 1; w = 1 表示点(3d 位置)

GLfloat lightPos1[] = -1, .5, .5, 0; w = 0 表示向量(3d 方向)

https://gamedev.stackexchange.com/questions/14115/do-i-need-the-w-component-in-my-vector-class

【讨论】:

以上是关于C++ OpenGL中定位光和直射光的区别?的主要内容,如果未能解决你的问题,请参考以下文章

(手机拍照)2光和影

光和颜色

一步步学OpenGL(20) -《点光源》

一步步学OpenGL 20 -《点光源》

光折射的例子和光反射的例子

使用 C++ 使用 openGL 以图形方式表示堆积条形图