在 Three.js 着色器中使用灯光

2023-11-25

我正在尝试从 Three.js 中的着色器访问场景的灯光。

这个问题几乎是重复的Three.js ShaderMaterial 灯光问题但对该问题的评论并不能帮助我解决问题。

这是顶点着色器:

#if NUM_DIR_LIGHTS > 0
    struct DirectionalLight {
        vec3 direction;
        vec3 color;
        int shadow;
        float shadowBias;
        float shadowRadius;
        vec2 shadowMapSize;
     };
     uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];
#endif
  varying vec3 color;
  void main() {
     float r = directionalLights[0].color.r;
     color = vec3(r,1.0,0.0);
     gl_Position = projectionMatrix * modelViewMatrix * vec4(position , 1.0);
  }

以及相关的 ShaderMaterial:

var material = new THREE.ShaderMaterial({
    uniforms: THREE.UniformsLib['lights'],
    vertexShader: document.getElementById('vertexShader').innerHTML,
    fragmentShader: document.getElementById('fragmentShader').innerHTML,
    lights : true
  });

我在这里发布了完整的示例代码:https://jsfiddle.net/zhkvcajs/

删除lights : true呈现一个绿色的结,但它没有得到directionalLights应该改变结颜色的信息。显然,lights : true是必需的,但会导致错误。


如果您想使用场景灯ShaderMaterial,你需要设置lights: true.

var material = new THREE.ShaderMaterial( {
    uniforms: uniforms,
    vertexShader: document.getElementById('vertexShader').innerHTML,
    fragmentShader: document.getElementById('fragmentShader').innerHTML,
    lights: true
} );

三.js r.126

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Three.js 着色器中使用灯光 的相关文章

  • 使用 Three.js 在片段着色器中手动选择 mipmap 的 lod

    我正在使用 Three js 中的 glsl es 编写一个基于物理的着色器 为了添加镜面全局照明 我使用内部带有 mipmap 链的立方体贴图 dds 纹理 按照 CubeMapGen 的说明进行预先计算here http seblaga
  • Material.alphaTest 是什么意思?

    在过去的几天里 我一直在非相交对象的透明度方面遇到重大问题 我遇到了设置的建议alphaTest将材料的值调整为0 5 从而解决了问题 太好了 但我想更好地理解它的含义以及它如何如此优雅地解决问题 有人可以建议吗 从一个简单的实验来看 这似
  • 将球体上的 3d 点转换为 UV 坐标

    我在球体上有一个 3d 点 想要将其转换为球体纹理上的 UV 点 有人可以指出正确的方向吗 我可以采用纯数学解决方案 Edit 我目前有这个 它不会返回正确的 UV 坐标 p 是球体上的 3d 点 mesh position 是球体的位置
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • Three.js 中的文本几何

    我在 Three js r74 中的 TextGeometry 遇到一些问题 我该如何正确实施 这是我的代码笔 codepen io cheesyeyes pen eJqZxK 提前致谢 好吧 对于每个正在寻找简单答案而不是链接和其他超载示
  • 如何在 Three.js 中从三角面获取多边形?

    我在网上查了一下是否有人遇到同样的问题 我正在使用 Three js 我有一个 3DObject 其中可能包含孔 面是三角形的 假设我想从上面看到它 我的目标是获得一个代表顶面周长的多边形 这对我来说意味着不再有三角面 而只有 1 个多边形
  • Three.js 中几何图形的事件处理? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在寻找对 Three js 中的几何图形 相机 灯光 我们添加到场景中的东西 进行某种事件处理 我用谷歌搜索但找不到任何相关内容
  • 使用三个 JS 和 React JS 加载 GLTF 模型

    我使用 React JS 加载从 sketchfab 下载的 GLTF 文件时遇到问题 当我尝试在不使用React 使用常规index html和index js 的情况下执行此操作时 它可以工作 但是当我将代码带入React应用程序时 它
  • OpenGL:多个顶点的单个顶点属性?

    我有一个接受以下属性的顶点着色器 a posCoord 顶点位置 a texCoord 纹理坐标 传递给片段着色器 a alpha 透明度因子 传递给片段着色器 我正在渲染的对象都是 广告牌 一对直角三角形组成一个矩形 我正在使用一次调用g
  • Three.js:通过触摸和设备方向旋转相机

    我正在使用 Threejs 制作一个 3D 项目 它允许使用计算机设备的鼠标控制相机 还允许使用触摸事件和智能手机的设备方向事件进行控制 举个例子 这个网站 http lacostewinter seeourwork cn en intro
  • 动画 GIF 作为 THREE.js 中的纹理

    我正在寻找一种在 THREE js 中使用 GIF 动画作为纹理的方法 我目前可以加载纹理 甚至是 GIF 格式 但它无法播放动画 有什么办法可以做到吗 我发现了一些像这样的链接 https github com JordiRos GLGi
  • 在 Three.js 中渲染具有大量对象的多个场景的最佳方式

    想象一下 您想要绘制两个场景 每个场景都有数百个球体 并提供在这些场景之间切换的功能 做到这一点的最佳方法是什么 目前 一个开关大约需要 4 到 5 秒 因为我要删除 创建和绘制每个开关上的所有球体 下面是在场景切换上运行的代码示例 cle
  • CPU 到 GPU 法线映射

    我正在创建一个地形网格 然后这个答案 https stackoverflow com a 5284527 1356106我正在尝试将 CPU 计算法线迁移到基于着色器的版本 以便通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 三-mtl-loader 错误:THREE.MeshPhongMaterial:.shading 已被删除 -> 对象不可见

    昨天我问了这个问题 未捕获的类型错误 THREE MTLLoader 不是构造函数 2 0 https stackoverflow com questions 47741644 uncaught typeerror three mtlloa
  • 在 Three.js 中从 Web Worker 加载纹理

    当将大纹理图像应用到网格上一段明显的时间时 Three js 会锁定浏览器的主线程 让我们考虑以下示例 var texLoader new THREE TextureLoader texLoader load someLargeTextur
  • 无面点云 (PLY) 文件的 Web 查看器

    我在尝试Three Js https github com mrdoob three js 用于通过网络查看 PLY 文件 使用这个例子 http threejs org examples webgl loader ply html作为参考
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • ThreeJS 中阴影的奇怪行为

    所以我有一个 ThreeJS 场景 并且添加了一些球体 多材质 我还添加了定向光 this light new THREE DirectionalLight 0xFFFFFF 1 this light position set 2 10 2
  • 根据 GLSL 中向量的特定分量执行最小-最大的最快方法?

    我需要在我的 GLSL 代码中多次调用这种函数 vec2 minx vec2 a vec2 b if a x lt b x return a else return b 我担心过度分支 有没有办法避免 if else 结构 我建议使用 GL

