我有一個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