OGeek|极客世界-中国程序员成长平台

标题: ios - 如果我替换 Vuforia iOS 项目的茶壶对象,为什么只看到三角形而不是立方体? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 15:12
标题: ios - 如果我替换 Vuforia iOS 项目的茶壶对象,为什么只看到三角形而不是立方体?

我下载了示例 Vuforia iOS 项目。而不是茶壶,我想旋转一个有纹理的立方体。为了创建一个具有纹理的立方体,我使用了 blender 并创建了一个带有 UV 映射图像的 OBJ 文件,如下所示:

enter image description here

在 blender 中,它呈现完美,我可以完美地看到立方体对象的纹理。

然后我使用 perl 脚本将 OBJ 文件转换为 .h 文件,并替换了 Teapot.h 文件,并将茶壶图像替换为我在上面附加的 PNG。

当我运行该项目时,可以看到立方体的纹理,但每边都切割了三角形,如下所示:

enter image description here

我迫切希望在现有的 iOS 项目中创建自定义正方形、具有纹理的立方体,但是我在检查可行性方面没有取得成功。

NOTE: My project is already developed with lots of frameworks and libraries and in one screen, I need to integrate this function.



Best Answer-推荐答案


我可以通过添加到 Blender 来实现它,然后直接从 Blender 导出 .h 文件。在导出之前无需进行三角测量,因为 Unity 已经为我们进行了三角测量。

enter image description here

替换

glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotVertices);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotNormals);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotTexCoords);

BlenderExportedObject object = rectObject;

glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)object.vertices);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)object.normals);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)object.texCoords);

其中 rectObject 是对象名称。在我的例子中,我的 Blender 对象名称是 rect 所以它在 .h 文件中创建了 rectObject 名称。检查您的 .h 文件以找到该名称。

替换

glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)teapotIndices);

glDrawElements(GL_TRIANGLES, NUM_RECT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)object.indices);

引用.h文件找到NUM_RECT_OBJECT_INDEX

关于ios - 如果我替换 Vuforia iOS 项目的茶壶对象,为什么只看到三角形而不是立方体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56703277/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4