我正在使用3D模型开发ARKit应用程序。为此,我使用了3D模型并添加了用于移动,旋转和缩放3D模型的手势。
现在我只面临1个问题,但是我不确定这个问题与什么有关。3d模型是否存在问题,或者我的程序中是否缺少任何内容。
问题是我正在使用的3D模型显示得很大并且超出了屏幕。我正在尝试缩小尺寸,但尺寸很大。
这是我的代码:
@IBOutlet var mySceneView: ARSCNView!
var selectedNode = SCNNode()
var prevLoc = CGPoint()
var touchCount : Int = 0
override func viewDidLoad() {
super.viewDidLoad()
self.lblTitle.text = self.sceneTitle
let mySCN = SCNScene.init(named: "art.scnassets/\(self.sceneImagename).scn")!
self.mySceneView.scene = mySCN
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3Make(0, 0, 0)
self.mySceneView.scene.rootNode.addChildNode(cameraNode)
self.mySceneView.allowsCameraControl = true
self.mySceneView.autoenablesDefaultLighting = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(detailPage.doHandleTap(_:)))
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(detailPage.doHandlePan(_:)))
let gesturesArray = NSMutableArray()
gesturesArray.add(tapGesture)
gesturesArray.add(panGesture)
gesturesArray.addObjects(from: self.mySceneView.gestureRecognizers!)
self.mySceneView.gestureRecognizers …Run Code Online (Sandbox Code Playgroud) 我一直在寻找免费或商业AR工具包,并需要一些最好的建议!
我不想拥有一个识别图案并创建形状的图案.我的想法使用本地位置并使用服务器中的POI将它们呈现到AR视图.
有任何想法吗?
我想计算我的相机在世界坐标中的位置.这应该相当容易,但我没有得到我期望的结果.我相信我已经阅读了有关此主题的所有内容,但我的代码无效.这是我做的:
我有一个相机看着一个区域.
1)我画了一张该地区的地图.
2)我通过使用在我的地图上将4个图像点匹配到4个点来计算单应性 cv2.getPerspectiveTransform
3)H homography将每个世界坐标转换为摄像机坐标; 这是正常的
4)为了计算相机矩阵我遵循这个:
translation = np.zeros((3,1))
translation[:,0] = homography[:,2]
rotation = np.zeros((3,3))
rotation[:,0] = homography[:,0]
rotation[:,1] = homography[:,1]
rotation[:,2] = np.cross(homography[0:3,0],homography[0:3,1])
cameraMatrix = np.zeros((3,4))
cameraMatrix[:,0:3] = rotation
cameraMatrix[:,3] = homography[:,2]
cameraMatrix = cameraMatrix/cameraMatrix[2][3] #normalize the matrix
Run Code Online (Sandbox Code Playgroud)
5)根据这个,相机的位置应该这样计算:
x,y,z = np.dot(-np.transpose(rotation),translation)
Run Code Online (Sandbox Code Playgroud)
我得到的坐标是完全错误的.我想这个问题应该在步骤4或5的某个地方.我的方法有什么问题?
对不起,我的英语不好.我有以下问题:

让我们说我的移动设备的相机正在显示这张照片.
在图片中,您可以看到4个不同的位置.我知道每个位置(经度,纬度).
现在我想知道,图中的具体位置在哪里.例如,我想在前面20米处和我左边5米处有一个矩形.我只知道这一点的纬度/经度,但我不知道,我必须把它放在图片的内部(x,y).例如,在我看来,POS3位于(0,400).POS4为(600,400),依此类推.
我必须在哪里放置新点,前面20米,左边5米?(所以我的输入是:(LatXY,LonXY),我的结果应该是(x,y)在屏幕上)
我还得到了摄像机的高度以及摄像机的x,y和z轴的角度.
我可以使用简单的数学运算来解决这个问题吗?
非常感谢你!
android coordinate-systems augmented-reality coordinate-transformation android-camera
我是AR的新手,我在互联网上搜索基于标记和无标记的AR,但我对基于标记和无标记的AR感到困惑.让我们假设AR应用程序在扫描特定图像时触发AR动作.所以这是基于标记的AR或无标记AR ..图像不是标记吗?另外,为了定位AR内容,基于标记的AR使用设备的加速度计和指南针如无标记AR?
我想通过点击屏幕在Vuforia (没有Unity)中制作调色板的可点击单元格:

