在SceneKit中,假设您要在半透明节点Parent中嵌入一个节点Child,这样Parent就像一个"笼子",您可以看到并查看Child.
具体地说,Parent表示半径为2的SCNSphere.Child是半径为1的SCNSphere,是Parent的子节点.
由于它在父母内部,因此儿童不可见.将Parent的不透明度设置为0.3或半透明的东西也会影响Child的不透明度,让您看到Child,但现在Child不再是完全不透明的.
你怎么能让孩子完全不透明,但仍可通过家长看到?
一个选项是Child一个独立节点,不再是Parent的子节点,而是手动计算将Child"inside"Parent中心所需的位置.但这需要每次父移动时手动移动Child,而当Child已经是Parent的子节点时,此移动自动发生.
有更好的方法吗?
我刚开始在我的UIKit应用程序中使用SceneKit,目的是显示和操作一些3D模型.我需要显示一个球体,上面写着一些短文.我正在渲染这样的球体:
let sphereGeometry = SCNSphere(radius: 1)
let sphereNode = SCNNode(geometry: sphereGeometry)
sphereNode.position = SCNVector3(x: -1, y: 0, z: 8)
sphereGeometry.firstMaterial?.diffuse.contents = UIColor.cyan
self.rootNode.addChildNode(sphereNode)
Run Code Online (Sandbox Code Playgroud)
我尝试使用a CATextLayer来实现我的需要,但我没有运气.这样做的正确方法是什么?
我试图让我的 SCNNode 自动水平旋转。这是我到目前为止的代码:
box.scale = SCNVector3(x: 0.26, y: 0.26, z: 0.26)
box.position = SCNVector3(0.15, 3.85, -3)
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.
是的,我试图更改主线程上的文本.没变.
我一直在尝试SCNMaterials,着重于发射以尝试创建霓虹灯材料。不知道是否可能,但是如果它可以发光,那就太好了。谢谢 :)
我是 SceneKit 的新手,所以我尝试做的事情完全有可能/很可能不是正确的方法。所以这是我的总体意图:
我正在建造一个玩家穿越的“隧道”。这是一个程序生成的隧道。我正在确定代表隧道网格的点的位置,然后将点与三角形连接在一起以对其进行蒙皮。我使用以下方法来生成我的三角形:
func addTriangleFromPositions(scene: SCNScene, point1: SCNVector3, point2: SCNVector3, point3: SCNVector3)
{
let vector12 = GLKVector3Make(point1.x - point2.x, point1.y - point2.y, point1.z - point2.z)
let vector32 = GLKVector3Make(point3.x - point2.x, point3.y - point2.y, point3.z - point2.z)
let normalVector = SCNVector3FromGLKVector3(GLKVector3CrossProduct(vector12, vector32))
let positions: [SCNVector3] = [point1, point2, point3]
let normals: [SCNVector3] = [normalVector, normalVector, normalVector]
let indices: [Int32] = [0, 2, 1]
let vertexSource = SCNGeometrySource(vertices: positions, count: positions.count)
let normalSource = SCNGeometrySource(normals: normals, count: normals.count)
let indexData …Run Code Online (Sandbox Code Playgroud) 所以我正在制作游戏,在游戏中,你将使用DPad在场景中移动你的球.虽然beta 4中存在同样的问题,但我正在使用Xcode 7 Beta 5.这是测试视图控制器的代码:
class TestController: UIViewController,DPadDelegate {
@IBOutlet var scnView:SCNView!
@IBOutlet var dpad:DPad!
var timer:NSTimer?
var update:NSTimer?
var colors = [UIColor.blueColor(),UIColor.redColor(),UIColor.whiteColor(),UIColor.yellowColor(),UIColor.cyanColor(),UIColor.orangeColor(),UIColor.magentaColor(),UIColor.purpleColor()]
var player:SCNNode!
var camera:SCNNode = SCNNode()
var i = 0
override func viewDidLoad() {
super.viewDidLoad()
NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "ColorCubeUpdate", userInfo: nil, repeats: true)
NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "updateCamera", userInfo: nil, repeats: true)
dpad.delegate = self
player = SCNNode(geometry: SCNSphere(radius: 0.25))
player.geometry?.firstMaterial?.diffuse.contents = UIImage(named: "PlainEyes1")
player.geometry?.firstMaterial?.multiply.contents = UIColor(red: 1.0, green: 0.5, blue: 0.5, alpha: 1.0)
player.position = …Run Code Online (Sandbox Code Playgroud) 我正在使用Apple的ARKit制作AR应用程序,并且想要绘制盒子的线框轮廓。代码中描述的和图片中所示的斜线在盒子的每个面上绘制了斜边。它也隐藏了盒子另一侧的角。场景工具包中是否有办法让我摆脱对角线并使之成为透明的框,从而显示所有边缘和顶点?
let box:SCNNode = SCNNode(geometry: SCNBox(width: CGFloat(0.1), height: CGFloat(0.1), length: CGFloat(0.1), chamferRadius: CGFloat(0)))
box.geometry?.firstMaterial?.fillMode = .lines
box.geometry?.firstMaterial?.diffuse.contents = UIColor.green
Run Code Online (Sandbox Code Playgroud)