问题标签 [directional-light]

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 投票
2 回答
3033 浏览

unity3d - 阴影穿过物体

我是 3D 照明的新手。刚开始使用 Unity3D。我正在为自己创建一个样本来测试阴影,但出现了问题。

在此处输入图像描述

如您所见,我用两个立方体创建了两个简单的墙。我还设置了定向灯。让我们去墙的背面看问题 在此处输入图像描述

从技术上讲,前墙应该挡住后墙的阴影。但事实并非如此。我画了一条阅读线来显示前墙的阴影与另一个阴影重叠的地方,这意味着所有的东西都是穿过墙的。为什么会这样。请帮忙...

0 投票
1 回答
191 浏览

webgl - WebGL - 没有纹理映射的定向照明?

定向照明会影响没有纹理的对象吗?我看到/读到的所有示例/教程总是有纹理映射对象。

0 投票
1 回答
319 浏览

java - LWJGL GLSL 着色器定向光出现由内向外

当我使用定向光着色器渲染 vbo 立方体时,光看起来“由内而外”。(对不起,如果我不能更好地解释它)。

外部

里面

这是我的顶点着色器代码(我的片段着色器只应用颜色,所有工作都在顶点着色器中完成)。

lDir 统一变量存储 {0,1,1} 的 float[] 数组。统一变量 normalMatrix 是这样计算的。

modelMatrix 变量是不言自明的,减去它是缓冲区而不是矩阵的事实。normal3f 变量存储模型矩阵的转置逆(我很确定这是计算正常矩阵的正确方法)。我必须将 modelMatrix 缓冲区放入一个名为 preBuffer 的缓冲区中,如果由于某种原因我没有得到错误。

如果您需要任何其他帮助解决此问题,请发表评论。

0 投票
0 回答
792 浏览

opengl - 定向光视图/投影矩阵

我在为定向光实现阴影映射时遇到了困难。我不知道如何正确设置矩阵......我希望阴影从左上角出现(如太阳投射)。我所拥有的只是以下代码来生成世界空间中的平截头体角:

如何设置太阳的视图矩阵?

0 投票
0 回答
125 浏览

java - LWJGL VBO 颜色影响着色

当我尝试使用定向光着色器渲染我的 vbo 时,我注意到 vbo 的颜色部分与阴影混淆了。
这是我的 vbo 的格式 (x,y,z,w ,r,g,b,a ,u,v ,nx,ny,nz)

顶点颜色 顶点、法线和 uv 坐标存储在数组中, 像这样

这是顶点和片段着色器代码


构建 vbo
变量的代码:v = 顶点,c = 颜色数据,st = 纹理坐标,n = 法线向量。
classes:VertexData = 用于组织顶点数据的类(VertexData 类的代码将在该类之后)

VertexData 类(如前面的代码片段所示)

现在这里有一些图像和问题的原因

颜色数组 =

结果 =结果 1

现在我改变了顶点颜色,这发生了

颜色数组 =

结果 =结果 2

最后一个例子

颜色数组 =

结果 = 平面似乎有平坦的阴影,即使它应该是每个顶点。(我认为我不需要另一张图片来解释这一点。)

我认为问题出在着色器或 vbo 的某个地方,但我不能确定。

0 投票
0 回答
1899 浏览

c++ - 定向光影映射的Projection View矩阵计算

为了计算定向光的投影视图矩阵,我采用活动相机的平截头体的顶点,将它们乘以定向光的旋转并使用这些旋转的顶点来计算正交投影矩阵的延伸。光。然后,我使用灯光的平截头体边界框的中心作为眼睛的位置,将灯光的方向作为前向矢量,然后将 Y 轴作为向上矢量来创建视图矩阵。

我通过将框的 8 个角乘以 2 作为大小并以原点为中心来计算相机平截头体顶点。

一切正常,方向光投影视图矩阵是正确的,但我遇到了这种方法的一个大问题。

假设我的相机朝前 (0, 0, -1),位于原点上,zNear 值为 1,zFar 为 100。只有从我的相机视锥体可见的对象才会渲染到阴影贴图中,所以每个对象Z 位置在 -1 和 -100 之间。

