我正在尝试使用场景工具包复制此立方体图像形状(获得原始创建者的许可).

到目前为止,我有线条和顶点的绘图代码.我无法使用图像,因为背景必须是透明的.
我正在尝试解决的具体问题是如何编辑SCNGeometryPrimitiveType.Line元素的笔触宽度.
我创建行的基本方法是这样的:
private func squareVertices(length: Float) -> [SCNVector3] {
let m = length/Float(2)
let topLeft = SCNVector3Make(-m-q, m+q, m+q)
let topRight = SCNVector3Make( m+q, m+q, m+q)
let bottomLeft = SCNVector3Make(-m-q, -m-q, m+q)
let bottomRight = SCNVector3Make( m+q, -m-q, m+q)
return [topLeft, topRight, bottomLeft, bottomRight]
}
private func cubeFace() -> SCNGeometry {
let vertices : [SCNVector3] = squareVertices(l)
let geoSrc = SCNGeometrySource(vertices: UnsafePointer<SCNVector3>(vertices), count: vertices.count)
// index buffer
let idx1 : [Int32] = [0, 3] …Run Code Online (Sandbox Code Playgroud) 我在iOS上使用SceneKit,我想要渲染为线框的几何体.所以基本上我只想绘制线条,所以没有纹理.
我发现我可以使用shaderModifiersused 的属性SCNMaterial来实现这一点.着色器修改器的示例:
material.shaderModifiers = [
SCNShaderModifierEntryPointFragment: "_output.color.rgb = vec3(1.0) - _output.color.rgb;"
]
Run Code Online (Sandbox Code Playgroud)
这个例子显然只是反转输出颜色.我对用于着色器片段的'GLSL'语言一无所知.
任何人都可以告诉我,我应该使用哪些代码作为着色器片段,仅在边缘附近绘制,以使几何看起来像线框?
或者可能还有一种将几何体渲染为线框的方法.我很乐意听到它.
我一直在使用带有Alpha的24位.png,来自Photoshop,只是尝试了一个与OpenGL ES配合得很好的.psd,但是Metal没有看到Alpha通道.
SceneKit中粒子绝对最高效的纹理格式是什么?
如果需要,这是一张要测试的表.
它看起来是白色的......右键单击并保存为空白区域.这是一套阿尔法重的戒指.如果你眯着眼睛看屏幕,你可能几乎不能把它们弄出来:
夸张的示例用例:
https://www.dropbox.com/s/vu4dvfl0aj3f50o/circless.mov?dl=0
//任何人的附加点都可以猜出视频中左右环之间的差异.
I am applying a force and a torque on an node. This is my code:
myNode?.physicsBody?.applyForce(SCNVector3Make(0, -6, 4), atPosition: SCNVector3Make(0, 1, -1), impulse: true)
myNode?.physicsBody?.applyForce(SCNVector3Make(0, -2, 10), impulse: true)
myNode?.physicsBody?.applyTorque(SCNVector4Make(4, 2, 2.5, 1.6), impulse: true)
Run Code Online (Sandbox Code Playgroud)
该物体现在倒下并随后从左向右移动.我希望它从右向左移动(基本上反映了第一次移动穿过y轴).我发现我对前两行代码的处理很少,因为力没有x分量.最后一行applyTorque是我需要操纵的那一行.如果矢量有4个分量,你如何在y轴上绘图?我对数学有点生疏
在过去的几天里,我一直在网上搜索无济于事.不幸的是,关于这个特定问题的苹果文档是模糊的,没有可用的示例代码(至少这是我发现的).您可能会问的问题似乎是什么......
我正在尝试将uiview的图层设置为用于渲染iPhone模型屏幕的材质内容(是的,幻觉:P).iPhone的屏幕UV映射设置为0到1,因此在将纹理/图层映射到纹素上时不会出现问题.
所以,不要让这个图层在iPhone上呈现,与左图像相同,相反,我将其渲染到iPhone上,就像右图一样
还要注意,当我设置一个断点并调试实际的iPhone节点并在Xcode中查看它时,会显示一个完全不同的渲染,当我继续执行时,该层会得到半固定:
现在......我如何解决这个问题??? 我尝试过使用漫反射内容变换矩阵,但没有任何修复.我也尝试将UIView调整为256x256(因为UV似乎是256x256,如blender所示 - 3d建模包),但这并没有解决任何问题.
这是图层的代码:
UIView *screen = [[UIView alloc] initWithFrame:self.view.bounds];
screen.backgroundColor = [UIColor redColor];
UIView *temp = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screen.bounds.size.width, 60)];
temp.backgroundColor = [UIColor colorWithRed:0 green:(112.f/255.f) blue:(235.f/255.f) alpha:1];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectInset(temp.bounds, 40, 0)];
label.frame = CGRectOffset(label.frame, 40, 0);
label.textColor = [UIColor colorWithRed:0 green:(48.f/255.f) blue:(84.f/255.f) alpha:1];
label.text = @"Select Track";
label.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:30];
label.minimumScaleFactor = 0.001;
label.adjustsFontSizeToFitWidth = YES;
label.lineBreakMode = NSLineBreakByClipping;
[temp addSubview:label];
UIView *separator = [[UIView …Run Code Online (Sandbox Code Playgroud) 我试图理解在ArKit中引入的不同元素与它们在SceneKit中的等价物之间的区别:
SCNNode.simdTransformVS SCNNode.transform.在ARKit中,似乎人们使用SCNNode.simdTransform而不是SCNNode.transform.他们有什么不同?simdTransform似乎使用列主要顺序,而transform(SCNMatrix4)是行主要.如何将一个转换为另一个?只需转置?我的印象是,如果我使用transform而不是跟踪,那么跟踪也不会有效simdTransform.这是预期的还是仅仅是一种印象?如果我设置了一个属性,如果我再设置另一个属性会怎样?
ARFrame.cameravs Scene.pointOfView:看看他们的转型,他们似乎有点不同:
.
// ARFrame.camera.transform (matrix_float4x4)
-0.01 0.99 -0.11 0.02
-0.99 0.00 0.11 0.06
0.10 0.11 0.98 0.0
0.0 0.0 0.0 1.0
// sceneView.pointOfView.transform (SCNMatrix4)
// or sceneView.pointOfView.simdTransform^T (matrix_float4x4)
0.99 0 0.11 0
0.01 0.99 -0.12 0
-0.11 0.11 0.98 0
0.03 0.6 0.0 0.99
Run Code Online (Sandbox Code Playgroud)
它们是相同的减一轮吗?
我正在尝试开发一个基本游戏,我有一个场景,其中有几个子节点添加到根节点.每个节点都有两个名称之一,friend或者enemy.
如果用户触摸其中一个enemy节点,我想删除所有已命名的子节点enemy.
我尝试过几件事,但似乎无法正常工作.
在我的touchesBegan功能:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first!
let location = touch.location(in: gameView)
let hitList = gameView.hitTest(location, options: nil)
if let hitObject = hitList.first {
let node = hitObject.node
//This doesn't work
gameScene.rootNode.childNodes(passingTest: { (node, UnsafeMutablePointer<ObjCBool>) -> Bool in
node.removeFromParentNode()
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用,gameScene.rootNode.enumerateChildNodes(withName:)但我也无法使用.
我可以得到的是,如果我在那里做类似的事情:
if node.name == "enemy" {
node.removeFromParentNode()
}
Run Code Online (Sandbox Code Playgroud)
但是,这只会删除被击中的单个节点,而不是所有节点.如何在Swift with Scene Kit中获取具有特定名称的所有子节点?
在 中ARKit,当我执行命中测试时,我会返回一个ARHitTestResult. 这个的属性之一是worldTransform,我理解它包含对象位置的4x4变换矩阵 – simd_float4x4。
作为对线性代数和 3D 图形非常不熟悉的人,我将如何编辑此矩阵以将其y坐标增加0.05?
如果有博客文章或我可以查看的内容可以帮助我解决这个问题,请告诉我。我不确定我应该用谷歌搜索哪些术语。
对不起,如果我的问题充满了误解!您可能会说,我对这些概念不太熟悉。
感谢任何帮助的人。
我想打开一个 3D 模型并使其背景透明,以便我可以看到 SceneView 后面的 UI。我试过这段代码,但 sceneView 变成白色,不透明。
struct ModelView: View {
var body: some View {
ZStack {
Text("Behind Text Behind Text Behind Text")
SceneView(
scene: { () -> SCNScene in
let scene = SCNScene()
scene.background.contents = UIColor.clear
return scene
}(),
pointOfView: { () -> SCNNode in
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 10)
return cameraNode
}(),
options: [
.allowsCameraControl,
.temporalAntialiasingEnabled,
]
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用 XCode 12.5 和 iPhone …
我创建了一个游戏SceneKit scene成UIViewController.
我实现了UITapGestureRecognizer这样的:
// TAP GESTURE
let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
sceneView.overlaySKScene?.view!.addGestureRecognizer(tapGesture)
Run Code Online (Sandbox Code Playgroud)
而handleTap功能:
func handleTap(sender: UIGestureRecognizer) {
if sender.state == UIGestureRecognizerState.Ended {
var touchLocation = sender.locationInView(sender.view)
touchLocation = self.view.convertPoint(touchLocation, toView: self.view)
let touchedNode = sceneView.overlaySKScene?.nodeAtPoint(touchLocation)
if touchedNode == myNode {
// DO SOMETHING
}
}
}
Run Code Online (Sandbox Code Playgroud)
想象一下,myNode这个位置是(x: 150.0, y: 150.0).问题在于它与'sy位置' touchPosition.y的y位置相反myNode.
如何反转触摸的y位置?
谢谢 !