Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SCNGeometry/SCNCylinder仅渲染边缘/边框(存储颜色,清除内容)_Ios_Opengl Es_Render_Scenekit_Metal - Fatal编程技术网

Ios SCNGeometry/SCNCylinder仅渲染边缘/边框(存储颜色,清除内容)

Ios SCNGeometry/SCNCylinder仅渲染边缘/边框(存储颜色,清除内容),ios,opengl-es,render,scenekit,metal,Ios,Opengl Es,Render,Scenekit,Metal,我正试图找出如何在sceen上有一个只有边框/笔划/边可见的SCNScylinder。我的场景中的一切都很好,我正在考虑对镜面反射内容应用清晰的颜色 是否需要使用SCNNode委托/金属代码(我没有在场景中使用opengl) 有什么建议吗?感谢您的帮助WWDC 2014演示文稿展示了只有线框的轨道立方体。这项技术是使用绿色边缘但内部透明的图像作为材料。从AAPLSlideScenegraphSummary.m: // A node that will help visualize

我正试图找出如何在sceen上有一个只有边框/笔划/边可见的SCNScylinder。我的场景中的一切都很好,我正在考虑对镜面反射内容应用清晰的颜色

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


有什么建议吗?感谢您的帮助

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

        // 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的类似效果,您可能需要传递一组材质,有些带有边框,有些没有边框

编辑


对于High Sierra/iOS 11及更高版本,@mnuages的答案是更简单/更好的方法

这需要一些努力,但您可以检查圆柱体的
geometryElements
geometrySources
来构建一个新的
SCNGeometry
原始类型
SCNGeometryPrimitiveTypeLine

编辑


启动iOS 11
SCNMaterial
会公开可用于将几何体渲染为线框的属性。

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

首先,我在Adobe Illustrator中创建了一个方形图像,它有绿色的边缘,但中间是透明的。这被称为“轮廓面”

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

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")
  }

}
导入UIKit
进口阿基特
类立方节点:SCNNode{
私有变量faceArray=[SCNMaterial]()
private let FACE_OUTLINE=“outlinedFace”
///仅使用大纲初始化
///
///-参数:
///-宽度:可选CGFloat(默认为20cm)
///-高度:可选CGFloat(默认为20cm)
///-长度:可选CGFloat(默认为20cm)
///-颜色:[UIColor]-[前、右、后、左、上、下]
初始值(宽度:CGFloat=0.2,高度:CGFloat=0.2,长度:CGFloat=0.2){
super.init()
self.geometry=SCNBox(宽度:宽度,高度:高度,长度:长度,倒角:0)
对于0中的uu..<6{
让面=SCN材质()
face.diffuse.contents=UIImage(名称:face\u OUTLINE)
face.isDoubleSided=真
face.lightingModel=.constant
faceArray.append(面)
}
self.geometry?.materials=faceArray
self.rotation=SCInvector4Make(0,1,0,pi/4)
}
必需的初始化?(编码器aDecoder:NSCoder){
fatalError(“初始化(编码者:)尚未实现”)
}
}
这里的关键是使内容双面


这对我来说太棒了

谢谢,哈尔,似乎正是我需要的我该怎么做?已搜索足够多,但无法获取任何资源:(您现在可以使用
scnmatary
fillMode
属性轻松实现这一点。由于我对该领域完全陌生,您能帮我编写一些代码吗?