【问题标题】:Cannot load Uint8Array image by DataTexture?无法通过 DataTexture 加载 Uint8Array 图像?
【发布时间】:2015-06-07 04:59:26
【问题描述】:

我正在使用 DataTexture 加载 Uint8Array Image (download link),这里是我的代码:

var map = new THREE.DataTexture( data, 128, 128, THREE.RGBFormat );
map.needsUpdate = true;
material.needsUpdate = true;
material.map = map; 

但是纹理是黑色的并且收到这些错误:

在 Firefox 中:

Error: WebGL: texImage2D: not enough data for operation (need 49152, have 5210)
Error: WebGL: generateMipmap: Level zero of texture is not defined.

在 Chrome 中:

WebGL: INVALID_OPERATION: texImage2D: ArrayBufferView not big enough for request

有什么建议可以让它工作吗?

谢谢。

(我尝试将 Uint8Array Image 转换为 Data64 并加载到漫反射贴图 ok,但我不想使用这种方式,因为我试图从 Chrome F12 的网络选项卡中隐藏纹理,使用 data64 将显示纹理...)

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    我看到 three.js 在内部调用了 THREE.Texture 并且 DataTexture 是它的包装器。其原因可能是数据已损坏,因为纹理 3 会从 data64 获得某些东西,这就是您使用 data64 获得正确显示的原因。

    【讨论】:

    • 我了解您需要将图像数据转换为 Uint8Array。你可以这样做: function getData(image) { var canvas = document.createElement('canvas');画布.宽度=图像.宽度;画布.高度=图像.高度; var context = canvas.getContext('2d'); context.drawImage(图像, 0, 0); return new Uint8Array(context.getImageData(0, 0, image.width, image.height).data); } 来源:stackoverflow.com/questions/28943424/… 没有尝试过我的自我,但它似乎应该可以工作。如有疑问请告诉我
    • 您可以托管链接或 jsFiddle 吗?意味着这个看起来Uint8数组数据不正确。需要进行更多调试,因此您可以共享 sn-p,因为目前看起来很通用。创建了来自图形的 Texture2D 调用,您是否尝试过使用颜色并写下相同的自定义着色器,这似乎是纹理问题。而不是 texture2D 调用使 vec4(r,g,b,a) 传递统一的 r,g,b 和相应的 a
    • var Uint8Image = THREE.ImageUtils.generateDataTexture(1024,1024, new THREE.Color(0xff0000)) 将此行复制到文件 lin 136 上,您将看到红色模型。这确认我们的 datatexture uint8 已损坏,并且我们没有从外部库 pngdrive 获得预期的结果。我也在做一件事,很快就会更新你的图片
    • 您的问题也可以通过图像解决:) 这是 pngdrive uint8 数据的问题,您所做的是使用 var gl = renderer.getContext() 然后将图像数据传递给 gl 像上面的函数 getdata( ) (或者复制上面链接中的 getdata() )然后从相同的地方制作 THREE.DataTexture 然后将此纹理传递给您的材质,您会看到解决方案。解决方案看起来像这样 image.onload= function(){ datatexture =getData(image) var image = THREE.DataTexture(datatexture,image.width,image.height) varUint8Image=image (line 136) aetc} 这解决了如果有任何问题,请 ping 我
    • 非常抱歉,我在移动设备上,无法在浏览器上上传文件:(解决方案很简单,只需按照我的上一条指令,我在获得桌面浏览器时更新包。同时我在这里准备 sn-p
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 2018-06-08
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多