我有一个3D对象(SCNPlane
)我想将这个平面分成正方形。想法是将飞机划分成瓦片,每个瓦片都有自己的纹理(纹理坐标)。并且瓦片的数量由用户界面控制。以编程方式生成顶点
在上述图像平面被分成沿x轴3瓷砖和沿y轴的3瓷砖和每个区块被进一步分成两个三角形。现在我正在尝试使用for循环来生成这些顶点。我对这个金属/ opengl世界是陌生的,如果任何人都能指出我的方向是正确的,那将是非常棒的。
感谢
我有一个3D对象(SCNPlane
)我想将这个平面分成正方形。想法是将飞机划分成瓦片,每个瓦片都有自己的纹理(纹理坐标)。并且瓦片的数量由用户界面控制。以编程方式生成顶点
在上述图像平面被分成沿x轴3瓷砖和沿y轴的3瓷砖和每个区块被进一步分成两个三角形。现在我正在尝试使用for循环来生成这些顶点。我对这个金属/ opengl世界是陌生的,如果任何人都能指出我的方向是正确的,那将是非常棒的。
感谢
这只是数学...
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)
}
}
SCNPlane
有widthSegmentCount
和heightSegmentCount
性质做到这一点(见SCNPlane Reference)。
编辑 如果您需要自定义纹理坐标,那么你就必须建立使用SCNGeometry.init(sources:elements:)
定制的几何形状和计算顶点位置自己。
注意,在斯威夫特你有得心应手
SCNGeometryElement.init(indices:primitiveType:)
和iOS的10,10 tvOS,MACOS 10.12和watchOS 3以下便利初始化:
SCNGeometrySource.init(normals:)
SCNGeometrySource.init(textureCoordinates:)
SCNGeometrySource.init(vertices:)
感谢。这就是我所做的,你我更清洁。这是唯一的方法,或者像金属或OpenGLES这样的图形工具包中有可用的api,它们实际上将平面划分为顶点并返回顶点 – krishnan