three.js材质图无法获取webglTexture句柄

时间:2017-05-25 07:16:44

标签: javascript three.js

创建材料

 var material = new THREE.MeshBasicMaterial();
          material.map = new THREE.Texture(canvas);
          material.transparent = true;
          material.side = THREE.DoubleSide,
          material.opacity = 1;
          material.map.minFilter = THREE.LinearFilter;
          material.map.magFilter = THREE.LinearFilter;
          material.map.generateMipmaps = true;
          material.map.needsUpdate = true;

获取物料目标

var handle = material.map.__webglTexture;

问题描述

但是为什么句柄总是返回undefined,在r69版本之前可以得到句柄返回WebGLTexture但是r85版本不能让我不明白谢谢:))

2 个答案:

答案 0 :(得分:2)

在内部,WebGL属性现在与公共对象分离,因此三个纹理不知道它的__webglTexture对应物。 WebGL渲染器在内部将此信息存储在属性对象(属性包)中。

这样可以实现更好的引擎设计,但是由于它使THREE功能的自定义扩展更难实现(如您所知),因此库作者已经暴露了这些内部属性。

以下是如何访问给定THREE纹理的__webglTexture:

var props = renderer.properties.get(material.map);
var handle = props.__webglTexture;

答案 1 :(得分:0)

Three.js为其实体lazily创建WebGL对象,因此在查询__webglTexture之前,您可能需要至少使用一次这些材质进行渲染。它也可能仍然不是一个好主意,因为它不是一个记录的属性(__是它的名字提示:))并且可能会在将来的版本中进行更改。