首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCNGeometry / SCNCylinder只呈现边缘/边框(存储颜色,内容清晰)

SCNGeometry / SCNCylinder只呈现边缘/边框(存储颜色,内容清晰)
EN

Stack Overflow用户
提问于 2016-03-07 16:18:13
回答 3查看 2.5K关注 0票数 6

我正在努力弄清楚如何在sceen上有一个只有边框/笔画/边可见的SCNScylinder。我的场景一切都很好,我正在考虑给specular.contents涂上一种清晰的颜色。

是否需要使用SCNNode委托/金属代码(我没有在场景中使用opengl )

有什么指示吗?我们很感谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-08 03:44:25

WWDC 2014的演示展示了轨道立方体,这些立方体只有线框。该技术是使用绿色边缘,但透明的内部作为材料的图像。来自AAPLSlideScenegraphSummary.m:

代码语言:javascript
复制
        // A node that will help visualize the position of the stars
        _wireframeBoxNode = [SCNNode node];
        _wireframeBoxNode.rotation = SCNVector4Make(0, 1, 0, M_PI_4);
        _wireframeBoxNode.geometry = [SCNBox boxWithWidth:1 height:1 length:1 chamferRadius:0];
        _wireframeBoxNode.geometry.firstMaterial.diffuse.contents = [NSImage imageNamed:@"box_wireframe"];
        _wireframeBoxNode.geometry.firstMaterial.lightingModelName = SCNLightingModelConstant; // no lighting
        _wireframeBoxNode.geometry.firstMaterial.doubleSided = YES; // double sided

为了在SCNCylinder中实现类似的效果,您可能需要传递一系列的材料,有些是边框的,有些则没有。

编辑

对于高塞拉/iOS 11及更高版本,@mnuages的答案是一个更简单/更好的方法。

票数 6
EN

Stack Overflow用户

发布于 2016-03-08 15:38:40

这需要一些努力,但您可以检查您的气缸的geometryElementsgeometrySources,以建立一个新的SCNGeometryprimitiveType of SCNGeometryPrimitiveTypeLine

编辑

启动iOS 11 SCNMaterial将公开fillMode属性,该属性可用于将几何呈现为线框。

票数 5
EN

Stack Overflow用户

发布于 2018-02-18 03:59:08

我理解这是一篇老文章,但我最近不得不实现类似于ARKit项目的东西。

首先,我在中创建了一个方形图像,它有绿色的边缘,但有一个透明的中心。这就是所谓的“总结性”。

然后我创建了一个SCNNode (Swift 4),如下所示:

代码语言:javascript
复制
import UIKit
import ARKit

class CubeNode: SCNNode {

private var faceArray = [SCNMaterial]()
private let FACE_OUTLINE = "outlinedFace"

/// Initialization With Outline Only
///
/// - Parameters:
///   - width: Optional CGFloat (Defaults To 20cm)
///   - height: Optional CGFloat (Defaults To 20cm)
///   - length: Optional CGFloat (Defaults To 20cm)
///   - colours: [UIColor] - [Front, Right , Back , Left, Top , Bottom]
init(width: CGFloat = 0.2, height: CGFloat = 0.2, length: CGFloat = 0.2) {

    super.init()

    self.geometry = SCNBox(width: width, height: height, length: length, chamferRadius: 0)

        for _ in 0 ..< 6{
            let face = SCNMaterial()
            face.diffuse.contents = UIImage(named: FACE_OUTLINE)
            face.isDoubleSided = true
            face.lightingModel = .constant
            faceArray.append(face)
        }

    self.geometry?.materials = faceArray
    self.rotation = SCNVector4Make(0, 1, 0, .pi / 4)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

}

这里的关键是使内容加倍。

这对我来说真是太棒了!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35848686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档