Javascript 从DOM图像加载WebGL纹理时,如何判断它是否具有alpha通道?
当直接从DOM图像加载WebGL纹理时,如何判断图像是否具有alpha通道?除了根据文件名猜测之外,是否还有其他原因(例如,“contains.PNG可能是RGBA,否则为RGB”)。DOM图像中有宽度和高度,但我看不出它是什么格式。i、 e:Javascript 从DOM图像加载WebGL纹理时,如何判断它是否具有alpha通道?,javascript,dom,webgl,Javascript,Dom,Webgl,当直接从DOM图像加载WebGL纹理时,如何判断图像是否具有alpha通道?除了根据文件名猜测之外,是否还有其他原因(例如,“contains.PNG可能是RGBA,否则为RGB”)。DOM图像中有宽度和高度,但我看不出它是什么格式。i、 e: const img = await loadDOMImage(url); const format = gl.RGBA; //Does this always need to be RGBA? I'm wasting space in m
const img = await loadDOMImage(url);
const format = gl.RGBA; //Does this always need to be RGBA? I'm wasting space in most cases where its only RGB
const internalFormat = gl.RGBA;
const type = gl.UNSIGNED_BYTE; //This is guaranteed to be correct, right? No HDR formats supported by the DOM?
gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, format, type, img);
我的加载函数如下所示:
async loadDOMImage(url) {
return new Promise(
(resolve, reject)=>{
const img = new Image();
img.crossOrigin = 'anonymous';
img.addEventListener('load', function() {
resolve(img);
}, false);
img.addEventListener('error', function(err) {
reject(err);
}, false);
img.src = uri;
}
);
}
如何判断图像是否具有alpha通道
你不能。你只能猜测
texImage2D
获取传入的图像,并将其转换为类型
和格式
。然后,它将转换后的数据传递给GPU
DOM不支持HDR格式
未定义且特定于浏览器的。我知道任何浏览器都不支持HDR图像格式。浏览器支持的图像格式取决于浏览器。例如,Firefox和Chrome支持动画webp,但Safari不支持
一些开发人员的一个常见问题是,他们想知道是否应该为特定纹理启用混合/透明度。有些人错误地认为,如果纹理有alpha,他们应该,否则他们不应该。这是错误的。是否应使用混合/透明度与图像格式完全不同,需要单独存储 与图像相关的其他事物也是如此。将图像上传到GPU的格式取决于应用程序和用途,与图像文件本身的格式无关 如何判断图像是否具有alpha通道 你不能。你只能猜测
texImage2D
获取传入的图像,并将其转换为类型
和格式
。然后,它将转换后的数据传递给GPU
DOM不支持HDR格式
未定义且特定于浏览器的。我知道任何浏览器都不支持HDR图像格式。浏览器支持的图像格式取决于浏览器。例如,Firefox和Chrome支持动画webp,但Safari不支持
一些开发人员的一个常见问题是,他们想知道是否应该为特定纹理启用混合/透明度。有些人错误地认为,如果纹理有alpha,他们应该,否则他们不应该。这是错误的。是否应使用混合/透明度与图像格式完全不同,需要单独存储 与图像相关的其他事物也是如此。将图像上传到GPU的格式取决于应用程序和用途,与图像文件本身的格式无关
const format = gl.RGBA;
const type = gl.UNSIGNED_BYTE;