我有一个SCNCamera场景设置,可以围绕一个对象旋转。
限制相机围绕物体旋转的最佳方式是什么?
示例:除了能够围绕整个球体旋转之外,我如何将旋转限制为单个半球?
我的第一个尝试是查看.allowsCameraControl是否存在任何限制。找不到任何东西。
然后,我尝试使用c#Unity:鼠标轨道脚本,不走运。
关于如何解决或解决此问题的一些指示将非常有用。
var lastWidthRatio: Float = 0
var lastHeightRatio: Float = 0
let camera = SCNCamera()
let cameraNode = SCNNode()
let cameraOrbit = SCNNode()
override func viewDidLoad() {
super.viewDidLoad()
// create a new scene
let scene = SCNScene(named: "art.scnassets/ship.scn")!
// create and add a camera to the scene
camera.usesOrthographicProjection = true
camera.orthographicScale = 9
camera.zNear = 0
camera.zFar = 100
cameraNode.position = SCNVector3(x: 0, y: 0, z: 50)
cameraNode.camera = camera
cameraOrbit.addChildNode(cameraNode)
scene.rootNode.addChildNode(cameraOrbit)
// retrieve the ship node
let ship = scene.rootNode.childNodeWithName("ship", recursively: true)!
// retrieve the SCNView
let scnView = self.view as! SCNView
// set the scene to the view
scnView.scene = scene
// add a tap gesture recognizer
let gesture = UIPanGestureRecognizer(target: self, action: "panDetected:");
scnView.addGestureRecognizer(gesture);
}
func panDetected(sender: UIPanGestureRecognizer) {
let translation = sender.translationInView(sender.view!)
let widthRatio = Float(translation.x) / Float(sender.view!.frame.size.width) + lastWidthRatio
let heightRatio = Float(translation.y) / Float(sender.view!.frame.size.height) + lastHeightRatio
self.cameraOrbit.eulerAngles.y = Float(-2 * M_PI) * widthRatio
self.cameraOrbit.eulerAngles.x = Float(-M_PI) * heightRatio
print(Float(-2 * M_PI) * widthRatio)
if (sender.state == .Ended) {
lastWidthRatio = widthRatio % 1
lastHeightRatio = heightRatio % 1
}
}
您似乎就快要到了,仅使用您引用的答案中的@Rickster代码。
您可以进行的更改将在以下几行中:
self.cameraOrbit.eulerAngles.y = Float(-2 * M_PI) * widthRatio
self.cameraOrbit.eulerAngles.x = Float(-M_PI) * heightRatio
隐含地允许俯仰和偏航覆盖整个球体。那是您可以进行限制的地方。例如eulerAngles.x
,您可以执行以下操作,而不是让音高()从0到-π变化
self.cameraOrbit.eulerAngles.x = Float(-M_PI_2) + Float(-M_PI_2) * heightRatio
使用全屏垂直滚动覆盖该范围,可以在-π/ 2和-π之间平滑地变化。或者,您可以在这两行中设置严格的最小/最大限制/检查,以约束到地球的特定区域。
(编辑以解决惯性注释)
对于旋转阻尼或惯性,我会使用内置的SceneKit
Physics进行处理,并可能将相机放在不可见(无几何形状)的SCNNode上。该相机节点变成了一个万向节,类似于本项目中采用的方法:一个完全由RubyMotion和SceneKit创建的交互式七英尺地球仪。
然后,虚拟万向节将SCNPhysicsBody
带有some(您添加,默认情况下不附带一个)damping
。或者,也许您将物理场放在中心对象上,然后给该对象一些东西angularDamping
。
问题内容: 我正在使用MySQL存储财务资料,并使用数据来构建每个帐户的所有交易记录等。出于性能方面的考虑-为了防止用户被庞大的表格所淹没-我对结果进行了分页。 现在,作为注册的一部分,我将显示该帐户的余额。因此,如果我每页显示20个事务,而我显示第二页,则使用如下数据: 事务0-19: 忽略它们-它们比正在查看的页面要新。 交易20-39: 从中选择所有内容-它们会显示出来。 事务40-??:
我想创造一个和乒乓球一样的游戏。我创建了一个沿着圆周移动的桨。注意桨是弧形的。我想知道我如何检测球和桨之间的碰撞。为了更好地理解这个:http://gyazo.com/7bac8acdf0faf66005015d496498ca33球将在圆圈内,当与桨碰撞时反射出去。提前感谢!
我想寻求有关使用巴比伦旋转的帮助。js框架。 我需要球体旋转45度,与对角圆对齐,对角圆有45度的方向,但我不明白。 我的代码在下面的链接中:https://codepen.io/polalas/pen/VwvaKwL 负责旋转的方法是loop()方法,每次渲染场景时都会触发该方法。 我想我对轮换处理不当。有人能帮忙吗?
我想让散点“紧密”,即没有松弛,两边没有数据。当我从ploly的留档运行代码时,没有松弛(相同的笔记本,相同的内核)。 我将不胜感激任何建议。
我和我的暴徒AI有麻烦 它在一定程度上起作用,但它的作用与我想要的相反,这意味着它向错误的方向旋转180度 这会告诉我目标在哪里,并计算出需要旋转的数字 它的弧度加上3.1etc等于180度,因为这样计算它的最小值为-3.141,最大值为3.141,但敌人的旋转是在0到6.28之间进行的,加上3.141使瞬变=在敌人旋转的范围内,而不是在敌人旋转的范围下3.141 不管怎么说,这就是我被困的地方。
Polar Electro Oy 对 Polar 产品提供全球有限保修。对于美国或加拿大的已出售产品,保修由 Polar Electro, Inc.提供。 Polar Electro Oy/Polar Electro Inc. 向 Polar 产品的原始消费者/购买者保证,自购买之日起两 (2) 年内,产品不会出现任何材料或工艺缺陷;不过若为硅胶腕带或塑料腕带,则保修期为自购买之日起一 (1) 年