【问题标题】:Three.js: Custom attributes on GeometryThree.js:几何上的自定义属性
【发布时间】:2017-01-05 17:16:16
【问题描述】:

我使用 Three 已经有一段时间了,但在过去的几天里我有点卡住了。我正在尝试将自定义属性传递给我想经常更新的着色器。着色器作为 ShaderMaterial 添加到我的网格中。不过,我遇到的问题是我注意到几个版本之前,三重修改了它处理属性的方式。不是将它们放在材料中,而是将它们放在几何图形上。但据我所知,普通的几何图形无法处理自定义属性,这让我处于糟糕的境地,因为我非常依赖它提供的所有便利。我曾尝试使用 BufferGeometry,但是当我无法将我的 UV 贴图(我不断更新)正确地放到它上面时,这最终导致了混乱和沮丧。如果您想要自定义属性或者(尽管不太理想)一种将我的 UV 正确应用到它的方法,是否有任何替代 BufferGeometry 方法的方法?普通几何图形不能有自定义属性有什么原因吗?

【问题讨论】:

    标签: javascript three.js shader


    【解决方案1】:

    您可以将几何体转换为缓冲区几何体,然后设置其自定义属性,从而保持两全其美。这将为您省去处理缓冲几何 uvs 的麻烦,正如您似乎在问的那样。应该通过 uvs。

    像这样: var bufferGeometry = new THREE.BufferGeometry().fromGeometry( geometry );

    【讨论】:

    • 我实际上并不知道 BufferGeometry 还有一个 fromGeometry 函数。我认为它是普通几何独有的。无论如何,我确实忘记提及了,但我几乎在每次渲染时都会更新我的 UV,所以我认为这会表现得不够好。
    • 您也可以即时更新 BufferGeometry 的 UV。 Check this fiddle out 我从 BoxGeometry 创建了一个立方体,然后我用它从中获取了一个 BufferGeometry。在 animate() 函数中:编写 UV 更新序列并将其应用于正确的顶点。不要忘记更新 uvs。有帮助吗?
    • 虽然这很难实现,但我最终设法弄清楚阵列是如何组合在一起的,并由此设法遍历所有“面”,分配它们适当的 UV,产生合理的结果。
    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 2012-10-01
    • 1970-01-01
    • 2017-03-28
    • 2015-09-26
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多