gpt4 book ai didi

javascript - Three.js 纹理在 shaderMaterial

转载 作者:行者123 更新时间:2023-11-30 16:31:37 28 4
gpt4 key购买 nike

我无法将纹理加载到我的着色器 Material ,我看到的只是黑点。这是我的 shader.js

THREE.ShaderLib['cloud'] = {

uniforms: {
texture: { type: "t", value: THREE.ImageUtils.loadTexture("img/cloud.png") }
},

vertexShader: [
"varying vec2 vUv;",
"void main() {",
"vUv = uv;",
"gl_PointSize = 8.0;",
"gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);",
"}",
].join("\n"),

fragmentShader: [
"varying vec2 vUv;",
"uniform sampler2D texture;",
"void main() {",
"gl_FragColor = texture2D(texture, vUv);",
"}",
].join("\n")
};

这就是我尝试加载和使用它的方式:

var cloudShader = THREE.ShaderLib["cloud"];
var uniforms = THREE.UniformsUtils.clone(cloudShader.uniforms);

var texture = THREE.ImageUtils.loadTexture("img/cloud.png", undefined, function () {

uniforms.texture.value = texture;
texture.needsUpdate = true;

var _material = new THREE.ShaderMaterial({
fragmentShader: cloudShader.fragmentShader,
vertexShader: cloudShader.vertexShader,
uniforms: uniforms
});
_material.uniforms.texture.value.needsUpdate = true;
var _geometry = new THREE.Geometry();
_geometry.vertices.push(new THREE.Vector3(0, 0, 0));
var _mesh = new THREE.Points(_geometry, _material);
scene.add(_mesh);

});

如您所见,我尝试在创建 Material 之前和之后两次设置更新纹理值。这是一个非常简单的例子,但我不知道为什么它不能按照我使用的方式工作。调试控制台中没有错误。

我正在使用 THREE.Points 类,因为我正在使用它来生成云作为粒子组。

在此先感谢您的帮助。

最佳答案

所以,一段时间后,我找到了针对这个特定问题的解决方案。我需要将我的制服从 shader.js 直接移动到我正在创建着色器 Material 的地方。这足以解决我的纹理问题,但我仍然不知道为什么以前的代码不起作用。工作着色器 Material 如下所示:

 var _material = new THREE.ShaderMaterial({
fragmentShader: cloudShader.fragmentShader,
vertexShader: cloudShader.vertexShader,
uniforms: uniforms: {
texture: { type: "t", value: THREE.ImageUtils.loadTexture("img/cloud.png") }
},
});

关于javascript - Three.js 纹理在 shaderMaterial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33253812/

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