You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Meshroom生成OBJ文件纹理坐标读取及OpenGL纹理加载问题求助

问题排查与解决方案

1. 纹理层索引计算错误

你当前使用std::round(x)计算纹理层索引的逻辑存在问题:

  • 对于0 ≤ x < 1范围内的坐标,四舍五入可能把接近1的x(比如0.99)判定为层1,导致采样到错误的纹理
  • 正确的做法是使用std::floor(x)取整数部分,确保区间[0,1)对应层0、[1,2)对应层1,以此类推
    修改后的坐标处理代码:
fscanf_s(file, "%f %f\n", &x, &y);
z = std::floor(x); // 替换round为floor
x = x - z;
// 可选:如果发现纹理上下颠倒可添加下面这行
// y = 1.0f - y;
tex = glm::vec3(x, y, z);

2. 缺少纹理参数配置

你创建完2D纹理数组后没有显式设置环绕和过滤参数,默认的REPEAT环绕模式会导致边界处的UV因浮点精度误差采样到纹理另一端,产生明显边界。在纹理生成mipmap前添加如下配置:

// 纹理环绕设置:边界处截断,避免重复采样
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// 纹理过滤设置,可根据需求调整
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glGenerateMipmap(GL_TEXTURE_2D_ARRAY);

3. 纹理尺寸一致性检查

你调用glTexImage3D时使用了固定的size作为宽高,需要确认所有加载的纹理图片的实际分辨率w和h都等于这个size,否则glTexSubImage3D会出现拉伸、错位,导致边界显示异常。如果纹理尺寸不一致,需要先将所有纹理缩放到相同尺寸再传入,或者调整glTexImage3D的宽高参数为实际纹理尺寸。


内容的提问来源于stack exchange,提问作者Fedour Traktor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:12:03