问题标签 [scenekit-modelio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - 打印 MDLMesh 的顶点位置
我正在尝试打印MDLMesh
. 我在操场上有以下代码:
它正确打印第一个顶点,然后在第二个顶点上出现段错误。我怀疑我做错了什么bindMemory
。
更新:
将顶点复制到Data
作品中:
但我不应该复制所有顶点数据来访问顶点。
swift - 将 ARFaceGeometry 保存到 OBJ 文件
在 iOS ARKit 应用程序中,我一直在尝试将ARFaceGeometry
数据保存到 OBJ 文件中。我按照这里的解释:如何从 AVDepthData 制作 3D 模型?. 但是,未正确创建 OBJ。这是我所拥有的:
生成的 OBJ 文件如下所示:
我希望有更多的顶点,并且索引值看起来是错误的。
ios - SceneKit:已从 STL 导入的导出网格导致垃圾
我正在使用这个 gist将二进制 STL 3d 网格导入 SCNNode,它工作正常(我可以在 SCNView 中查看网格,它看起来不错)。
但是,如果我尝试将(未更改的)网格导出到 STLMDLAsset.export(to: url)
或SCNScene.write(to: url)
OBJ 文件中,则生成的网格会损坏。
如果我加载示例ship.scn
场景然后导出到 STL,一切看起来都很好。这让我觉得上面提到的 gist 如何创建 SCNNode 一定有问题,但我不知道它是什么。
ios - 我可以将 obj 和材质都加载为 MDLAsset 吗?
我有一个包含 obj、mtl 和纹理的目录。如果我做
let asset = MDLAsset(url: url)
然后它加载网格,但没有纹理。现在,如果我将model.mtl
文件重命名为model.abc
并运行相同的代码,我会在控制台上看到以下内容
020-10-08 19:24:36.277305-0700 ModelLoader2[1607:11820939] Unable to find mtl file /Users/myname/Documents/ModelLoader2/Models/model/model.mtl
这告诉我的是MDLAsset
确实找到了 mtl 文件,但它没有正确加载纹理。有没有办法让它也加载纹理?我看到一些MDLAssetResolver
使用以下定义调用的协议,但在互联网上绝对没有文档,在 github 上有 0 个有用的点击
我的问题是,
- 加载 obj 文件的最佳方法是什么?我原本打算使用 Model I/O,以便可以导出到
.usdz
其他格式 - 模型 I/O 是否不值得花时间处理,还是应该转向其他方法?似乎有一些 WWDC 讨论将其宣传为一个强大的框架,但到目前为止,由于缺乏文档,它似乎毫无用处。
ios - 我可以将 SKScene 用于 SceneKit 中加载的 Obj 文件的材质吗?
我的目标是能够点击特定模型并为表面着色。我已经设法使用通用 SCNSphere、SCNBox 等来做到这一点。
我是这样设置的,它基本上适用于 SCNSphere 等:
但是,当我加载.obj
文件并尝试使用 SKScene 设置材质时,我什么也得不到。这是我如何设置obj
但如你所见,茶壶的颜色不是橙色
我的问题是,我在使用 SKScene 作为文件材料方面做错了什么obj
,还是我知道有一些限制?我在这上面花了几个小时,如果有人有任何想法,我愿意接受建议。
另外,在这种情况下,我如何决定 SKScene 的大小,因为我想用 SKScene 任意包裹整个网格?
更新 1
我有点想通了。我的obj
文件没有纹理坐标,只有顶点。当我尝试obj
使用纹理坐标的另一个文件时,skScene
似乎已正确加载。所以我猜我的茶壶没有 uv 坐标,所以它不能映射纹理。obj
如果文件还没有它们,有没有办法添加 uv 坐标?
ios - 如果我使用金属分配 MDLAsset,然后使用该资产初始化 SCNNode,是否将 SCNGeometrySource 对象复制到非金属缓冲区?
如果我分配一个MDLAsset
并且SCNNode
喜欢这样
我的geometrySource
对象是由 Metal 缓冲区支持的,还是该过程已经消失并复制了 NSData 中的数据?
swift - 在应用程序运行时不使用文件中的 xcode gui 界面将 obj(或 dae 或激光雷达扫描)导入 swift SceneAssests
系统。(Mac OS:Catalina 10.15.7,xcode版本:12.3,swift语言版本5)
是否有人在 ipad/iphone 上的项目文件(文件中)中访问了 .dae 或 .obj 并能够从该文件创建场景资产?我不想在应用程序构建之前使用 xcode 中的图形界面并放入文件。我希望能够加载和创建带有图像叠加层的场景(.scn),并使用文件中的任何对象原点作为新场景原点。这甚至可能吗?
我一直在用 modelIO 玩一些示例代码,但还没有真正起作用。前任。在某处调用该函数并告诉它文件名“scannedChair”
以下来自https://developer.apple.com/forums/thread/103245
在我尝试搜索此人的任何地方,人们都非常专注于从他们的应用程序中导出 3d 文件或在增强现实中使用它们,而不是在传统应用程序场景中使用扫描的项目。前任。我扫描一把椅子,并希望在 pov 游戏或应用程序中看到这把椅子。
*注意:我在 xcode / swift 中非常绿色。我只是在寻找不是解决方案的指针,除非它自己出现。抱歉,如果我的术语完全偏离基础。
ios - ModelIO:更改MDLAsset / MDLMesh / MDLSubmesh的材质
我在我的 iPad 应用程序中加载模型作为 MDLAsset 以使用 RealityKit 查看它们。由于我需要更改模型的纹理,因此我目前只需在 RealityKit 中的 ModelEntity 上应用 SimpleMaterial。这很好用,但是因为没有优雅的方法可以将 RealityKit 对象导出为例如 usd 文件。所以我需要将我的更改持久化到 MDLAsset,然后可以轻松导出。
我设法持续更改 MDLAsset 的变换,但没有以任何方式更改材料。
当然,总会有使用 SceneKit 的解决方法,这使得操作模型并将其导出到 MDLAsset 变得容易。但我希望有更直接的方法。
我现在在做什么?
我尝试了许多不同的方法,但大多数归结为:
我还尝试操作现有 subMesh 材质的 MDLMaterialProperties,但似乎材质以某种方式被写保护,至少我没有设法改变它的 baseColor 语义。
那么有没有直接的方法将材质应用到 MDLAsset / MDLMesh / MDLSubmesh ?
swift - 在模型 I/O 中控制 MDLTexture 格式
在MDLMaterial
该类中,有一个方法method,用于搜索具有URL 数据loadTextures(using:)
的材料类型并为每个类型加载一个。如果您使用例如 MetalKit (the ) 加载一个文件,则 Model I/O 会自动为您填充纹理(如果文件包含此类规范)。MDLMaterialProperty
MDLTexture
MDLAsset
MTKMeshBufferAllocator
但是,我似乎无法控制这些纹理的像素格式,而且它们似乎是未压缩的。如果可能的话,我想通过模型 I/O压缩这些纹理,因为我目前的计划是使用模型 I/O 加载纹理,MTLTexture
从模型 I/O 纹理创建一个,然后将该纹理复制到压缩纹理格式,因为我想压缩所有内容并将我将拥有的许多纹理存储在一个堆中。
如何更改模型 I/O 使用的纹理格式?还是我必须使用 Model I/O 手动解决问题?