随机推荐

  • Java 可序列化对象到字节数组

    假设我有一个可序列化的类AppMessage 我想将其传输为byte 通过套接字到另一台机器 在另一台机器上根据收到的字节进行重建 我怎样才能做到这一点 准备要发送的字节数组 ByteArrayOutputStream bos new By
  • 查询的结果不能被枚举多次

    我正在使用实体框架 ef 并收到以下错误 查询的结果不能被枚举多次 我有一个包含 ef 数据上下文的存储库类 然后我有一个控制器类 不要与 MVC 控制器混淆 其中包含存储库的实例 到目前为止一切顺利 我在控制器上有一个搜索方法 它应该返回
  • 如何在 PHP 中使用 BLENC?

    我有一个 testcode php 文件需要编码 我创建了文件encode php来加密和测试该文件
  • #pragma包效果

    我想知道是否有人可以向我解释什么 pragma pack预处理器语句确实如此 更重要的是 为什么人们想要使用它 我查看了MSDN 页面 这提供了一些见解 但我希望听到更多有经验的人的意见 我以前在代码中见过它 但我似乎找不到在哪里了 pra
  • Symfony2:在生产中访问与开发相同的路径

    我正在使用 Symfony2 开发一个小应用程序 我可以在我的开发环境中毫无问题地访问所有路由 http symfony app dev php cp symfony 在我的主机文件中解析为本地主机 然而 当我尝试在生产环境中访问它时 我只
  • Angular 发送带有 get(和其他)请求的令牌

    由于某种原因 互联网上缺乏关于如何在 Angular 4 中执行此操作的示例 Angular 4 使用 TypeScript 它不允许您跳过包含选项属性 如它转译成的 JavaScript 那样 我正在尝试访问我团队的 RESTful AP
  • Websocket 在 localhost 上工作但不能在 Heroku 上工作

    我有一个使用 websockets STOMP over SockJs 的应用程序 后端使用 Spring 应用程序在 Tomcat 上的本地主机上运行良好 websockets 但是当我部署到 Heroku 或 AWS Web Socke
  • 如何查找Android蓝牙版本?

    我需要以编程方式在手机上查找 Android 蓝牙版本 有人可以提示我如何做到这一点吗 据我所知 我做了很多研究 无法查明您的 Android 蓝牙设备的硬件版本 4 0 4 2 5 0 有些人声称他们有一个可以做到这一点的应用程序 但我从
  • 如何查看预处理后包含文件的实际顺序?

    我有一个 cpp 文件 其中包含一些头文件 这些头文件也可能包含其他头文件 包含防护已就位 以防止包含同一文件两次 知道每个文件只包含一次 有没有办法确定包含所有标头的最终顺序 I tried gcc E获取预处理器输出 但生成的代码似乎无
  • Spring 带有 Query Dsl 自定义绑定和或操作不起作用

    我有以下要求查询 文章 category 厨房 category sports 此查询无需自定义绑定即可工作 它会给我所有厨房和体育文章作为响应 它正在以某种方式进行 或 运算 但我需要自定义绑定 因为我需要忽略大小写 现在我正在使用这个自
  • foreach循环php中的总和值[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 foreach group as key gt val
  • Python创建条形图比较2组数据

    我有一个带有 2 条形图的笔记本 一个是冬季数据 一个是夏季数据 我计算了所有犯罪的总数 并使用代码将它们绘制在条形图中 ax summer crime type value counts plot kind bar plt show 其中
  • pre-commit.com:.pre-commit-config.yaml 和requirements.txt 中的版本相同

    我想在中使用完全相同版本的 flake8requirements txt and in pre commit config yaml 为了避免冗余 我想在我的存储库中保留 flake8 的版本号一次 pre commit com可以从中读取
  • 为 Python 项目添加 .gitignore 文件的最佳实践? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在尝试收集一些默认设置 我意识到我没有标准的一件事是 gitignore 文件 有一个很棒的线程显示了适用于 Visual Studio 项目的良好 gitignore 但我没有看到很
  • 使用 git 在文件的特定行上查找令牌的第一个引入

    假设我有一个文件 A cpp 我注意到该文件的第 15 行有一个错误 假设错误是函数上的 const 该函数返回指向成员变量的指针 这意味着在函数上使用 const 在技术上是正确的 但在语义上是错误的 我想与进行更改的作者讨论语义 使用
  • ng-repeat 完成后调用函数

    我想要实现的基本上是一个 on ng 重复完成渲染 处理程序 我能够检测到它何时完成 但我不知道如何从中触发函数 检查小提琴 http jsfiddle net paulocoelho BsMqq 3 JS var module angul
  • 在代码隐藏中模拟用户

    我想在代码中模拟特定用户以在远程计算机上执行一些文件操作 我遇到的问题是我无法让模拟工作 我正在使用此处找到的 Microsoft 文章中的代码 如何在 ASP NET 应用程序中实现模拟 我想要有关如何 在哪里开始调试过程的指导 这是我的
  • OWIN Cookie 与 FormsAuthentication

    与 Forms Authentication 基于 cookie 的身份验证相比 使用基于 OWIN cookie 的身份验证来开发 MVC Web 应用程序有什么主要优势吗 我问的原因是我不会使用任何基于实体框架的挂钩进行 OWIN 身份
  • Windows 服务和桌面应用程序之间的通信

    我想在 Windows 7 上的 Windows 服务和桌面应用程序之间创建通信 我读到命名管道是两个进程之间通信的一种方式 我可以将它们用于我的目的吗 确保您可以使用命名管道 WCF 许多其他 IPC 方法 有关堆栈溢出问题中的命名管道示
  • 在 Three.js 着色器中使用灯光

    我正在尝试从 Three js 中的着色器访问场景的灯光 这个问题几乎是重复的Three js ShaderMaterial 灯光问题但对该问题的评论并不能帮助我解决问题 这是顶点着色器 if NUM DIR LIGHTS gt 0 str