我有两个盒子。顶部的框具有连接的动态PhysicalBody,底部的框具有连接的静态主体。
physicShapes使用以下方法创建:
topBox.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Dynamic, shape: nil)
bottomBox.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: nil)
Run Code Online (Sandbox Code Playgroud)
当它们静止时,顶部的框比应有的高,这表明PhysicalShape大于应有的形状。这是静止的对象:
如何创建与要附加节点的几何形状相同的大小/形状的物理形状?
仅供参考:该SCNScene
文件来自从Cheetah 3D导出的导入DAE文件。
如何禁止在SceneKit中旋转节点?
例如,我想要一个模型(锥形)是动态的,跳跃的和飞行的,但总是垂直定向的?
我在苹果的车辆演示中尝试修复它,这是一个糟糕的解决方案.我也尝试了下面的代码,但模型只是缓慢而且小故障掉了下来
?- (void)renderer:(id<SCNSceneRenderer>)aRenderer didSimulatePhysicsAtTime:(NSTimeInterval)time{
_node.rotation = SCNVector4Make(0, 0, 0, 0);
//[_node.physicsBody resetTransform]; // - tried this too
}
Run Code Online (Sandbox Code Playgroud)
...最后我在scenekit手册中没有找到任何"allowRotation = NO".
有人让SCNMorpher工作吗?如果是这样,您到底做了什么?
我现在使用的是一个小型测试程序,该程序应该显示一个红色的圆锥体,当我点击屏幕时,它应该(应该!)将其变形为球形/球形。但是唯一发生的是,第一个几何图形消失了(变得非常小),而第二个几何图形(Morphers第一个目标)却从未出现。
我必须错过一些非常简单的事情。有人可以让我骑马吗?
import SceneKit
private let DISTANCE_FAKTOR = CGFloat(sqrt(3.0)/2.0)
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let (scene, view) = configScene(self.view.frame)
self.view = view
// Position camera to see picture full screen and light at same position
let pov = SCNVector3(x: 0.0, y: 0.0, z: Float(max(view.frame.width, view.frame.height) * DISTANCE_FAKTOR))
let pol = SCNVector3(x: 0.0, y: 0.0, z: Float(max(view.frame.width, view.frame.height) * DISTANCE_FAKTOR))
scene.rootNode.addChildNode(makeShapes()) // Create and add background plane
scene.rootNode.addChildNode(makeCamera(pov)) // Add camera to scene
scene.rootNode.addChildNode(makeLight(pol)) // Add …
Run Code Online (Sandbox Code Playgroud) 我正在阅读陀螺仪并将SCNText
几何形状的弦更改为陀螺仪的偏航值.这种变化发生在陀螺仪处理器内部,每1/30秒调用一次.在SCNText
几何与Interface Builder中创建.
我正在使用此代码来检索对文本的引用:
SCNNode *textNode = [scene.rootNode childNodeWithName:@"yawText" recursively:YES];
self.text = [textNode geometry];
//self.txt is declared as @property (strong, nonatomic) SCNText *text;
Run Code Online (Sandbox Code Playgroud)
稍后在陀螺仪手柄上我这样做:
CGFloat yaw = convertToDegrees(attitude.yaw);
[weakSelfText setString:[NSString stringWithFormat:@"%.1f", yaw]];
NSLog(@"yaw = %1f", yaw);
// I had to declare weakSelfText outside the gyro handler
// because Xcode was complaining
// weakSelfText is declared like this
// __weak typeof(self.text) weakSelfText = self.text;
Run Code Online (Sandbox Code Playgroud)
NSLog
正确打印值但是没有变化SCNText
.
是的,我试图更改主线程上的文本.没变.
下面的代码用于创建场景并在SceneKit中创建块.根据我们的用户,这些街区看起来平坦而不是"足够3D".截图1-2显示了我们的应用程序.
屏幕截图3-5显示了用户期望块看起来像什么,更像3D.
在与不同的人交谈之后,对于如何渲染看起来更像截图3-5的块有不同的看法.有人说使用环境遮挡,其他人说体素照明,有人说使用聚光灯和使用阴影或定向照明.
我们以前尝试添加全向照明,但这不起作用,因此它被删除.正如您在代码中看到的那样,我们还尝试了环境光节点,但也没有产生正确的结果.
渲染我们的块并获得与截图3-5类似的外观的最佳方法是什么?
注意:我们理解代码未针对性能进行优化,即显示的多边形不应显示.好的,可以.重点不在于性能,而在于实现更多类似3D的渲染.您可以假设节点有一些硬限制,例如场景中不超过1K或10K.
码:
func createScene() {
// Set scene view
let scene = SCNScene()
sceneView.jitteringEnabled = true
sceneView.scene = scene
// Add camera node
sceneView.pointOfView = cameraNode
// Make delegate to capture screenshots
sceneView.delegate = self
// Set ambient lighting
let ambientLightNode = SCNNode()
ambientLightNode.light = SCNLight()
ambientLightNode.light!.type = SCNLightTypeAmbient
ambientLightNode.light!.color = UIColor(white: 0.50, alpha: 1.0)
//scene.rootNode.addChildNode(ambientLightNode)
//sceneView.autoenablesDefaultLighting = true
// Set floor
setFloor()
// Set sky
setSky()
// Set initial position for user node
userNode.position …
Run Code Online (Sandbox Code Playgroud) 我正在开发AR应用程序.我有一个SceneKit场景被渲染到SCNView(使用OpenGL ES作为渲染API).在此下方是另一个显示相机实时预览的视图.我想创建一个包含视频和3D场景的电影.
我正在使用基于Apple的RosyWriter示例代码的代码来处理带有OpenGL着色器的视频帧像素缓冲区.我认为我不太了解这些概念,因为我不确定如何在视频帧上叠加SceneKit渲染.我可以从SCNView/SCNSceneRenderer获取像素缓冲区,还是需要使用SCNRenderer将场景重新渲染到OpenGL捕获管道用于处理视频帧的屏幕外缓冲区中的纹理?
我试图遵循与圆柱体,盒子......相同的简单逻辑,所以只需定义textNode的位置,但它不起作用.
func makeText(text3D: String, position: SCNVector3, depthOfText: CGFloat, color: NSColor, transparency: CGFloat) -> SCNNode
{
let textTodraw = SCNText(string: text3D, extrusionDepth: depthOfText)
textTodraw.firstMaterial?.transparency = transparency
textTodraw.firstMaterial?.diffuse.contents = color
let textNode = SCNNode(geometry: textTodraw)
textNode.position = position
return textNode
}
Run Code Online (Sandbox Code Playgroud) 我打算画很多线SceneKit
.我搜索了如何绘制线条并找到了答案
它适用于我,除了它不适合绘制大量的线条.当我绘制数万行时,占用的RAM将是可怕的(n Gb).
我想知道是否有办法可以有效地绘制大量的线条.我只需要3D线,其从 - 到协调和长度可能不同.
我设置了tapGestureRecognizer来检测ARSceneKit场景中对象的点击.我在handleTap方法中设置的hitTest方法在我非常接近对象时工作正常,但是当我走得更远时,hitTest方法总是失败.
我想在我的APP中创建一个Animoji.但是,当我与一些设计师联系时,他们不知道如何设计Animoji 3D模型.我在哪里可以找到供参考的解决方案?
解决方法我认为是创建3D模型的脸许多骨头,而当我得到blendShapes
的ARFaceAnchor
,其中包含脸部表情的详细信息,然后我用它来更新部分人脸的骨骼动画.
谢谢你的阅读.任何建议表示赞赏.