如果我替换 Vuforia iOS 项目的茶壶对象,为什么只看到三角形而不是立方体?
If I replace teapot object of Vuforia iOS project, why only triangle seen instead of Cube?
我下载了示例 Vuforia iOS 项目。我想旋转一个带有纹理的立方体,而不是茶壶。为了创建一个有纹理的立方体,我使用了 blender 并创建了一个 OBJ 文件,其 UV 贴图图像如下:
在搅拌机中,它呈现完美,我可以完美地看到立方体对象及其纹理。
然后我使用 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.
我可以通过 add-on 到 Blender 然后直接从 Blender 导出 .h
文件来实现它。导出前无需进行三角测量,因为 Unity
已经为我们进行了三角测量。
- 从 here 下载 add-on。有关于如何将其添加到 Blender 的完整指南。
在 Blender 中准备您想要的 3D 对象。查看 this 教程,其中解释了如何使用 Blender 并制作一个周围有纹理的简单 3D 对象。
获得所需模型后,转到 File
> Export
> Vuforia OpenGL C Include
,如下图所示。将 .h
文件保存在某个位置
在 Vuforia iOS 示例项目中,以相同的方式添加此 .h
文件和 UV-mapping
图像(我们用来渲染我们的对象)Teapot.h
及其 UV-mapping
图片。
导入头文件。
更换茶壶:
替换
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 对象。
我下载了示例 Vuforia iOS 项目。我想旋转一个带有纹理的立方体,而不是茶壶。为了创建一个有纹理的立方体,我使用了 blender 并创建了一个 OBJ 文件,其 UV 贴图图像如下:
在搅拌机中,它呈现完美,我可以完美地看到立方体对象及其纹理。
然后我使用 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.
我可以通过 add-on 到 Blender 然后直接从 Blender 导出 .h
文件来实现它。导出前无需进行三角测量,因为 Unity
已经为我们进行了三角测量。
- 从 here 下载 add-on。有关于如何将其添加到 Blender 的完整指南。
在 Blender 中准备您想要的 3D 对象。查看 this 教程,其中解释了如何使用 Blender 并制作一个周围有纹理的简单 3D 对象。
获得所需模型后,转到
File
>Export
>Vuforia OpenGL C Include
,如下图所示。将.h
文件保存在某个位置
在 Vuforia iOS 示例项目中,以相同的方式添加此
.h
文件和UV-mapping
图像(我们用来渲染我们的对象)Teapot.h
及其UV-mapping
图片。导入头文件。
更换茶壶:
替换
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 对象。