javascript - WebGL texImage2D 参数
问题描述
我正在尝试将图像文件加载到我的 webGL 代码中并从中创建纹理,但是在加载图像时出现错误:
未捕获的类型错误:无法在“WebGLRenderingContext”上执行“texImage2D”:参数 9 不是“ArrayBufferView”类型。在图像。(app.js:13)
var image = new Image();
image.src = "./js-logo.png";
image.addEventListener("load", function(){
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 10, 10, 0, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.generateMipmap(gl.TEXTURE_2D);
});
解决方案
[...] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels); void texImage2D(GLenum target, GLint level, GLint internalformat, GLenum format, GLenum type, TexImageSource source); // May throw DOMException
由于图像是image
它TexImageSource
必须是
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 10, 10, 0, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
image
请注意,位图的大小是在对象中编码的。
此外,您应该设置纹理过滤参数:
var image = new Image();
image.src = "./js-logo.png";
image.addEventListener("load", function(){
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 10, 10, 0, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR );
gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR );
gl.generateMipmap(gl.TEXTURE_2D);
});
推荐阅读
- javascript - 为什么相同的 async/await 函数在某处工作而不在其他地方工作?
- c# - 使用 Razor Pages 在表格中显示数据时出现问题
- python - 如何在此查询中添加 if 条件?
- python - 得到 ImportError: cannot import name 'PandasError'
- javascript - 尝试离线导出到 Highcharts
- python-3.x - 如何从 AWS lambda 重建对 Amazon lex 的响应?
- python - 将列表传递给渲染(请求)时CSS失败
- android-fragments - “尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'”
- android - 单行显示 Insight RecyclerView
- c# - Xamarin Forms Android 键盘小数分隔符