以编程方式生成顶点

问题描述 投票:0回答:2

我有一个3D对象(SCNPlane)我想将这个平面划分为正方形。想法是将平面划分为平铺,每个平铺都有自己的纹理(纹理坐标)。并且图块的数量由用户界面控制。

enter image description here

在上面的图像中,平面被分成沿x轴的3个瓦片和沿y轴的3个瓦片,并且每个瓦片进一步被分成两个三角形。现在我正在尝试使用for循环来生成这些顶点。我是这个金属/ opengl世界的新手,如果有人能指出我正确的方向那将是伟大的。

谢谢

ios swift scenekit
2个回答
1
投票

这只是数学......

var x0 = 0, x1 = 1000
var y0 = 0, y1 = 1000

var ySplit = 4
var xSplit = 6

for y in (0..<ySplit).reverse() {

    var localY0 = y * ((y1 - y0) / ySplit)
    var localY1 = (y+1) * ((y1 - y0) / ySplit)

    for x in 0..<xSplit {

        var localX0 = x * ((x1 - x0) / xSplit)
        var localX1 = (x+1) * ((x1 - x0) / xSplit)

        //Now you can easily get any vertex/square/triangle set from the given (x0,y) (x1,y1)
    }
}

0
投票

SCNPlanewidthSegmentCountheightSegmentCount属性就是这样(见SCNPlane Reference)。

编辑如果您需要自定义纹理坐标,则必须使用SCNGeometry.init(sources:elements:)构建自定义几何体并自行计算顶点位置。

请注意,在Swift中你可以使用它

SCNGeometryElement.init(indices:primitiveType:)

以及iOS 10,tvOS 10,macOS 10.12和watchOS 3中的以下便捷初始化程序:

SCNGeometrySource.init(normals:)
SCNGeometrySource.init(textureCoordinates:)
SCNGeometrySource.init(vertices:)
© www.soinside.com 2019 - 2024. All rights reserved.