如果我替换 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
已经为我们进行了三角测量。
在 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
。
【讨论】:
以上是关于如果我替换 Vuforia iOS 项目的茶壶对象,为啥只看到三角形而不是立方体?的主要内容,如果未能解决你的问题,请参考以下文章
iOS教程二 —— NVisionXR创建控制器和Vuforia对象
如何将 Blender blend(或 obj)文件转换为 Qualcom Vuforia .h 文件
如何将 Vuforia Unity 2017.3 构建 OC iOS 项目作为框架嵌入/集成到 Swift iOS 项目中