three.js:在着色器材质中使用纹理,该材质添加到由对象加载器加载的对象中
three.js: use texture in shader material added to object loaded by object loader
当我试图在对象加载器THREE.OBJLoader
加载的混合器对象中使用的着色器材质中使用纹理时,我遇到了一个问题。
这个简单的代码运行良好,它正在加载一个纹理并将其应用于加载的对象。
var manager = new THREE.LoadingManager();
var texture = new THREE.Texture();
var imageLoader = new THREE.ImageLoader(manager);
var objLoader = new THREE.OBJLoader(manager);
imageLoader.load("texture.png", function (image) {
texture.image = image;
texture.needsUpdate = true;
});
var material = new THREE.MeshBasicMaterial({ map: texture});
objLoader.load("blenderObject.obj", function (object) {
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.material = material;
}
});
scene.add(object);
但是我想使用我的ShaderMaterial
而不是MeshBasicMaterial
。此着色器材质与我在项目中使用的其他对象配合良好。这是我的着色器材质的初始化:
var uniforms = {
texture: { type: "t", value: THREE.ImageUtils.loadTexture("texture.png") },
}
var shader = THREE.ShaderLib["shader"];
var material = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader,
depthTest: true,
});
所以当我使用这个材料而不是MeshBasicMaterial
时,我没有错误,但物体只是全黑的。我想知道在使用THREE.OBJLoader
创建的对象的着色器材质中使用纹理的正确方法是什么。当我将此着色器应用于其他对象时,它的工作方式与应该的完全相同。请提前回答。
创建的所有纹理都是相等的。创建对象的方式没有区别。
代码的问题是,当您指定uniforms
变量时,您的纹理值将为null,因为THREE.ImageUtils.loadTexture()
是异步的。使用THREE.TextureLoader()
的正确方法记录在:http://threejs.org/docs/#Reference/Loaders/TextureLoader
相关文章:
- ThreeJS访问加载的obj模型中的对象
- 正在加载具有相同功能的多个对象
- 如何使用amcharts中的dataloader将对象加载为JSON中的数据字段
- 修改角度阵列对象加载
- 从表单中派生要使用javascript对象加载的图像路径
- 三.js 三的错误.对象加载器
- 将 Json 对象加载到 javascript 中,然后使用字段
- 从本地 json 对象加载数据的灵活网格
- 将本地 JSON 对象加载到网格中的 extjs
- AngularJS - ng-show 在对象加载时显示内容
- three.js:在着色器材质中使用纹理,该材质添加到由对象加载器加载的对象中
- 如何在QueryParse.com之后将所有对象加载到数组中
- 如何使用javascript将Yii2对象加载到输入中
- 如何传递存储中的数组或对象.加载({params:{}})
- 将数据从JSON对象加载到数组中
- 如何获取事件的wordpress's oEmbed对象加载在TinyMCE
- 对象加载在不同的位置每次我刷新页面- Three.js - OBJMTLloader
- 如何从变量,对象加载JSON
- 在THREE.js中取消将对象加载到场景中
- Javascript:如何在没有jQuery或AJAX的情况下将JSON对象加载为文件