Cocos2D-X 在 3D 中重复纹理
cocos2d-x repeating textures in 3d
我非常想在3D对象上创建一个重复的纹理。
我尝试从Maya导出到.obj。材质文件 (.mtl) 如下所示:
newmtl lambert10SG
illum 4
Kd 0.00 0.00 0.00
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
map_Kd -s 0.1 0.1 grass.jpg
Ni 1.00
行"map_Kd -s 0.1 0.1 草.jpg"应表示纹理正在重复。但是,这根本不起作用。在我删除"-s 0.1 0.1"之前,纹理不会显示。然后它被拉伸了。
我尝试导出为 .fbx,然后转换为 .c3b。相同的结果。纹理被拉伸。
然后我尝试创建自己的纹理。我知道在 OpenGL 中,我必须将纹理坐标设置为>1 才能使纹理重复。这些似乎等同于纹理中的maxS和maxT(?
这是我的纹理设置:
cocos2d::Image *textImage = new (std::nothrow) cocos2d::Image();
textImage->initWithImageFile("grass.jpg");
cocos2d::Texture2D *texture = new (std::nothrow)cocos2d::Texture2D();
texture->initWithImage(textImage);
cocos2d::Texture2D::TexParams texParam;
texParam.wrapS = GL_REPEAT;
texParam.wrapT = GL_REPEAT;
texParam.minFilter = GL_LINEAR;
texParam.magFilter = GL_LINEAR;
texture->setTexParameters(texParam);
texture->setMaxS(10.0f);
texture->setMaxT(10.0f);
sprite->getMesh()->setTexture(texture);
质地仍在拉伸。
通过搜索互联网,似乎我可以使用 setTextureRect 函数在 Cocos 中的 2D 精灵上设置纹理坐标。然而,对于sprite3D来说,这似乎并不存在。
任何想法将不胜感激!
更新:
我设法通过手动编辑 .obj 文件来获得纹理平铺。
显然,CCObjLoader 不理解材料文件 (.mtl) 中的行:
map_Kd -s 0.1 0.1 grass.jpg
删除"-s 0.1 0.1"会使加载器识别纹理(尽管仍然拉伸)。
在此之后,我不得不通过乘以 10 来手动更改 .obj 文件中的所有 vt 坐标。纹理仍然没有重复,直到我将纹理参数更改为GL_REPEAT而不是GL_CLAMP_TO_EDGE。
cocos2d::Texture2D::TexParams texParam;
texParam.wrapS = GL_REPEAT;
texParam.wrapT = GL_REPEAT;
texParam.minFilter = GL_LINEAR;
texParam.magFilter = GL_LINEAR;
sprite->getMesh()->getTexture()->setTexParameters(texParam);
这不是我问题的解决方案,因为我需要应用程序来识别纹理何时应该自动重复。
我还没有破译纹理坐标在 cocos2d 结构中的保存位置,因此在加载精灵后无法更改这些坐标。一个解决方案可能是修复 objLoader,但这不太容易更新 cocos。或者做一个小的.obj文件修复器。这些似乎都不是理想的解决方案...
相关文章:
- 无法将结构注册为增强几何体3D点
- OpenGL大的3D纹理(>2GB)非常慢
- 使用 C++在 OpenGL 中对 3D 多边形进行纹理处理
- 3D 纹理大小会影响程序输出,而不会引发错误
- 呈现为3D纹理
- 从 Vulkan 中的 R16_UINT-3D 纹理中采样片段着色器中的值
- 在OpenGL 2.1中,即使在2D空间(具有2D纹理),也可以安全使用3D TEX坐标
- 如何将纹理映射到 3D 对象
- 将2D图像映射到3D纹理
- 是否可以在opengl中使用深度缓冲区渲染3D纹理
- 将两个图像堆栈的非电源加载到 3D 纹理 OpenGL C++
- 如何在 3D 图形 OpenGL 中使用纹理
- OpenGL 3D 纹理问题
- Cocos2D-X 在 3D 中重复纹理
- 用于渲染 3D 球体的纹理坐标
- OpenGL 3.3:在3D场景上显示2D纹理的问题
- 3D纹理的OpenGL高斯内核
- glGenerateMipmap 不适用于 OpenGL 中的 3D 纹理
- 在OpenGL中添加3D球体和纹理
- CUDA中作为纹理的3D阵列写入和读取