小编ARG*_*Geo的帖子

使用MTLTexture作为SCNScene的环境映射

我想将一个MTLTexture对象设置为一个场景的环境贴图,因为根据文档似乎是可能的.我可以UIImage使用以下代码将环境贴图设置为a :

let roomImage = UIImage(named: "room")
scene.lightingEnvironment.contents = roomImage
Run Code Online (Sandbox Code Playgroud)

这很有效,我看到了金属物体上图像的反射.我尝试将图像转换为a MTLTexture并使用以下代码将其设置为环境贴图:

let roomImage = UIImage(named: "room")
let loader = MTKTextureLoader(device: MTLCreateSystemDefaultDevice()!)
let envMap = try? loader.newTexture(cgImage: (roomImage?.cgImage)!, options: nil)
scene.lightingEnvironment.contents = envMap
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用,我最终得到一个空白的环境贴图,没有反射我的对象.

另外,我没有设置optionsas nil,而是尝试MTKTextureLoader.Option.textureUsage使用它可以获得的每个可能值来设置密钥,但这也不起作用.

编辑:您可以查看仓库中的示例项目,并使用它来重现此用例.

ios scenekit swift metal mtlbuffer

17
推荐指数
1
解决办法
511
查看次数

如何将对象转换为tri.js模型加载器的json文件

我正在构建一个浏览器游戏,three.js我想将Maya 2013中的模型加载到我的场景中.我已将模型导出为obj文件.

现在我需要知道如何将它转换为three.js-loader 的JS文件.

到目前为止这是我的装载机:

 var jsonLoader = new THREE.JSONLoader();
 jsonLoader.load( "models/model.js", addModelToScene );
Run Code Online (Sandbox Code Playgroud)

提前致谢

python json maya three.js

16
推荐指数
4
解决办法
3万
查看次数

SceneKit - 旋转和动画SCNNode

我正在尝试显示一个指向z轴的金字塔,然后绕z旋转.由于我的相机在z轴上,我期待从上面看到金字塔.我设法旋转金字塔以这种方式看到它,但是当我添加动画时,它似乎在多个轴上旋转.

这是我的代码:

// The following create the pyramid and place it how I want
let pyramid = SCNPyramid(width: 1.0, height: 1.0, length: 1.0)
let pyramidNode = SCNNode(geometry: pyramid)
pyramidNode.position = SCNVector3(x: 0, y: 0, z: 0)
pyramidNode.rotation = SCNVector4(x: 1, y: 0, z: 0, w: Float(M_PI / 2))
scene.rootNode.addChildNode(pyramidNode)

// But the animation seems to rotate aroun 2 axis and not just z
var spin = CABasicAnimation(keyPath: "rotation")
spin.byValue = NSValue(SCNVector4: SCNVector4(x: 0, y: 0, z: 1, w: 2*Float(M_PI)))
spin.duration …
Run Code Online (Sandbox Code Playgroud)

3d animation scenekit swift

16
推荐指数
2
解决办法
2万
查看次数

CloudKit统计记录

我有一个"表"可能有很多记录,当添加一个新记录时,我需要知道当前表中有多少记录,因为我在计算某些值时使用它.我能找到的最接近的是请求所有这样的条目:

var query : CKQuery = CKQuery(recordType: "Stars", predicate: NSPredicate(format: "mass > 0"))
    var request : CKQueryOperation = CKQueryOperation(query: query)
    var starCount = 0

    request.queryCompletionBlock = {
        (cursor:CKQueryCursor!, error:NSError!) in
        if error {
            completionHandler(ECOResponse.error(error.description), starCount)
        } else {
            completionHandler(ECOResponse.ok(), starCount)
        }
    }

    request.recordFetchedBlock = {
        (record:CKRecord!) in
        starCount += 1
    }
Run Code Online (Sandbox Code Playgroud)

