如何绘制边框以突出显示SCNNode并向用户指示该节点已被选中?
在我的项目中,用户可以放置多个虚拟对象,用户可以随时选择任何对象.选择后,我应该向用户显示高亮显示的3D对象.有没有办法直接实现这个或在SCNNode上绘制边框?

解决方法

您需要向sceneView添加点击手势识别器.
// add a tap gesture recognizer
let tapGesture = UITapGestureRecognizer(target: self,action: #selector(handleTap(_:)))
scnView.addGestureRecognizer(tapGesture)

然后,处理点击并突出显示节点:

@objc
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
    // retrieve the SCNView
    let scnView = self.view as! SCNView

    // check what nodes are tapped
    let p = gestureRecognize.location(in: scnView)
    let hitResults = scnView.hitTest(p,options: [:])
    // check that we clicked on at least one object
    if hitResults.count > 0 {
        // retrieved the first clicked object
        let result = hitResults[0]

        // get its material
        let material = result.node.geometry!.firstMaterial!

        // highlight it
        SCNTransaction.begin()
        SCNTransaction.animationDuration = 0.5

        // on completion - unhighlight
        SCNTransaction.completionBlock = {
            SCNTransaction.begin()
            SCNTransaction.animationDuration = 0.5

            material.emission.contents = UIColor.black

            SCNTransaction.commit()
        }

        material.emission.contents = UIColor.red

        SCNTransaction.commit()
    }
}

上面的代码段突出显示整个节点.您必须调整它以仅突出显示边框,如果这是您正在寻找的.

免责声明:此代码直接取自Xcode在打开新游戏(SceneKit)项目时创建的模板代码.

如何在iOS 11 ARKit-Scenekit中为SCNNode创建边框以指示其选择?的更多相关文章

  1. ios – SceneKit.哪种方式起来了?

    似乎大多数3D创作应用程序使用Z作为“向上”轴.而SceneKit使用Y作为’向上’轴.SceneKit允许您将场景加载为Collada.DAE文件.通过以下任一方式加载场景时:要么您可以指定选项,包括SCNScenesourceConvertToYUpKey和SCNScenesourceConvertUnitsToMetersKey.相应地设置这些,我期望当我将它们添加到从加载场景中的节点构造的

  2. 如何在iOS 11 ARKit-Scenekit中为SCNNode创建边框以指示其选择?

    如何绘制边框以突出显示SCNNode并向用户指示该节点已被选中?在我的项目中,用户可以放置多个虚拟对象,用户可以随时选择任何对象.选择后,我应该向用户显示高亮显示的3D对象.有没有办法直接实现这个或在SCNNode上绘制边框?

  3. ios – 在球体表面SceneKit上写文字?

    我想知道是否有一种方法可以在SceneKit中沿着球体对象的表面写入文本.我知道如果我有一个图像,我会在表面上放置纹理并实现这种效果,但我想知道我是否可以在球体表面上以某种方式动态添加文本.任何的想法?

  4. ios – Swift Scenekit – 居中SCNText – getBoundingBoxMin:Max问题

    享受SCNText上的alignmentMode选项.谷歌搜索周围看起来像alignmentMode和containerFrame有问题.我发现的替代方案建议使用获取边界框功能来查找文本大小,然后相应地手动调整.很棒,除了我不能让功能工作.当我试图得到两个向量时,我得到一个错误:‘SCNVector3’无法转换为’UnsafeMutablePointer”我在几何和节点上得

  5. ios – 永远动画SCNNode – SceneKit,Swift

    我想永远动画2个立方体,直到用户点击其中一个.动画应该像∞一样.这些是我想要动画的sceneView中的我的立方体:我试图用嵌套动画做到这一点,它确实部分工作.现在,由于动画总是等到它们在开始新动画之前完成,它看起来并不光滑.在继续开发∞动画之前,我想知道是否有更好的方式.这是我目前的代码:输出显示以下内容:log0,log5,log6,log1,log2,log4,log2…解决方法如果要为SCNNode设置动画,请让节点运行SCNAction.迅速:Objective-C的:上面的代码将永久地上下调整

  6. xcode – 物理模拟的SceneKit更新方法

    我玩过精灵套件,并使用更新方法设置每个时间步骤处理的东西.我正试图学习一些快速的场景套件,似乎无法找到相应的.你能指点一下为SceneKit实现更新方法的例子吗?

  7. 如何正确使用iOS(Swift)SceneKit SCNSceneRenderer unprojectPoint

    那么,如果那架飞机与摄像机是正交的–那就是你的帮助.那么你需要做的就是在那架飞机上投射一点:现在,您可以在三维视图中拥有世界起源的位置归一化深度空间.要将2D视图空间中的其他点映射到此平面上,请使用此矢量中的z坐标:这让您在世界空间中将点击/分接位置映射到z=0平面,适合用作节点的位置,如果要向用户显示该位置.

  8. ios – SceneKit统计窗口告诉我们什么?

    到目前为止,我发现每秒帧数需要尽可能高,并且也要保持不变.别人的意思是什么,它们对什么有用?解决方法这就是你所看到的:>红色和灰色条是一种性能审查.它基于FPS,您应该尽一切努力使其保持绿色和饱满.现在,它非常糟糕!

  9. ios – 如何在不阻塞主线程的情况下添加SCNNode?

    解决方法我不认为使用dispatchQueue可以解决这个问题.如果我替换其他任务而不是创建SCNNode它按预期工作,所以我认为问题与SceneKit有关.thisquestion的答案表明SceneKit有自己的私有后台线程,它将所有更改批量化.因此,无论我使用什么线程来创建我的SCNNode,它们都会在与渲染循环相同的线程中的同一队列中结束.我正在使用的丑陋的解决方法是在SceneKit的委托渲染器方法中一次添加一些节点,直到它们全部完成.

  10. swift 快速奔跑的兔几 本节的内容是:SceneKit 第一说 创建一个3D胶囊

    SceneKit是一组类,可以用来在App中创建和呈现3D场景。它还可以和coreanimation和spritekit无缝交互,这就意味着我们可以在多种上下文中使用SceneKit1、SceneKit的结构SceneKit通过SCNView来呈现一切。

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部