深入浅出ARKit

来源:互联网 发布:windows找不到cdm 编辑:程序博客网 时间:2024/05/20 05:08

OpenGL中描述几何图形的方法是用顶点(vertice)和指号(indice), 在SceneKit中也完全一样.

SCNGeometrySource

SCNGeometrySource 在SceneKit中就是顶点的集合. 这些点用来构成一个几何图形. 下面的代码就创建了一个SCNGeometrySource对象,包含有2个顶点, 可以用来绘制一条直线.

let vertice1 = SCNVector3(x1, y1, z1)
let vertice2 = SCNVector3(x2, y2, z2)
let source = SCNGeometrySource(vertices: [vertice1, vertice2])

SCNGeometryElement

SCNGeometryElement 在SceneKit中用来描述如何把SCNGeometrySource中的顶点构成基本的几何图形. SCNGeometryPrimitiveType定义了在SceneKit所支持的基本几何图形的种类, 跟OpenGL很相似, 一共有4种:

case triangles // 三角形, 每个三角形用SCNGeometrySource的三个顶点来描述
case triangleStrip // 三角形, 跟triangles不同的是, 第一个三角形需要3个顶点来描述, 以后每个三角形都用一个新的顶点加上前面相邻的三角形两个相邻的顶点描述
case line // 线段, 用二个顶点描述
case point // 点, 用一个顶点描述

下面的代码可以用来绘制一个三角形

let vertice1 = SCNVector3(x1, y1, z1)
let vertice2 = SCNVector3(x2, y2, z2)
let vertice3 = SCNVector3(x3, y3, z3)
let source = SCNGeometrySource(vertices: [vertice1, vertice2, vertice3])
let indices = [0, 1, 2]
let element = SCNGeometryElement(indices: indices, primitiveType: .triangles)

SCNGeometry

SCNGeometry 描述了SceneKit 可以渲染的几何形状, 它可以由SCNGeometrySource和SCNGeometryElement来构造, 一个SCNGeometry 可以包含多个SCNGeometrySource和SCNGeometryElement对象. 除了顶点(vertice)和指号(indice)之外, SCNGeometry 还可以通过SCNMaterial定义几何形状表面的颜色或者纹理, SCNLight 定义光照效果, SCNProgram 设计OpenGL或者Metal着色语言等等, 下面代码来创建了一个三角形的几何体:

let vertice1 = SCNVector3(x1, y1, z1)
let vertice2 = SCNVector3(x2, y2, z2)
let vertice3 = SCNVector3(x3, y3, z3)
let source = SCNGeometrySource(vertices: [vertice1, vertice2, vertice3])
let indices = [0, 1, 2]
let element = SCNGeometryElement(indices: indices, primitiveType: .triangles)
let geometry = SCNGeometry(sources:[source], elements: [element])

三角形虽然是最基本的几何形状, 但是很多三角形组合, 可以构成复杂的立体图形, 下面的茶壶就是由多个三角形构成的。
这里写图片描述

Reference

  • https://developer.apple.com/documentation/scenekit
  • https://developer.apple.com/documentation/arkit
原创粉丝点击