我希望queryCompletionBlock与CKQueryCursor一起给出一个count或results数组,但不幸的是它没有.

有没有其他方法来计算表中的行数?

ios swift ios8 cloudkit

15
推荐指数
1
解决办法
3272
查看次数

是否可以像在Vuforia中一样跟踪ARKit中的对象?

如果Apple的ARKit支持像Vuforia那样的3D对象跟踪(甚至图像跟踪),我找不到任何信息.我不想在世界任何地方放置3D模型.相反,我想检测特定的3D对象并将AR对象放在该对象的前面和顶部.

简单的例子:我想跟踪现实世界中的特定玩具车,并在AR场景中添加扰流板.

有人可以提供我可能的信息吗?

augmented-reality ios vuforia swift arkit

15
推荐指数
1
解决办法
1万
查看次数

如何使用AppleScript在iMessage中启动新对话?

所以我正在努力创建一个基本上自动发送imessage的applescript.我现在的工作是:

on run {msg, phoneNum}
    tell application "Messages"
        set serviceID to id of 1st service whose service type = iMessage
        send msg to buddy phoneNum of service id serviceID
    end tell
end run
Run Code Online (Sandbox Code Playgroud)

除了在开始新会话时不起作用外,这大部分都有效.当您将脚本运行到与消息中没有对话的号码时,会收到一条弹出警告,提示"您的消息没有任何收件人".但是,这会创建与该人的对话,并且当您再次运行相同的脚本时,它会起作用.

我想如果它第二次运行,必须有办法以某种方式创建一个新的对话,但我从来没有真正使用过AppleScript或者之前的任何脚本语言,所以我不知道该怎么做.

编辑:发布后我立刻想到了一个粗略的解决方法.如果在您发送消息之前发送空字符串,则可以创建新会话,并且它可以与现有会话一起使用.

on run {msg, phoneNum}
    tell application "Messages"
        set serviceID to id of 1st service whose service type = iMessage
        send "" to buddy phoneNum of service id serviceID
        send msg to buddy phoneNum of service id serviceID
    end tell
end run
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我认为有一种比这更好/更优雅的解决方案.

macos applescript imessage

14
推荐指数
1
解决办法
2329
查看次数

与ARCore和ARKit相比,Vuforia有任何限制吗?

我是增强现实领域的初学者,致力于使用智能手机创建建筑计划(平面图,房间平面图等,具有精确测量)的应用程序.所以我正在研究可用于此的最佳AR SDK.Vuforia对抗ARCore和ARKit的文章并不多.

请建议使用最好的SDK,各自的优点和缺点.

augmented-reality vuforia swift arkit arcore

14
推荐指数
1
解决办法
1万
查看次数

Twilio iOS SDK在拨出电话时失败并显示"400 Bad request"

获取此处提供的示例源代码,转换为Swift 3并应用我生成的升级后的Twilio帐户令牌.

尝试拨打电话时,它会播放声音,但HTTP/1.0 400 Bad request在尝试访问时会失败https://matrix.twilio.com/2012-02-09/AC ....

这是试图打电话后的日志 -

2016-10-16 18:32:12.955056 MyApp[577:121739] [DEBUG TCDeviceInternal] Inside TCDeviceInternal initWithCapabilityToken, capabilityToken_: (null)
2016-10-16 18:32:12.961112 MyApp[577:121739] [VERBOSE TCDeviceInternal] Inside decodeCapabilityToken:, Header: {
    alg = HS256;
    typ = JWT;
}
2016-10-16 18:32:12.962305 MyApp[577:121739] [VERBOSE TCDeviceInternal] Inside decodeCapabilityToken:, payload: {
    exp = 1476635532;
    iss = ....REMOVED....................;
    scope = "scope:client:incoming?clientName=TestName scope:client:outgoing?appSid=AP.....REMOVED......&clientName=TestName";
}
2016-10-16 18:32:12.962611 MyApp[577:121739] [VERBOSE TCDeviceInternal] Scope URI: scope:client:incoming?clientName=TestName, inside setCapabilitiesWithCapabilityToken:
2016-10-16 18:32:12.962860 MyApp[577:121739] [VERBOSE TCDeviceInternal] Scope URI: scope:client:outgoing?appSid=AP.............REMOVED.......&clientName=TestName, inside …
Run Code Online (Sandbox Code Playgroud)

