我想将一个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使用它可以获得的每个可能值来设置密钥,但这也不起作用.
编辑:您可以查看此仓库中的示例项目,并使用它来重现此用例.
我正在构建一个浏览器游戏,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)
提前致谢
我正在尝试显示一个指向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) 我有一个"表"可能有很多记录,当添加一个新记录时,我需要知道当前表中有多少记录,因为我在计算某些值时使用它.我能找到的最接近的是请求所有这样的条目:
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数组,但不幸的是它没有.
有没有其他方法来计算表中的行数?
如果Apple的ARKit支持像Vuforia那样的3D对象跟踪(甚至图像跟踪),我找不到任何信息.我不想在世界任何地方放置3D模型.相反,我想检测特定的3D对象并将AR对象放在该对象的前面和顶部.
简单的例子:我想跟踪现实世界中的特定玩具车,并在AR场景中添加扰流板.
有人可以提供我可能的信息吗?
所以我正在努力创建一个基本上自动发送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)
虽然这有效,但我认为有一种比这更好/更优雅的解决方案.
我是增强现实领域的初学者,致力于使用智能手机创建建筑计划(平面图,房间平面图等,具有精确测量)的应用程序.所以我正在研究可用于此的最佳AR SDK.Vuforia对抗ARCore和ARKit的文章并不多.
请建议使用最好的SDK,各自的优点和缺点.
获取此处提供的示例源代码,转换为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) 我正在尝试ARKit,我设置了一个ARSCNView使用本教程.
我创建了一个单独的视图应用程序,然后将一个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) 我实际上是想用QRKode将3D对象放在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)