Three.js - 在单个点云中使用多个纹理

2023-11-26

我正在尝试使用 ShaderMaterial 在单个点云中使用多个纹理。我将纹理数组与纹理索引属性一起传递给着色器,并选择要在片段着色器中使用的适当纹理。

相关设置代码:

var particleCount = 100;

var uniforms = {
    textures: {
        type: 'tv',
        value: this.getTextures()
    }
};

var attributes = {
    texIndex: {
        type: 'f',
        value: []
    },
    color: {
        type: 'c',
        value: []
    },
};

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

var geometry = new THREE.Geometry();

for (var i = 0; i < particleCount; i++) {
    geometry.vertices.push(new THREE.Vector3(
    (Math.random() - 0.5) * 50, (Math.random() - 0.5) * 50, (Math.random() - 0.5) * 50));
    attributes.texIndex.value.push(Math.random() * 3 | 0);
    attributes.color.value.push(new THREE.Color(0xffffff));
}

var particles = new THREE.PointCloud(geometry, material);
particles.sortParticles = true;
this.container.add(particles);

顶点着色器:

attribute vec3 color;
attribute float texIndex;

varying vec3 vColor;
varying float vTexIndex;

void main() {
    vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);

    vColor = color;
    vTexIndex = texIndex;

    gl_PointSize = 50.0;
    gl_Position = projectionMatrix * mvPosition;
}

片段着色器:

uniform sampler2D textures[3];

varying vec3 vColor;
varying float vTexIndex;

void main() {
    vec4 startColor = vec4(vColor, 1.0);
    vec4 finalColor;

    if (vTexIndex == 0.0) {
        finalColor = texture2D(textures[0], gl_PointCoord);
    } else if (vTexIndex == 1.0) {
        finalColor = texture2D(textures[1], gl_PointCoord);
    } else if (vTexIndex == 2.0) {
        finalColor = texture2D(textures[2], gl_PointCoord);
    }

    gl_FragColor = startColor * finalColor;
}

问题是某些点(使用高于 0 的纹理索引的点)由于某种原因而闪烁并且无法弄清楚。其他尝试似乎也在纹理之间闪烁,而不是在不透明度之间闪烁。

可以在以下位置查看此示例:http://jsfiddle.net/6qrubbk6/4/.

我已经放弃了多个项目,但我很想找到一个一劳永逸的解决方案。任何帮助是极大的赞赏。

Edit:检查 vTexIndex 是否

if (vTexIndex < 0.5) {
    finalColor = texture2D(textures[0], gl_PointCoord);
} else if (vTexIndex < 1.5) {
    finalColor = texture2D(textures[1], gl_PointCoord);
} else if (vTexIndex < 2.5) {
    finalColor = texture2D(textures[2], gl_PointCoord);
}

正如这里所见:http://jsfiddle.net/6qrubbk6/5/


您还可以将 vTexIndex 转换为 int。

int textureIndex = int(vTexIndex + 0.5);

if (textureIndex == 0) {
    finalColor = texture2D(textures[0], gl_PointCoord);
} else if (textureIndex == 1) {
    finalColor = texture2D(textures[1], gl_PointCoord);
} else if (textureIndex == 2) {
    finalColor = texture2D(textures[2], gl_PointCoord);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Three.js - 在单个点云中使用多个纹理 的相关文章

  • jQuery mobile 中的文本区域高度和宽度?

    我修复了 jQuery mobile 中文本区域元素的高度 并且在纵向中得到了完美的高度和宽度 但在横向中宽度没有放大 谁能帮我 提前致谢 HTML
  • 在 HTML5 Javascript 中将 BlobBuilder 转换为字符串

    function blobToString blob var reader new FileReader var d reader onloadend function d callback reader result console lo
  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • 从函数返回函数的目的是什么?

    阅读一些遗留代码 发现 A prototype setSize function var v1 new Vector2 return function size var halfSize v1 copy size multiplyScala
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 通过 JavaScript 获取表单名称

    我有一个简单的问题 但我在网上找不到好的解决方案 我有这个 HTML 代码
  • 想要动态处理与分页相关的页码显示:ReactJS

    我有一些分页逻辑工作得很好 唯一的问题是我只能让它显示并固定数量的页面可供选择 现在我已经把它放到了 5 页 但我希望它能够根据总记录动态更改 假设我有 100 条记录 每页限制为 10 条 将有 10 页 现在我只能让它以这种方式显示 第
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 如何使用角度材料在具有可扩展行的表格中创建嵌套垫表

    我有以下数据 id c9d5ab1a subdomain wing domain aircraft part id c9d5ab1a info mimetype application json info dependent parent
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 在 IOS 10 beta 7 (Safari) 中使用 webGL 渲染视频 - 显示奇怪的紫色

    我正在 webGL 中渲染视频 通过传递Video对象作为源texImage2D 这在所有平台 支持 webGL 中都很好用 但是在 IOS 10 beta 7 的 Safari 中 它以奇怪的颜色渲染 在以前的 IOS 版本中看起来还不错
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐

  • getopts 的可选选项参数

    while getopts hd R arg do case arg in h echo usage d dir OPTARG R if OPTARG 0 9 then level OPTARG else level 1 fi echo W
  • System.Web.UI 在控制台应用程序中不可用?

    我正在尝试编写一个快速控制台应用程序 将数据输出到 HTML 文件 但是我在访问 System Web UI 命名空间时遇到问题 将 System Web 添加到我的引用中会在解决方案资源管理器中的引用名称顶部放置一个警告图标 并且 Sys
  • SharedElement和自定义EnterTransition导致内存泄漏

    拥有共享元素动画和自定义输入动画会导致活动泄漏 知道可能是什么原因吗 09 21 16 19 31 007 28269 31066 com sample android D LeakCanary com feeln android acti
  • Java Hibernate 映射异常! (无法确定类型:java.util.Map)

    我创建了一个名为 Movie 的类 其中包含以下字段 Id GeneratedValue private Long id private String name ElementCollection targetClass String cl
  • 递归解析 JSON

    我有一个使用 Python 创建的大型 JSON 对象 现在需要在网页上显示该信息 我的问题是它的大小 里面有嵌套的数组和对象 并且在点上有几层深 我编写了一个极其不优雅 且有缺陷 的 JavaScript 函数来提取数据 但这对我来说似乎
  • 在运行时更改区域设置时刷新(重新创建)返回堆栈中的活动

    我有一个活动说ActivityMain从这个活动我转移到另一个名为ActivitySettings在设置活动中 我通过单击按钮更改应用程序区域设置 并使用重新创建实现了当前活动中所需的更改 但是当我按回时 我的 ActivityMain 将
  • 如何使用 LOAD DATA INFILE 将选定的列从 CSV 文件插入到 MySQL 数据库

    我有一个包含 10 列的 CSV 文件 我只想从该文件中选择一些列并使用以下命令将它们加载到 MySQL 数据库中LOAD DATA INFILE命令 将数据加载到 MySQL 中的表中并指定列 LOAD DATA LOCAL INFILE
  • 将Xcode项目推送到GitHub时的身份验证问题

    当我想通过 Xcode 将项目推送到 GitHub 时遇到了问题 注意 我这里说的不是终端 我必须为我团队中的艺术家设置 Xcode 环境 终端对他不起作用 我一开始尝试使用 HTTPS 地址 https github com zeroli
  • 识别应用程序是否存在,如果不存在则转到 Play 商店

    有点傻 我想知道的是 如果设备上不存在应用程序 是否可以进入游戏商店下载它 我知道我需要将此代码放入 Intent i getPackageManager getLaunchIntentForPackage com package addr
  • Safari 错误 kCFErrorDomainWinSock:10054

    我在 Windows 上安装了 safari 版本 5 1 7 并在 https windows 服务器上托管了 js 文件 该网站工作正常 但我无法在 Safari 浏览器中查看 javascript 文件 现在问题已经解决了 该问题与
  • Android Eclipse 模拟器问题:将 WVGA(hdpi) 作为 mdpi 屏幕运行

    我遇到的问题是 当我运行 FWVGA 或 WVGA 大小的模拟器时 它有时会以 MDPI 大小而不是 HDPI 运行 这是一个带图片的例子 http wonton games blogspot com 2010 06 emulator pr
  • 单页应用程序和 RESTful API

    真正的 RESTful API 利用超媒体 以便客户端仅依赖服务器提供的动态超媒体来浏览应用程序 该概念称为HATEOAS 这个概念很容易适用于 Web 应用程序 但如何将其应用到单页应用程序 因为 SPA 通常在内部管理其状态 就导航而言
  • 为什么 C++ 标准库中没有 std::thread_pool ?

    我觉得奇怪的是 尽管有大量的多线程构造 但该标准却缺少线程池类 什么原因可能会阻止委员会将其添加到标准中 C 与 C 一样 旨在为程序员提供尽可能多的控制权 C 中的几乎所有内容都是一个非常简单的包装器 这使程序员可以自由地实现他们想要的任
  • Oracle MIN 作为分析函数 - ORDER BY 的奇怪行为?

    这种特殊情况是从一个示例中提炼出来的 在该示例中 程序员假设对于两次装运到罐车的货物 第 1 行将首先装载 我更正了这个问题 以允许以任何顺序执行加载 但是 我发现MIN OVER PARTITION BY 允许ORDER BY在 Orac
  • 为什么 C++ 不能用 LR(1) 解析器解析?

    我正在阅读有关解析器和解析器生成器的内容 并在维基百科的 LR 解析页面中找到了此声明 许多编程语言都可以使用 LR 解析器的某些变体进行解析 一个值得注意的例外是 C 为什么会这样呢 C 的什么特殊属性导致它无法用 LR 解析器进行解析
  • 获取一个 python docker 容器与 redis docker 容器交互

    我对 docker redis 和任何类型的网络都很陌生 至少我知道 python 首先 我已经弄清楚如何获取 redis docker 映像并在 docker 容器中运行它 docker run name some redis d red
  • SSRS网页错误状态代码500

    已经部署了许多引用相同视图的报表部分 但是其中一个无法在服务器上运行 我认为这可能是由于参数到位 其中包含各种字符 这是我收到的错误消息 有谁对如何解决这个问题有任何建议 Webpage error details User Agent M
  • Angular - 如何以百分比形式设置输入字段格式,但在编辑时删除百分比?

    我试图找到一种方法 在初始页面加载时以百分比 例如 97 52 显示 html 输入字段 通过角度服务获取到后端的数据 即可观察 订阅 但也有此输入字段松散 当我编辑它时 即引发 DOM 焦点 事件时 它是百分比格式 格式数据绑定到模型 我
  • 发送“var_dump”到 FireBug 控制台

    如你所知var dump 除了价值展示其数据类型 and length 有什么方法可以将其输出记录到火虫控制台 I tried FirePHP and 消防记录器但两者都只输出变量值 有时甚至是不正确的变量值 也许你需要的是这样的 func
  • Three.js - 在单个点云中使用多个纹理

    我正在尝试使用 ShaderMaterial 在单个点云中使用多个纹理 我将纹理数组与纹理索引属性一起传递给着色器 并选择要在片段着色器中使用的适当纹理 相关设置代码 var particleCount 100 var uniforms t