问题标签 [shadows]
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.
three.js - 如何管理 THREE.DirectionalLight 的阴影目标
我用three.js rev.76
我不知道如何管理THREE.DirectionalLight
.
我们可以设置DirectionalLight
如下位置:
但是 DirectionalLight 会看着(0.0.0)
, 和影子相机。我怎样才能让它看(100.200.300)
?
java - FBO 深度缓冲区为红色
我无法让我的影子系统正常工作。我使用以下代码生成我的 FBO:
我的实体在我的默认渲染器(输出 vec4)中渲染得很好。我的阴影着色器代码很简单:
我尝试在不使用任何 FBO 的情况下输出 vec4(1.0) 并且一切正常,因此我的计算是正确的,并且我的着色器代码也应该可以正常工作。
我的绘图调用如下所示:
当我调用“renderAllItems();”时 我还在右上角渲染了一个四边形,它应该显示我的深度纹理。但我看到的只是一个红色的四边形。它不应该是黑色/白色并显示一些东西吗?
javascript - 奇怪的 Threejs [r84] 阴影
我有一个带铁路灯的 Threejs 小场景。模型是使用 Blender 创建和导出的。
这是我的代码:
我是在 JSFiddle 上发布运行时代码的菜鸟,所以完整的工作代码在这里: https ://drive.google.com/open?id=0BwCG1m_fANZmb0UxYVE5OUlfYzQ
我得到了什么,运行这段代码[截图]: 奇怪的阴影
我试过玩spotLight.shadow.bias = 0.001;
,但没有任何帮助。
如果物体内部没有任何面,它看起来不那么丑(上光帽),但如果有(下光帽),它看起来就很可怕。
在搅拌机中,我尝试翻转,重新计算对象的正常值,但仍然没有用。
非常感谢提前,抱歉 GDrive 中的代码。
three.js - A-Frame 和 Three.js 如何设置 castShadow 和 receiveShadow
使用 AFrame 和三个。制作了一个 AFrame 简单的场景,一个相机,一个渲染器,一个聚光灯,一个平面和一个立方体。
我希望立方体将阴影投射到平面上。
我已经使用参考 cube.object3D 和 Spotlight.object3D 在多维数据集中设置了聚光灯中的 .castShadow。
我已经使用参考 plane.object3D 设置了平面中的 receiveShadow。
还设置了renderer.shadowMapEnabled。
但看不到任何影子投进了飞机。
有什么提示吗?
非常感谢。
opengl - OpenGL 上的 PCF 过滤
我正在阅读文档ARB_shadow
,他们暗示 OpenGL 可以在纹理采样器中自由实现 PCF(百分比更接近过滤),但他们不能在规范中谈论它。
首先他们说:
- 双线性或三线性滤波是如何实现的?
解决方案:我们建议一种实现行为,但将细节留给实现。这里的差异相当于阴影边缘的质量和柔和度。具体的过滤算法可以通过分层扩展来表达。为了避免知识产权和专利问题,我们故意在这里含糊其辞。
然后稍后:
如果 TEXTURE_MAG_FILTER 不是 NEAREST 或 TEXTURE_MIN_FILTER 不是 NEAREST 或 NEAREST_MIPMAP_NEAREST 则可以通过将多个深度纹理值与纹理 R 坐标进行比较来计算 r。这方面的细节取决于实现,但 r 应该是 [0, 1] 范围内的值,该值与比较通过或失败的数量成正比。
而且......那是PCF!
问题
第一个问题是:它有效吗?当您使用 LINEAR 过滤器对深度纹理进行采样时,有多少供应商真正使用 PCF?
第二个(也是最重要的)问题是:如何检测通过 ARB_shadow 进行的硬件 PCF 过滤是否有效?如果它不存在,我想回退到着色器中的软件 PCF。
笔记
我注意到 ARB_shadow 与
ARB_fragment_program_shadow
(至少在我可以访问的显卡上)密切相关。ARB_fragment_program_shadow 是着色器中 PCF 的低级硬件支持。这是答案的线索吗,即。如果两个扩展都存在,那么当我说魔术词时会出现硬件 PCF?用简单的二进制结果实现 ARB_shadow 将是愚蠢的。我假设在驱动程序中实现 ARB_shadow 的全部意义在于执行 PCF,即使不允许文档这么说。ARB_shadow 的存在是否意味着硬件 PCF?
three.js - 如何在three.js中隐藏shadowMapEnabler
我有一个工作代码,其中阴影工作正常,除非并且直到,renderer.shadowMapEnabled 设置为 true。但是,这里的问题是阴影贴图助手出现在场景中,它描绘了方向光从一个位置到另一个位置的移动,从而投射了阴影。我希望阴影在那里,但隐藏阴影助手。如果我评论 renderer.shadowMapEnabled 那么阴影不会投射。有谁能帮忙吗?
three.js - Three.js ShaderMaterial 着色器:标识(“hello world”)顶点和片段代码是什么?
我正在尝试为 THREE.js 阴影编写一个自定义着色器,但对 GLSL 是新手,入门时遇到了一些麻烦。我认为最好的方法是从产生与默认函数相同的阴影的“身份”函数开始,ShaderMaterial
然后慢慢破解这些函数。但我似乎无法让它工作。这是我尝试过的:
uniforms
只是提供黑色作为阴影颜色:
这不会产生任何阴影,尽管它可以正确触发,我知道,因为我可以将输出更改为gl_FragColor
任意 HSL 值并看到整个视图用该颜色着色。显然,我不理解vertexShader
产生与默认输出相同的正确输出。
任何有关标识 vertexShader 和 fragmentShader 的帮助都会真正帮助我用 GLSL 弄湿我的脚。
谢谢!