2017-08-14 18 views
0

私はカスタムジオメトリ四角形を持っていて、テクスチャイメージが表示されていますが、スペースに合わせて伸縮するのではなく、アスペクトフィルとして表示します。SCNMaterialがストレッチを防ぐ

部屋の複数の壁に同じテクスチャを適用していますので、画像が壁紙の場合は正しく見える必要があります。

次の方法を使用して、それがどのように満たされるかを判断する方法はありますか?

quadNode.geometry?.firstMaterial?.diffuse.contents = UIImage(named: "wallpaper3.jpg") 

私は、これはあなたを助けるかもしれないと思うおかげ

[UPDATE]

let quadNode = SCNNode(geometry: quad) 

let (min, max) = quadNode.boundingBox 

let width = CGFloat(max.x - min.x) 
let height = CGFloat(max.y - min.y) 

let material = SCNMaterial() 
material.diffuse.contents = UIImage(named: "wallpaper3.jpg") 
material.diffuse.contentsTransform = SCNMatrix4MakeScale(Float(width), Float(height), 1) 
material.diffuse.wrapS = SCNWrapMode.repeat 
material.diffuse.wrapT = SCNWrapMode.repeat 

quadNode.geometry?.firstMaterial = material 

答えて

1

は、それは客観Cであるが、それは理解できるようになります。

CGFloat width = self.planeGeometry.width; 
    CGFloat height = self.planeGeometry.length; 

    SCNMaterial *material = self.planeGeometry.materials[4]; 
    material.diffuse.contentsTransform = SCNMatrix4MakeScale(width, height, 1); 
    material.diffuse.wrapS = SCNWrapModeRepeat; 
    material.diffuse.wrapT = SCNWrapModeRepeat; 

平面形状は、次のように定義される:

self.planeGeometry = [SCNBox boxWithWidth:width height:planeHeight length:length chamferRadius:0]; 
//planeHeight = 0.01; 

私はこれを使って水平面を表示していますが、それが作られた素材は引き伸ばされず、単に伸びています。あなたが必要としていることを願っています。

平面の寸法は次のように定義される:(それが必要とされる包み)

float width = anchor.extent.x; 
float length = anchor.extent.z; 

これはARPlaneAnchor平面上に見出さ使用initWithAnchor方法で行われています。

+0

多くの方に感謝アラン、私はスイフトに変換し、それがどうなるか見てみましょう。 –

+0

問題ありません。Marc、変数をもう少し説明するコードをいくつか追加しました。 –

+0

私はあなたの上に基づいて新しいコードで私の元の質問を更新しました。間違ったことが見える?アスペクトの塗りつぶしとして表示するのではなく、デザインを壊すようになっています。 これはARKitで生成されたもので、幅は0.06と高さ2.0となっていますので、かなり短い、背の高い壁です。壁紙のグラフィックは1200x800ですが、私はさまざまなサイズのものを試しました。 おかあさん –

関連する問題