gpt4 book ai didi

javascript - 将 vec2 数组传递给 THREE.js 中的着色器

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:24:17 24 4
gpt4 key购买 nike

我已经在网上搜索了一段时间,但还没有找到正确的答案。我找到了 THREE.js 使用的统一类型列表,我认为下面的代码应该是正确的。在最后一行,我定义了一个统一的 Vector2 数组。

uniforms: {
"center": { type: "v2", value: new THREE.Vector2( 0.5, 0.5 ) },
"aspectRatio": { type: "f", value: null },
"radius": { type: "f", value: 0.1 },
"pointList": { type: "v2v", value: [] },
},

在我的 js 脚本中,我按如下方式传递了这个数组。我想这也应该有效:

// Add effects
effect = new THREE.ShaderPass( THREE.MetaBalls2D );
effect.renderToScreen = true;
effect.uniforms[ 'aspectRatio' ].value = window.innerWidth/window.innerHeight;
effect.uniforms[ 'pointList' ].value = pointList //is an array of THREE.Vector2;
composer.addPass( effect );

我现在的问题是,如何从片段着色器访问这个统一变量(在本例中为 pointList)?

最佳答案

你应该知道你的数组的最大大小是多少,所以假设你有一个数组:

var myVec2Array = [
new THREE.Vector2(),
new THREE.Vector2(),
new THREE.Vector2(),
...
]

当你初始化一个着色器时,你可以按照这些思路做一些事情:

var myShader = new THREE.ShaderMaterial({
uniforms:{
_myVec2UniformArray:{
type:'v2v',
value:myVec2Array
}
},
vertexShader:
'#define ARRAYMAX '+ myVec2Array.length +'\n' + myVertexShader
}

在 myVertexShader 中你会初始化:

uniform vec2 _myVec2UniformArray[ARRAYMAX];

不一定要填充数组,但是可以在js中暴露ARRAYMAX,用它来管理两端的数组。

关于javascript - 将 vec2 数组传递给 THREE.js 中的着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25249190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com