问题标签 [lighting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
878 浏览

c++ - OpenGL:使用着色器通过使用预先计算的颜色图来创建顶点照明?

首先,我对着色器能做什么知之甚少,而且我对制作顶点光照非常感兴趣。我正在尝试使用 3d 颜色图,用于计算世界该位置的顶点颜色,并使用颜色图中的附近颜色插入颜色。

我不能使用典型的 OpenGL 光照,因为它可能太慢了,而且我需要渲染很多光照。我将首先在颜色图中“渲染”灯光,然后我可以手动映射使用颜色图中相应颜色绘制的每个顶点。

...或者我可以以某种方式自动化这个过程,所以它不必自己更改顶点的颜色值,但着色器也许可以为我做这件事?

问题是......这可能吗,如果是的话:我需要知道什么才能使它成为可能?

编辑:请注意,我还需要有效地更新光照贴图,而不关心光照贴图的大小,因此更新应该只在我想要更新的光照贴图的特定部分进行。

0 投票
3 回答
1643 浏览

opengl - 如何在 OpenGL 中使用不带着色器的情况下快速轻松地创建独立于场景的阴影

让我在房间的中心有一些网格(例如球体),里面装满了立方体和一个光源。如何仅使用“标准”(固定)功能在 OpenGL 中快速轻松地进行阴影投射?注意:结果还必须包含立方体和球体阴影。

0 投票
2 回答
723 浏览

opengl - OpenGL:如果我将光指定为镜面反射和漫反射,会发生什么?

在红皮书的球体照明示例中,我读到了以下内容:

然后它说:

在此示例中,对 glLightfv() 的前三个调用是多余的,因为它们用于指定 GL_AMBIENT、GL_DIFFUSE 和 GL_SPECULAR 参数的默认值

据我所知,每个光源都有其环境、漫反射和镜面反射参数的默认值,这三个数组指定了这些默认值,对吗? 默认情况下是否每个光源都是漫反射、镜面反射和环境光?

0 投票
3 回答
1209 浏览

opengl - 每个模型的局部旋转会破坏 openGL 照明

我在使用 OpenGL 照明时遇到问题。我的问题是:当对象的旋转为 0 时,照明很好 - 否则照明工作,但随着对象旋转,而不是在场景中保持固定。

听起来很简单,对吧?OpenGL FAQ对此有一些简单的建议:传递给 glLightfv(GL_LIGHT0, GL_POSITION...) 的坐标乘以当前的 MODELVIEW 矩阵。所以我一定是在错误的地方打电话给这个......但我不是。我已将 MODELVIEW 矩阵复制到一个变量中进行调试,无论我的对象如何旋转,它都保持不变。所以它必须是别的东西,但我不知道是什么。

我使用 glDrawArrays 绘制模型,并使用 glMatrixMult 在由旋转四元数和平移构建的矩阵上定位我的模型。所有这些都发生在 glPushMatrix/glPopMatrix 中,所以不应该对光线有任何副作用。

我的渲染过程的简化版本如下所示:

我认为法线可能被弄乱了,但是当我将它们渲染出来时,它们看起来很好。还有其他可能影响openGL照明的东西吗?常见问题解答提到:

如果您的光源是灯具的一部分,您可能还需要指定建模变换,以便灯光位置与周围的灯具几何体位于同一位置。

我认为这意味着您需要将光线转换为场景,这是一种不费吹灰之力的......但这是否意味着其他东西?

0 投票
1 回答
5925 浏览

opengl - Glsl phong 着色器和相机

我知道这个问题已经被问了很多,但我仍然无法做到正确。

所以,在我的顶点着色器中,我需要获得光线的位置和眼睛的位置。这是我的代码:

结果,光随着相机的移动而移动。我到底需要在这里做什么?可能不使用非 opengl 矩阵。

是否有具有适当相机控制的 glsl 照明示例?

* 更新 *

感谢 Kos,我解决了“灯光随相机移动”的问题,但这是另一个问题:

我有

现在第二个茶壶的灯光与 (0, 0, 0) 中的一个相同。我该如何解决?

顶点着色器代码以防万一:

0 投票
2 回答
3528 浏览

android - 为什么这个 Android 镜面光照示例没有按预期工作?

为什么以下代码生成的二进制文件中没有出现镜面高光?

这是我从代码中看到的内容(只有一个镜面光照组件):http: //i.imgur.com/4kvIx.png

仅使用环境照明组件:http: //i.imgur.com/80Tjx.png

只有一个漫射照明组件:http: //i.imgur.com/r5PkO.png

可能有趣的是,我调用 glOrtho 中的 zNear/zFar 参数似乎没有剪裁任何东西。我是否正确设置了场景以查看镜面高光(我确实尝试将灯光定位在顶点附近)?

0 投票
1 回答
392 浏览

lighting - XNA 4.0 for Xbox 360 中的照明设计模式?

我想知道是否有人有任何好的模式来处理 Xbox 360 的 XNA 中的照明。我目前正在尝试实现聚光灯组件。我读过关于延迟着色作为降低复杂性的一种方法。我还听说这对 Xbox 360 来说不是一个好主意,而且在 XNA 4.0 中比在 XNA 3.0 中更难。我的目标是制作一个可重用的组件,它封装了可在游戏中使用的聚光灯效果。

谢谢,

-约翰

0 投票
1 回答
779 浏览

opengl - 带 Cg 的 OpenGL 聚光灯

我正在尝试用 Cg 完成聚光灯效果。我已经设法进行正常的环境和漫射照明。

我了解聚光灯的基本功能(位置、方向、截止角),但在 Cg 中处理这些仍然让我难以理解。

这就是我计算聚光灯参数的方式:

方向是聚光灯指向的像素(例如: (0, 0, 0) )

lightPosition是灯光的位置

P是我要强调的重点。IN.position 来自顶点着色器,它已经与 modelViewProj 相乘。

角度是光的方向和光的方向之间的角度的余弦,到我试图照亮的点。

问题是改变光的方向不会影响聚光灯。它总是以 0,0,0 为中心。如果我改变 lightPosition,聚光灯会改变,但它仍然从 0,0,0 开始并在灯光的位置对面扩展

另一件事是,当我计算方向向量时,我使用 lightPosition,而不是 lightP。如果我使用 lightP,聚光灯根本不起作用。

聚光灯也只照亮一半的场景。

我的主要参考资料是The Cg Tutorial中的第 5 章(照明)。

0 投票
4 回答
8837 浏览

opengl - Minecraft 如何进行光照?

我熟悉的唯一模型是漫反射照明,但这看起来比这要复杂得多。

0 投票
1 回答
1243 浏览

3d - 延迟着色、法线贴图和指向远离光线的自阴影表面

我遇到了法线贴图和指向远离光线的表面的问题。这些表面根本不应该被照亮,因为它们没有面对光线。但是,如果碎片的法线恰好弯曲得足够大,这些表面上的相当多的碎片可能会被点亮。由此造成的伪影清晰可见,例如在一个盒子上,它的一侧直接背离光线:该侧的几乎所有碎片都是黑色的(正如他们应该的那样),但仍然可以看到几个白色碎片(抱歉,截图不是当前可用,但如果您在知道我在说什么之前已经完成了法线映射)。

我找到了一种在前向渲染器中解决此问题的简单方法:只需将光强度乘以 (4*lightDirection.Z)。推理是你应该将光强度乘以光向量和表面法线向量的(钳位)点积(如果面指向外,点积将为负,光强度将被钳位为 0),因为我们正在计算切线空间,此法线始终为 (0,0,1),因此点积就是 lightDirection.z。乘数 4 只是为了确保光强度不会下降(如果脸没有指向另一边)。

现在我尝试为延迟渲染器实现相同的功能,但很快注意到这种简单的方法将不起作用,因为我正在世界空间中进行计算。要进行此计算,我需要该片段的真实法线和该片段所在表面的法线。当然,我可以将这些信息存储到纹理中,但为了完成这个技巧,还要多花 3 个浮点数(或者如果我要打包它们,则需要 2 个)似乎相当昂贵。

有什么解决方法吗?

谢谢你。