javascript - WebGL 纹理问题(奇怪的图形故障和映射问题)

标签 javascript opengl-es textures webgl blender

我的问题是,当使用 WebGL 并尝试读取 OBJ 模型时,纹理映射非常困惑。这是它在 Blender 中的样子。

Blender UV Mapped

当我这么说时,我可能完全不在话下,但我相信在右侧窗口中,带有红点的白色小圆圈代表 UV 坐标 (0,0),这意味着左侧和/或下方的其他坐标其中包含负数。

这是 WebGL 中的输出

WebGL Output

映射完全关闭(我尝试过夹紧和重复但无济于事),并且中间有一些奇怪的噪音。所以我的问题是,如何从 Blender 获得介于 0 和 1 之间的正确 UV 坐标,并消除 WebGL 中的噪声。

这是在纹理传递到 WebGL 以便在绘制循环中渲染之前纹理加载方法的样子

gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
gl.generateMipmap(gl.TEXTURE_2D);
gl.bindTexture(gl.TEXTURE_2D, null);

更新 当不保持顶点顺序时:

Better results

最佳答案

通过确保我以 (s,t) 而不是 (x,y,z) 的形式获取 UV 坐标来修复。通过按 2 组(就像我应该做的那样)而不是 3 组抓取各个坐标,我每次都能获得完美映射的纹理坐标。

关于javascript - WebGL 纹理问题(奇怪的图形故障和映射问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639963/

相关文章:

Java - LWJGL 加载纹理,只有我加载的最新纹理有效

c++ - OpenGL imgui slider 范围

javascript - 将 node-webkit 作为 node.js 应用程序运行

javascript - 尝试在对象 Javascript 中创建嵌套数组

javascript - datejavascript 将数值转换为时间值

iphone - 不能用香蕉代替茶壶

android - 如何在 OpenGL ES 和 Vulkan 之间传递纹理?

ios - 了解核心视频 CVPixelBufferPool 和 CVOpenGLESTextureCache 语义

macos - 将模板缓冲区可视化为纹理

javascript - 如何检测是否加载了 ActiveX 控件?