簡體   English   中英

SCNBox – Map 六面中的五面紋理

[英]SCNBox – Map a texture onto five of six sides

我正在嘗試使用 SCNBox 在 SceneKit 中創建類似 canvas 的SCNBox ,其中UIImage從一個表面“包裹”到與其相鄰的其他四個表面上。

目前我能想到的唯一方法是將UIImage分成五個單獨的圖像並將它們作為材料放在側面,但我相信一定有更簡單的方法。

誰能在這里引導我朝着正確的方向前進? 盒子在“正面”的對面將有一個單獨的紋理/材料。

在此處輸入圖像描述

您可以使用SCNMaterialProperty中的contentsTransform屬性,將所需的紋理坐標從圖像調整到SCNBox

一些簡化示例的解釋:

讓我們假設你正在使用立方體並且你有這樣的紋理在此處輸入圖像描述

通過將其分成矩形,您將擁有在此處輸入圖像描述

你想跳過矩形1, 3, 7, 9並用這個紋理覆蓋你的立方體。 為此,只需將SCNBox的邊尺寸標准化為 0 到 1 之間,並使用它來設置contentsTransform矩陣中的比例和變換。

在我的示例中,我有一個邊長相等的立方體 - 因此它將成為整個紋理的第三部分。 從紋理中取出5矩形

let normalizedWidth = 1/3
let normilizedHeight = 1/3

let xOffset = 1 //skip 1,4,7 line
let yOffset = 1 //skip 1,2,3 line
let sideMaterial = SCNMaterial()
sideMaterial.diffuse.contents = textureImage
let scaleMatrix = SCNMatrix4MakeScale(normalizedWidth, normilizedHeight, 0.0)
sideMaterial.diffuse.contentsTransform = SCNMatrix4Translate(scaleMatrix, 
normalizedWidth * xOffset, yOffset * yOffset, 0.0)

您可以用配置的材料填充 5 個面,最后一個(在背面)只用顏色填充,並將它們設置為SCNBoxmaterials屬性。 結果你會得到

在此處輸入圖像描述

最簡單的方法可能是使用+geometryWithSources:elements:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM