WebGL / Three.js - 移动相机时,纹理着色的粒子不规则地闪烁

2024-02-07

这是一个jsfiddle http://jsfiddle.net/vko8hzzs/4/我将粒子在使用纹理着色时以及相机移动时“闪烁”的问题放在一起展示。

更新:粒子上不应该发生动画或运动。如果当您在视口上单击并拖动并且粒子闪烁或完全改变颜色时,那么您就会看到问题。这是我在 Firefox 和 chrome、Mac OS 10.9 和 Windows 7 上测试并看到的问题。

粒子不会以任何方式重叠或剪切。如果使用常规着色器对粒子进行动画处理,则不会发生闪烁。只有当粒子使用纹理着色时(在本例中使用 THREE.WebGLRenderTarget),才会出现明显的闪烁。这样做是为了捕获先前的帧并将它们存储在缓冲区中(然后可以以 jsfiddle 示例中未显示的更高级的方式使用)。

实际上,片段着色器似乎可能错误地获取了相邻像素,而不是目标像素,但我不确定 - 这没有多大意义,因为目标坐标仅在 init() 上生成,并且它们之后不要改变。

每个粒子的目标像素坐标作为顶点属性不变地传递到片段着色器 1-1(作为变化但没有变化的值)。

uniform sampler2D colorMap; // The texture being used to color each particle
varying float v_geoX; // x,y coordinates passed as varyings
varying float v_geoY;

void main() {
    // Normally pulling the correct color, but this seems to get confused during camera movement.
    gl_FragColor = texture2D(colorMap, vec2(v_geoX, v_geoY));
}

有人知道如何在不闪烁的情况下做到这一点吗?当我将这种技术应用于更大更快的动画时,问题似乎只会变得更糟。到目前为止我检查过的所有浏览器上都会发生这种情况。


问题是您指向纹素之间的边缘。

这些行

   geoX.push(tx / imageSize);
   geoY.push(1.0 - ty / imageSize); // flip y

计算纹理像素之间的精确边缘。我的意思是说imageSize是 4 个纹素,可以说tx and ty从...来0 to 3

你的纹理坐标是这样的

   0    0.25  0.5   0.75       <- texture coords you're computing
   |     |     |     |     
   V     V     V     V     
   +-----+-----+-----+-----+
   |     |     |     |     |
   |     |     |     |     |   <- texels
   +-----+-----+-----+-----+

但你想要的纹理坐标是这样的

     0.125 0.375 0.625 0.875   
      |     |     |     |   
      V     V     V     V  
   +-----+-----+-----+-----+
   |     |     |     |     |
   |     |     |     |     |   <- texels
   +-----+-----+-----+-----+

最简单的修复方法是添加 1/2 个纹理元素

   geoX.push(tx / imageSize       + 0.5 / imageSize);
   geoY.push(1.0 - ty / imageSize + 0.5 / imageSize); // flip y

问题在于您的数学直接指向纹素之间的舍入错误使其选择一个纹素或另一个。选择纹素的中心可以解决这个问题。如果图像的相邻纹理像素之间没有如此大的对比度,您可能不会注意到。

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

WebGL / Three.js - 移动相机时,纹理着色的粒子不规则地闪烁 的相关文章

  • 使用 javascript 更改 div 颜色

    div style height 20px width 100 background color 000000 div br
  • 通过pm2运行node.js,但经常重新启动:通过信号[SIGINT]以代码[0]退出

    我试图在我的系统上运行 node js 但遇到了这个问题 2016 06 01 20 46 28 App app with id 13 and pid 12633 exited with code 0 via signal SIGINT 2
  • 在 Javascript 中获取第一个数字出现后的子字符串

    我正在尝试提取第一个数字之后 并包括 的字符 ABC 123SD gt 123SD 123 gt 123 123SD gt 123SD ABC gt 我当前的解决方案如下 var string1 ABC 123SD var firstDig
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • 限制可选 DOM 复选框

    我试图限制用户可以选择的复选框数量 这些复选框是为数组中的每个项目生成的 DOM 输入对象 我目前对此没有运气 因此非常感谢任何帮助 谢谢 在这里小提琴 http jsfiddle net vVxM2 222 http jsfiddle n
  • javascript jquery 使用脚本更改脚本的src

    我有一个 JavaScript 脚本 它有一个 src 元素 这个 src 是一个 url 我想使用 javascript 更改它 一次更改为其他内容 或者动态创建它 使用 javascript jquery 动态创建脚本元素的最佳方法是什
  • 无法实例化模块 [$injector:unpr] 未知提供程序:$routeProvider

    我从 AngularJS 升级时收到此错误1 0 7 to 1 2 0rc1 ngRoute 模块不再是核心的一部分angular js文件 如果您继续使用 routeProvider 那么您现在需要包括angular route js在你
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • jQM / jquery-collagePlus 使用问题

    我正在使用 jQM 构建应用程序 并且尝试使用 jquery collagePlus http ed lea github io jquery collagePlus http ed lea github io jquery collage
  • ToggleClass 动画 jQuery?

    我的网站上有一个部分 当用户单击时我希望它展开 我正在使用 jQuerytoggleClass为了这 expandable function e e preventDefault this closest article toggleCla
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 在管道中重用变量的功能方式

    在 javascript 和 typescript 中与 Ramda 一起使用函数式编程 我经常发现自己编写如下代码 const myFun c gt const myId c id const value pipe getAnotherO
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • IE 中的每个 JavaScript 支持?

    我有这个代码
  • JavaScript:测试与执行

    我想知道检查字符串 例如邮件 密码等 的最佳方法是什么 i exec a vs i test a exec返回值 test true test 1 way var mail req body mail if check mail exec

随机推荐

  • 遍历networkx中图的级别顺序

    我正在尝试转换DiGraph成n叉树并按层序或BFS显示节点 我的树与此类似 但更大 为简单起见 使用以下示例 G networkx DiGraph G add edges from n n1 n n2 n n3 G add edges f
  • 行未在 ios 上使用 xamarin 表单调整大小

    我在 xamarin 表单中使用列表视图 它将在行点击时展开行 并在展开行时折叠行 该逻辑在 android 中工作正常 但我在 IOS 上遇到问题 有没有办法调整高度大小IOS 提前致谢 相反 请使用堆栈布局并点击即可切换堆栈布局的可见性
  • 目录价格规则 以编程方式“应用规则”

    我以编程方式创建了一个目录价格规则 它工作正常 所以我的问题是 我需要使用管理员登录并需要单击按钮 应用规则 否则 折扣不适用于 magento 商店 所以我需要以编程方式 应用规则 但我不知道该怎么做 任何帮助或建议将不胜感激 You c
  • 将 UIViewController 推到 UITabBar 之上

    我有一个UIViewController called ListVC ListVC has a UITabBar用户可以使用它来切换选项卡 它也有UINavigationController In ListVC我有一个按钮 我想推送一个名为
  • cassandra 中列的默认排序顺序?

    我正在阅读教程 其中讲师说行中列的默认顺序是UTF8 tye 但他没有进一步谈及这一点 我不明白这是什么意思 特别是如果我的列是不同类型的 例如int timestamp etc 另外 我如何将列上的排序顺序指定为 UTF8 类型 以外的其
  • 如何在每个 as (ember 1.11 beta3) 中设置 itemController?

    我想尝试使用 each content as product index index each 但我的应用程序有 itemContoller 如下所示 each product in content itemController produ
  • 最大执行时间错误处理

    我有一个脚本有时会给出最大执行时间达到错误 这是正常现象 不是问题 问题是在这种情况下我会写出具体的错误消息 我该怎么做呢 function say goodbye if connection aborted Perform some ac
  • 如何在 iOS PhoneGap 应用程序中显示自定义启动屏幕旋转器(即白色旋转器)?

    是否可以将默认启动屏幕旋转器颜色更改为白色 将其用于 Spinner hzactivityindicatorview https www cocoacontrols com controls hzactivityindicatorview
  • 如何将 matplotlib 动画转换为 HTML5

    下面是 matplotlib 动画图的代码和here https matplotlib org api as gen matplotlib animation Animation html就是如何保存它 from IPython displ
  • Webpack - 更新 HTML 以包含最新的 [hashed] 包的最佳方式

    我正在使用 webpack 生成散列包文件名 假设我使用静态 HTML CSS 和 JS 自动更新的最佳方法是什么index html指向最新的捆绑包 例如 update to no change 每次有新的捆绑包版本可用时都会自动进行 令
  • 显示12小时和24小时时间

    我想制作一个显示当前时间的网页 当点击 12小时制 按钮时 div区域将显示12小时制的时间 当点击 24小时制 按钮时 分区区域中的时间将以24小时制显示 目前 单击这些按钮时不会发生任何事情 帮助 HTML div div br
  • 如何使用 Python 的 zipfile 模块设置 ZIP 文件中文件的权限(属性)?

    当我从使用 Python 创建的 ZIP 文件中提取文件时zipfile http docs python org library zipfile html模块 所有文件都是不可写 只读等 该文件是在 Linux 和 Python 2 5
  • 用户登录后重定向

    我对 Angular 还很陌生 现在我只是想按照我的意愿设置所有路线并使其工作 Setup 当用户导航到某些页面时 settings对于此示例 应用程序应检查是否有用户已登录 如果有则照常继续 否则用户应该转到登录页面 login 我想要什
  • JQuery 方法和 DOM 属性

    我很困惑何时可以使用 DOM 属性以及何时可以在 Jquery 对象上使用 Jquery 方法 比如说 我使用选择器 var elemSel myDiv find id select 此时 elemSel 是一个 jquery 对象 我将其
  • 无法获取文件创建日期?

    在我的应用程序中 我创建一个目录 然后以下代码起作用 NSDictionary fileAttributes fileManager fileAttributesAtPath trackDirectory traverseLink YES
  • 如何从 lldb 执行一个块(由指针标识)

    我在 iOS 模拟器的 lldb 调试器中 并且有一个块的地址 我想尝试执行它 我尝试了想到的第一件事 见下文 但它不起作用 有没有办法做到这一点 lldb po 0x2c7140 int 2 2912576 lt NSGlobalBloc
  • 用 Jackson 映射一个可以有不同类型的 JSON 字段?

    我从 Web 服务获取 JSON 并且无法影响 JSON 格式 下面的 JSON 代码只是一个示例来说明问题 场cars可以是一个包含以下内容的对象Car对象 也可以是空字符串 如果我可以更改网络服务 我会将空字符串更改为空对象 例如 ca
  • 在 codeigniter 中将数组从控制器传递到模型

    我正在 Codeigniter 中做一个项目 这里我使用 imap 从我的 gmail id 中获取最新的 10 封邮件 这里我想获取所获取邮件的 from 字段 并且我想检查所获取邮件的 from 字段是否在我的数据库中table cli
  • 使用 Devise 的 RoR 中的会话超时消息

    我有一个使用设备保护的应用程序 会话超时为 30 分钟 使用设计 正常导航一切正常 如果用户在超时时单击链接 他们会被重定向回登录屏幕 并显示一条消息 您的会话已过期 请重新登录以继续 非常好 不过我在很多地方都有ajax 如果会话超时并且
  • WebGL / Three.js - 移动相机时,纹理着色的粒子不规则地闪烁

    这是一个jsfiddle http jsfiddle net vko8hzzs 4 我将粒子在使用纹理着色时以及相机移动时 闪烁 的问题放在一起展示 更新 粒子上不应该发生动画或运动 如果当您在视口上单击并拖动并且粒子闪烁或完全改变颜色时