SceneKit是一个高级框架,用于为iOS,OS X,tvOS和watchOS构建3D用户界面,数据可视化和休闲游戏。
如何继承 SCNNode 并使用采用 MDLObject 的 init?
我需要子类化 SCNNode 并使用采用 MDLObject 的 init(这不是指定的 init)。 公共类 MyModelNode: SCNNode { 公共变量 geo: SCNGeometry! 私有函数 dfs(节点:
我使用 SK3DNode 在屏幕上显示一些 3D 模型文件。它们的尺寸不同,但我想在屏幕上显示它们或多或少相同的尺寸。 我有以下代码: 公共扩展
我正在使用示例代码:https://github.com/laanlabs/SCNTechniqueGlow。此代码使用 SCNTechnique 使 3d 模型发光。 现在我想将发光功能移至框架而不是......
我正在按照一些示例代码(https://github.com/laanlabs/SCNTechniqueGlow)使用SCNTechnique向3D模型添加边框。代码将技术设置为SCNView: scnView.technique = 技术
我有一个场景套件节点,我想为其添加发光效果。 让 newScene = SCNScene(命名为:“art.scnassets/cubeOne.scn”)! let newNode = (newScene.rootNode.childNode(withName: "cubeOne...
我有以下最小可重现代码: 类 GameViewController: UIViewController { 覆盖 func viewDidLoad() { super.viewDidLoad() 如果让 view = self.view as! SKView? ...
我有这个最小的可重现代码: 类 GameViewController: UIViewController { 覆盖 func viewDidLoad() { super.viewDidLoad() 如果让 view = self.view as! SKView? { ...
我正在尝试在 SceneKit 几何修改器中获取 RGB 值,并使用该值来定位我的几何体。 这是我的着色器中的内容。 #包括 #包括 我正在尝试在 SceneKit 几何修改器中获取 RGB 值,并使用该值来定位我的几何体。 这是我的着色器中的内容。 #include <metal_stdlib> #include <simd/simd.h> #include <metal_texture> #pragma arguments texture2d terrainRGB; #pragma transparent #pragma body constexpr sampler textureSampler(coord::normalized, address::clamp_to_edge, filter::nearest, mip_filter::nearest); float4 elevation = terrainRGB.sample(textureSampler, _geometry.texcoords[kSCNTexcoordCount-1]); float r = elevation.r * 256; float g = elevation.g * 256; float b = elevation.b * 256; float rgbExpression = (r * 256.0 * 256.0) + (g * 256.0) + b; float e = -10000.0 + (rgbExpression * 0.1); _geometry.position.z = e; 然后我像这样设置我的几何图形。 let geo = geo = SCNGeometry(...) let texture = SCNMaterialProperty(contents: img) geo.setValue(texture, forKeyPath: "terrainRGB") 如果我将高程编码为几何法线,则使用法线而不是纹理来获取高程,此代码可以正常工作。 但我不想使用法线,因为这会改变光源在我的场景中的工作方式。 我不知道应该将什么数据类型传递给 geo.setValue() 才能在着色器中与 texture2d 一起使用。 或者我还应该对修改后的几何体进行其他操作以传递纹理并能够在修改器中对其进行采样。 事实证明,我需要做三件事才能完成这项工作。 我需要将 MTLTexture 传递给 SCNMaterialProperty 而不是 UIImage。 我需要在 SCNMaterialProperty 上设置过滤器,以匹配几何修改器中 sampler 上的过滤器。 (我不确定其他组合是否有效,这正是我必须对我的案例所做的。) 我必须将我的图像转换为CGColorSpace.genericRGBLinear。 我的 sRGB 色彩空间图像。 我不太清楚为什么我必须这样做。 我设置了一个顶点着色器来使用 RealityKit 执行完全相同的操作,并且它与 sRGB 图像配合得很好。 这是我在 SCNGeometry 上设置纹理的最终代码。 if let cgImg = image.cgImage, let colorSpace = CGColorSpace(name: CGColorSpace.genericRGBLinear), let textureImg = cgImg.copy(colorSpace: colorSpace), let d = self.sceneDevice { //an MTLDevice do { let textureLoader = MTKTextureLoader(device: d) let texture = try textureLoader.newTexture(cgImage: textureImg) let scnTexture = SCNMaterialProperty(contents: texture) scnTexture.minificationFilter = .nearest scnTexture.magnificationFilter = .nearest scnTexture.wrapS = .clamp scnTexture.wrapT = .clamp geo.setValue(scnTexture, forKeyPath: "terrainRGB") } catch { print("Error: \(error)") } }
SCNTransaction 不会在场景加载时运行,除非先点击场景
我正在以编程方式创建 SceneKit,并且我想重点关注使用下面的此方法添加的所有节点。并将它们包装在 SCNTransaction 中以动画化运动。 @objc 功能
SCNNode 边界框在 SceneKit 中缩放或旋转后未更新
我有这个代码: 让盒子= SCNBox(宽度:1,高度:2,长度:4,chamferRadius:0.2) box.firstMaterial?.diffuse.contents = UIColor.yellow box.firstMaterial?.emission.contents = UIColor.
RealityView iOS 18 如何使用触摸拖动手势精确移动实体
使用 iOS 18 RealityView 非常方便地替换 SceneKit 创建 3d 但当涉及到使用 2d 触摸和拖动移动 3d 实体时,我面临一个问题,我无法做出准确的移动,就像
我创建了一个简单的项目来尝试 SceneKit,添加了一个包含一个男人角色和一个相机的场景。 问题是代码在模拟器和设备上的行为不同。 当
SceneKit/ARKit 地板反射反射CategoryBitMask
我需要在场景中有一个地板,它只能反射一些物体,而不是全部。我用这样的方式创建了一个地板: 让地板 = SCNFloor() 地板.firstMaterial!.lightingModel = .constant
我遇到了 SceneKit 的问题。 我正在开发一款 3D 手机游戏。我有一个角色 3D 模型和几个骨骼动画 CAAnimation。我从 Maya 导入模型和动画...
我有一个外侧有纹理的球体。我希望纹理位于球体的内部。外部应该是透明的,因此两侧的纹理不起作用。 我想用 sp...
iOS 中的画中画失败,并表示activationState 不是foregroundActive,但它实际上是foregroundActive
我正在iOS上实现画中画。我添加了后台模式功能。当我调用 isPictureInPicturePossible 时,它返回 false 并出现错误: 画中画控制器
我正在使用 SceneKit 和 DAE 环境以及 mixamo 中的角色,我一直在寻找方法来显示加载屏幕,同时所有内容都最好在 SwiftUI 中加载,而不是冻结...
如何防止 iOS 18 的屏幕录制,isCaptured 已弃用,而替换 sceneCaptureState 不适用于非基于场景的应用程序?
我的App非常敏感,必须防止录屏 使用 UIScreen.main.isCaptured 和 UIScreen.capturedDidChangeNotification 工作正常,但对于 iOS 18,它变得不推荐使用......
如何获取 3D 对象 RealityKit 表面上的点并用线连接这些点
我目前正在开发一个项目,您可以将 usdz 文件加载到 Realitiykit 中。我对这个 API 还比较陌生。我想要的是预览 usdz 对象并能够选择一些
SCNMaterialProperty.contents 的文档指出它是一个可设置动画的属性,实际上我可以在两种颜色之间执行交叉淡入淡出。但是我无法在两个图像之间交叉淡入淡出...