我找到了具有类似功能的Dominoes示例并执行此操作:
创建一个板块对象并乘以单元格对象
调用isTapOnSetColor函数,点击参数x,y(点击坐标)并获取坐标,
坐标是正确的,但获取部分对象的id/name是错误的
我觉得这行问题:
boolean bool = checkIntersectionLine(matrix44F, lineStart, lineEnd);
Run Code Online (Sandbox Code Playgroud)
在Dominoes示例中,这是:
bool intersection = checkIntersectionLine(domino->pickingTransform, lineStart, lineEnd);
Run Code Online (Sandbox Code Playgroud)
但我不知道做什么domino->pickingTransform和粘贴代替这行modelViewMatrix(Tool.convertPose2GLMatrix(trackableResult.getPose()).getData())
我的触摸功能的完整代码:http://pastebin.com/My4CkxHa
你能帮助我做点击或者可能是另一种方式(不是Unity)吗?
我正在尝试在照片上构建静态增强现实场景,在平面和图像上的共面点之间有4个定义的对应关系.
这是一步一步的流程:
我还测量了iphone相机相对于A4纸中心的位置.所以对于这个镜头,位置是(0,14,42.5),以cm为单位测量.我的iPhone也稍微倾斜到桌子上(5-10度)
使用这些数据我已设置SCNCamera为在第三张图像上获得蓝色平面的所需视角:
let camera = SCNCamera()
camera.xFov = 66
camera.zFar = 1000
camera.zNear = 0.01
cameraNode.camera = camera
cameraAngle = -7 * CGFloat.pi / 180
cameraNode.rotation = SCNVector4(x: 1, y: 0, z: 0, w: Float(cameraAngle))
cameraNode.position = SCNVector3(x: 0, y: 14, z: 42.5)
Run Code Online (Sandbox Code Playgroud)
这将为我提供比较我的结果的参考.
为了使用SceneKit构建AR,我需要:
H - 单应性; K - 内在矩阵; [R | t] - 外在矩阵
我尝试了两种方法来找到相机的变换矩阵:使用OpenCV中的solvePnP和基于4个共面点的单应性手动计算.
1.找出单应性
此步骤已成功完成,因为世界原点的UV坐标似乎是正确的.
2.内在矩阵
为了获得iPhone 6的内在矩阵,我使用了这个应用程序,它给出了100个640*480分辨率图像中的以下结果:
假设输入图像具有4:3的宽高比,我可以根据分辨率缩放上述矩阵
我不确定,但感觉这是一个潜在的问题.我用cv :: calibrationMatrixValues来检查fovx的计算内在矩阵,结果是~50°,而它应该接近60°. …
我正在尝试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) 在发现OpenCV的强大功能后,我决定使用该库来开发我正在研究的自然标记跟踪引擎.但我的问题是我不知道如何正确实施这种跟踪器.
我制定了以下计划:
我尝试了SIFT和SURF算法来描述和提取关键点,最终结果是两种算法的超低fps(即小于0 fps).我注意到SIFT和SURF在计算上相当昂贵,它是否适合在现场摄像机上进行这种跟踪?
谢谢.
我正在研究ARKit项目4个月了.我注意到在将一个子项添加到我的场景rootNode时,会有一个FPS丢弃.该设备冻结不到一秒钟.我做了很多研究和试验,注意到所有Apple的代码示例在放置对象时都会使这个FPS下降.无论是直接添加节点(scene.rootNode.addChild(child))还是在不同阶段(didUpdateAtTime,didApplyAnimations等等)的渲染器循环中添加节点都无关紧要.我发现一旦将一个对象添加到场景中,下一个添加的对象将立即呈现.我使用在SceneKit编辑器中创建的3D模型,克隆它以生成我的不同节点,然后将它们添加为子节点.我在放置物体之前做了这个装载工作.
仪器显示渲染器循环在冻结期间忙.
我找到的唯一解决方案是在开始整个体验之前将我的节点添加到加载屏幕后面的场景中.
这是游戏编程中使用它们之前渲染节点的正常行为吗?
多谢你们