【问题标题】:Scenekit - adding UIImage material to custom geometryScenekit - 将 UIImage 材质添加到自定义几何体
【发布时间】:2018-01-20 01:10:45
【问题描述】:

我在 ARKit 中运行它,如果你尝试一下,三角形会出现(非常高)和 2 在相机的右侧,平移一点。我遇到的问题是我无法将图像材质应用于对象,我可以更改它的颜色,但不能应用图像:

所以这行得通:

triangle.firstMaterial?.diffuse.contents = UIColor.red

但这不是:

triangle.firstMaterial?.diffuse.contents = UIImage(named: "wallpaper.jpg")

这是来自 Xcode9 中新 ARKit 项目的完整 ViewController 代码:

import UIKit
import SceneKit
import ARKit

class ViewController: UIViewController, ARSCNViewDelegate {

    @IBOutlet var sceneView: ARSCNView!

    override func viewDidLoad() {
        super.viewDidLoad()

        sceneView.delegate = self

        let scene = SCNScene()

        let triangle = SCNGeometry.triangleFrom(vector1: SCNVector3(x: 0.059511181, y: -0.181795284, z: -0.0939711183), vector2: SCNVector3(x: 0.113824688, y: -0.181780666, z: -0.0674673915), vector3: SCNVector3(x: 0.113824688, y: 1.8182193, z: -0.0674673915))

        triangle.firstMaterial?.diffuse.contents = UIImage(named: "wallpaper.jpg")

        let triangleNode = SCNNode(geometry: triangle)

        triangleNode.name = "Triangle"

        scene.rootNode.addChildNode(triangleNode)

        sceneView.scene = scene

    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        // Create a session configuration
        let configuration = ARWorldTrackingSessionConfiguration()

        // Run the view's session
        sceneView.session.run(configuration)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        sceneView.session.pause()
    }

}

extension SCNGeometry {
    class func triangleFrom(vector1: SCNVector3, vector2: SCNVector3, vector3: SCNVector3) -> SCNGeometry {

        let indices: [Int32] = [0, 1, 2]

        let source = SCNGeometrySource(vertices: [vector1, vector2, vector3])

        let element = SCNGeometryElement(indices: indices, primitiveType: .triangles)

        return SCNGeometry(sources: [source], elements: [element])
    }
}

我唯一没有包含的是纹理图像,但任何下载的图像都可以。

谢谢

【问题讨论】:

    标签: ios swift3 scenekit arkit


    【解决方案1】:

    为了能够将纹理映射到几何体上,除了顶点的位置之外,SceneKit 还需要具有语义 .texcoord 的几何体源。

    【讨论】:

    猜你喜欢
    • 2019-08-25
    • 2016-11-25
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2017-09-06
    • 2019-10-24
    • 2018-08-06
    相关资源
    最近更新 更多