如果我替换 Vuforia iOS 项目的茶壶对象,为啥只看到三角形而不是立方体?

Posted

技术标签:

【中文标题】如果我替换 Vuforia iOS 项目的茶壶对象,为啥只看到三角形而不是立方体?【英文标题】:If I replace teapot object of Vuforia iOS project, why only triangle seen instead of Cube?如果我替换 Vuforia iOS 项目的茶壶对象,为什么只看到三角形而不是立方体? 【发布时间】:2019-11-04 07:05:21 【问题描述】:

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

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

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

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

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

注意:我的项目已经开发了很多框架和 库和一个屏幕,我需要集成这个功能。

【问题讨论】:

检查您的法线,在导出前也要进行三角测量。 没看懂,能解释一下吗? 看不懂这里可能解释的有点多,请参考手册docs.blender.org/manual/en/dev/modeling/meshes/editing/…——一般来说,unity只显示人脸的一侧,正常点的一侧出 - 并进行三角测量,您可以添加三角测量修饰符并应用或只需按 ctrl+t。 @yes 我很确定你应该只在导出到任何 3d 引擎时使用四边形。由于 Unity 已经为您进行了三角测量,因此不建议您自己进行 AFAIK @yes:我需要这样做的地方:you can either add a triangulation modifier and apply or just press ctrl+t. 【参考方案1】:

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

从here 下载插件。有关于如何将其添加到 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 项目的茶壶对象,为啥只看到三角形而不是立方体?的主要内容,如果未能解决你的问题,请参考以下文章

Vuforia AR的认识

iOS教程二 —— NVisionXR创建控制器和Vuforia对象

如何将 Blender blend(或 obj)文件转换为 Qualcom Vuforia .h 文件

如何将 Vuforia Unity 2017.3 构建 OC iOS 项目作为框架嵌入/集成到 Swift iOS 项目中

在 Unity / Vuforia 中强制 AR 对象始终直立

使用Vuforia和Unity仅使用地平面检测创建一次对象