twilio ios swift

13
推荐指数
1
解决办法
636
查看次数

使用ARKit显示DAE文件并跟踪场景中的锚点

我正在尝试ARKit,我设置了一个ARSCNView使用本教程.

然后使用本教程的第二部分设置跟踪水平3D平面.

我创建了一个单独的视图应用程序,然后将一个ARSCNView刷新约束到根视图,并为我的插座ViewController.

这是以下代码ViewController:

import UIKit
import ARKit

class ViewController: UIViewController {

    //MARK: Properties
    @IBOutlet weak var arScene: ARSCNView!

    //MARK: ARKit variables
    var realityConfiguration: ARWorldTrackingSessionConfiguration?

    //MARK: Lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()         
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.prepare()
    }

    //MARK: Actions      

    //MARK: Overrides
}

extension ViewController {
    func prepare() {
        //Check to see if active reality is supported
        guard ARSessionConfiguration.isSupported else {
            //Custom alert …
Run Code Online (Sandbox Code Playgroud)

augmented-reality ios swift iphone-6 arkit

12
推荐指数
1
解决办法
8128
查看次数

ARKit - 如何将3D对象放在QRCode上?

我实际上是想用QRKode3D对象放在QRCode上 为此我使用AVCaptureDevice来检测QRCode并建立QRCode的区域,它给我一个CGRect.然后,我在CGRect的每个点上进行一次hitTest来获得平均3D坐标,如下所示:

positionGiven = SCNVector3(0, 0, 0)

for column in Int(qrZone.origin.x)...2*Int(qrZone.origin.x + qrZone.width) {
    for row in Int(qrZone.origin.y)...2*Int(qrZone.origin.y + qrZone.height) {
        for result in sceneView.hitTest(CGPoint(x: CGFloat(column)/2,y:CGFloat(row)/2), types: [.existingPlaneUsingExtent,.featurePoint]) {

            positionGiven.x+=result.worldTransform.columns.3.x
            positionGiven.y+=result.worldTransform.columns.3.y
            positionGiven.z+=result.worldTransform.columns.3.z
            cpts += 1
        }
    }
}

positionGiven.x=positionGiven.x/cpts
positionGiven.y=positionGiven.y/cpts
positionGiven.z=positionGiven.z/cpts
Run Code Online (Sandbox Code Playgroud)

但是hitTest没有检测到任何结果并冻结相机,而当我通过屏幕上的触摸进行hitTest时它可以工作.你知道它为什么不起作用吗?你有其他想法可以帮助我实现我想做的事吗?

我已经考虑过使用CoreMotion进行3D翻译,它可以让我倾斜设备,但这看起来真的很乏味.我也听说过可以锁定场景坐标以匹配相机方向的ARWorldAlignmentCamera,但我不知道如何使用它!

编辑:我每次触摸屏幕时尝试移动我的3D对象并且hitTest为正,并且它非常准确!我真的不明白为什么像素区域上的hitTest不起作用...

编辑2:以下是在屏幕上使用2-5次触摸的hitTest的代码:

@objc func touch(sender : UITapGestureRecognizer) {

    for result in sceneView.hitTest(CGPoint(x: sender.location(in: view).x,y: sender.location(in: view).y), types: [.existingPlaneUsingExtent,.featurePoint]) {
        //Pop up …
Run Code Online (Sandbox Code Playgroud)

3d qr-code core-motion swift arkit

12
推荐指数
1
解决办法
4737
查看次数