我下载了示例 Vuforia iOS 项目。而不是茶壶,我想旋转一个有纹理的立方体。为了创建一个具有纹理的立方体,我使用了 blender 并创建了一个带有 UV 映射图像的 OBJ 文件,如下所示:
在 blender 中,它呈现完美,我可以完美地看到立方体对象的纹理。
然后我使用 perl 脚本将 OBJ 文件转换为 .h 文件,并替换了 Teapot.h 文件,并将茶壶图像替换为我在上面附加的 PNG。
当我运行该项目时,可以看到立方体的纹理,但每边都切割了三角形,如下所示:
我迫切希望在现有的 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-推荐答案 strong>
我可以通过添加到 Blender 来实现它,然后直接从 Blender 导出 .h 文件。在导出之前无需进行三角测量,因为 Unity 已经为我们进行了三角测量。
替换
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 。
- 就是这样。它现在应该可以完美地渲染任何复杂的 3D 对象。
关于ios - 如果我替换 Vuforia iOS 项目的茶壶对象,为什么只看到三角形而不是立方体?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/56703277/
|