问题是,如果我的光的方向使光来自相机后面并且是一个物体,例如,Z 位置为 10(所以在相机后面但仍然在光的前面)并且足够高为了可能在我的相机可见的场景上投射阴影,这个对象不会渲染到阴影贴图中,因为它没有包含在我的光截头体中,导致错误不投射阴影。

为了解决这个问题,我正在考虑使用场景边界框来计算光投影视图矩阵,但是这样做是没有用的,因为渲染到阴影贴图中的图像太大以至于可以看到许多伪影(阴影痤疮等...),所以我跳过了这个解决方案。

我怎样才能克服这个问题?


我已经在“计算紧凑投影”部分阅读了这篇文章,以创建我的投影视图矩阵,为了清楚起见,这是我的代码:

这就是我计算截锥体及其边界框的方式:

0 投票
1 回答
345 浏览

javascript - 即使属性设置为 true,在 Three.js 中加载的 OBJ 也不会收到阴影

我目前正在研究 Three.js,并在从原生原语切换到导入的 OBJ 对象时遇到了我的第一个真正问题。

我有一个简单的十二面体模型,我在 Cinema4D r15 中进行了 UV 映射并导出为 OBJ 文件。当在 DodecahedronGeometry 上使用这个模型时,几何不再被我的定向光照亮,但如果我使用基元的话。

看到这个 JSFiddle:https ://jsfiddle.net/xm3ttmxw/1/

在此处查看所需的结果(使用原语):https ://jsfiddle.net/84hbs7ed/1/

如您所见,我将receiveShadow属性设置true为 OBJ 中的所有网格。我为灯光和渲染器激活了阴影贴图。定向光跟随相机并指向原点(十二面体的中心)。环境光似乎工作正常。

任何想法?提前致谢

0 投票
1 回答
713 浏览

javascript - collada 对象上的剥离阴影

我有一个包含两个 collada 对象和一个定向光的场景。第一个 collada 几乎是一架飞机,第二个是由多个盒子组成的。

看起来,当渲染场景时,一些“侧面”阴影确实被剥离了,尽管投射在地面上的阴影渲染得很好。

这是阴影的屏幕截图.

当我在寻找答案时,我发现这可能是我的 collada 的问题,所以我在场景中添加了一个基本的立方体(首先是大的),但它似乎也有同样的问题。

有没有人有提示或已经知道这个问题?

我正在使用最新的 three.js 修订版 atm (r71),在 Google Chrome 和 Mozilla Firefox (MacOS) 上进行了测试。我已经尝试调整方向光的几乎所有 shadow* 属性,除了与 shadowCascade 相关的属性(我不使用)。我还测试了调整阴影相关渲染器的属性。

这是我的灯光设置:

我的 collada 对象有点大,我的 shadowCamera 边界也是如此。

我的渲染器设置:

这是场景的另一个视图 这是场景的另一个视图(主要显示我的灯光设置)。

编辑:这是一个片段:

提前致谢。

0 投票
0 回答
82 浏览

c# - SceneLoader 关闭定向灯

我制作了一个简单的场景加载器场景,但是每当加载关卡时,我的定向灯似乎都没有加载。它仅在使用场景加载器加载场景时发生,而不是在直接在编辑器中打开时发生。

这是我的代码:

loadingImage是画布上的图像,上面写着“正在加载...”

removeUI是关卡上的文本和触发的按钮,LoadScene()从场景构建器关卡顺序传入关卡。

0 投票
0 回答
128 浏览

scenekit - SceneKit 将什么投影矩阵用于定向光影?

在移动定向光以仅覆盖场景的可见部分时,我试图防止阴影游动。尽管在光空间中对平移分量进行了四舍五入,但它们仍然存在游泳伪影。

我什至尝试将光直接指向下方(比例为 2,阴影贴图大小为 32)并将定向光沿世界 x 轴平移 -1 和 +1。影子还是变了。我只能假设他们没有使用正常的正交投影。当靠近边缘时,阴影似乎也移动得更多。

有没有人幸运地防止了 SceneKit 中的阴影游动,或者知道用于定向光影的投影矩阵是什么?