草庐IT

ARKit-SceneKit

全部标签

swift - ARKit:你如何迭代所有检测到的特征点?

我想对ARKitsession期间在单个帧中发现的每个检测到的特征点进行一些处理。如何遍历每个检测到的特征点,并获取它们的世界坐标?我使用的是Swift,但Objective-C答案也可以。 最佳答案 编辑:在Xcode9.0GM(及更高版本)中,points是float3向量的Swift数组,因此您可以像任何其他Swift数组一样迭代它:forpointinframe.rawFeaturePoints.points{...}或者:frame.rawFeaturePoints.points.map{pointin...}或者您最喜欢

ios - 我们可以在 SceneKit 中的透明平面上渲染阴影吗

我已经为平面使用了着色器修改器,但它不起作用。谁能建议我如何解决它?letmyShaderfragment="#pragmatransparent;\n"+"_output.color.a=0.0;"letmyShaderSurface="#pragmatransparent;\n"+"_surface.diffuse.a=0.0;"material.shaderModifiers=[SCNShaderModifierEntryPoint.fragment:myShaderfragment,SCNShaderModifierEntryPoint.surface:myShaderSurf

swift - 如何在 SceneKit 中做平面阴影多边形/几何图形,即不平滑

我试图让我的几何图形在SceneKit中看起来平坦而不平滑。正如您在图像中看到的,在SceneKit中,绿色球体默认具有平滑的阴影。我想要的是另一张图片中的扁平“外观”,上面写着“扁平”。我在SceneKit中没有看到任何关于如何禁用此功能的选项?这是我Playground的代码:importCocoaimportSceneKitimportQuartzCoreimportXCPlaygroundvarsceneView=SCNView(frame:CGRect(x:0,y:0,width:300,height:300))varscene=SCNScene()sceneView.bac

objective-c - SceneKit Cocoa 添加贴花

是否有足够的方法向SCNNode添加贴花(纹理)?现在我所能做的就是用SCNPlane几何体创建新的SCNNode为其漫反射内容分配纹理并将其添加到场景中......这种方法非常低效。我想添加一个不会成为场景一部分的贴花-以提高游戏的性能。因为我想在地板节点上有比较多的贴花。也许有点类似于粒子内部的工作原理?或者其他一些快速图像绘制方法。我已经尝试过@rickster的建议1UseSKEffectNodeasabufferintheSpriteKitscene—throwsplattersintoaneffectnodeuntilitgetstoacertainnumberofchil

swift - 如何在 ARKit 中使用环境贴图?

ARKit2.0添加了一个名为AREnvironmentProbeAnchor的新类。阅读它的说明,似乎ARKit可以自动收集环境纹理(立方体贴图?)。我相信我们现在可以创建一些反射(reflect)真实环境的虚拟对象。但我仍然不清楚这是如何工作的,尤其是环境纹理是如何生成的。有没有人有简单的示例代码来演示这个很酷的功能? 最佳答案 AREnvironmentProbeAnchor(适用于iOS12.0+)是基于图像的光照技术的anchor。模型的PBR着色器可以反射来自周围环境的光。原理很简单:来自源的6个正方形图像进入着色Mat

ios - 在 iOS 上的 SceneKit 中导入 3d 模型

从URL导入.obj文件并将其转换为SCNNode时出现问题这是代码(swift3):leturl=URL.init(string:"https://cloud.box.com/shared/static/ock9d81kakj91dz1x4ea.obj")letasset=MDLAsset(url:url!asURL)letobject=asset.object(at:0)letnode=SCNNode(mdlObject:object)但是当我运行项目时,控制台显示:CouldnotopenOBJfile如何处理? 最佳答案 我

ios - SceneKit 相机节点在捏手势时重置

我正在尝试通过捏合手势实现缩放,但是每次我第二次捏合时,模型都会自行重置。funczoom(scale:Double){self.cameraNode.camera!.xFov=scaleself.cameraNode.camera!.yFov=scale}funchandlePinch(gestureRecognize:UIPinchGestureRecognizer){ifgestureRecognize.numberOfTouches()==2{letzoom=gestureRecognize.scaleif(gestureRecognize.state==UIGestureRe

ios - 如何确定 ScnNode 是在 SceneKit 中相机节点的 View 方向的左侧还是右侧

我在SceneKit场景的中心位置(0,0,0)有一个摄像头我正在围绕y轴旋转相机以显示场景的不同部分。我想在屏幕的左侧/右侧显示箭头,以显示用户必须朝哪个方向移动才能查看目标对象。如何计算ScnNode是否位于我的视线方向的左侧或右侧?我知道:相机节点的位置和旋转目标节点的位置 最佳答案 计算节点相对于相机的向量。节点位置减去相机位置计算向量使用atan2将矢量转换为角度。苹果文档的解释有点单薄。在raywenderlich.com上有一个教程.例如letv=CGPoint(x:nodePosition.x-cameraPosit

swift - 在 SceneKit 中绘制 3D 圆弧和螺旋线

最近这里的一个问题让我又想起了SceneKit,想起了一个一直没解决的问题。我的应用使用SK显示天线设计。大多数天线使用金属杆和网状反射器,所以我使用SCNCylinder作为杆,SCNPlane作为反射器,SCNFloor作为地面。整个过程花了几个小时,而我对3D完全是菜鸟。但是一些天线使用弯曲成弧形或螺旋线的电线,我在这里用平底船并使用几个首尾相连的圆柱体制作了蹩脚的分段物体。看起来棒极了。理想情况下,我想要一个单一的对象来呈现具有圆柱横截面的圆弧或螺旋线。基本上是SCNTorus,但有开始和结束角度。Thispost谈到在SK中使用UIBezierPath,但它使用extrude

swift - 如何识别用户是否点击了使用 ARKit 显示在屏幕上的对象 - swift

我是iOS编程新手。我想构建一个允许用户点击屏幕上显示的特定对象的应用程序。我正在对已显示的对象使用addGestureRecognizer以确定用户是否已被单击,然后我只想将另一个对象添加到屏幕。这是我到目前为止所做的objpizza=make2dNode(image:#imageLiteral(resourceName:"pizza"),width:0.07,height:0.07)objpizza.position=SCNVector3(0,0,-0.2)objpizza.name="none"self.arView.addGestureRecognizer(UIGestureR