如何将Three.js纹理作为“ WebGLTexture”传递给WEBGL代码?

时间:2018-06-28 21:07:19

标签: javascript three.js webgl textures

我试图将Three.js纹理传递给gl.texSubImage WEBGL函数,但出现以下错误:

在Chrome上:

Uncaught TypeError line

在Firefox上:

enter image description here

下面的代码-目标texture2传递给gl.bindTexture波纹管,无法识别。源Texture1是加载了图像的纹理。

我尝试过:Texture2,texture2.image,texture2.image.data, 都具有数据纹理和正常的纹理,并且将图像加载为Texture2。 有什么想法吗?

var gl = renderer.getContext();
var position = new THREE.Vector2(0,0);

renderer.setTexture2D( texture2, 0 ); 

gl.bindTexture(gl.TEXTURE_2D, texture2.image.data); //<<< problem

gl.texSubImage2D( gl.TEXTURE_2D, 
                  0, 
                  position.x, 
                  position.y, 
                  gl.RGB, 
                  gl.UNSIGNED_BYTE, 
                  texture1.image);

1 个答案:

答案 0 :(得分:1)

我建议您看看WebGLRenderer.copyTextureToTexture()。它在内部使用texSubImage。还有一个示例显示了该方法的用法:

https://threejs.org/examples/webgl_materials_texture_partialupdate.html

BTW:在image.data中使用bindTexture无效,因为API调用期望将WebGLTexture对象作为第二个参数。您可以访问像这样的原始WebGLTexture对象。

var textureProperties = renderer.properties.get( texture );
console.log( textureProperties.__webglTexture );