2017-02-20 4 views
2

enter image description hereが正しい方法

にテクスチャを考えると、フォトフレームのテクスチャが正方形の画像です。しかし、拡散したコンテンツに設定すると、その効果はひどいものになります。では、四角形の枠内に正方形の画像を表示することはできますが、画像を伸ばすことはできません。

答えて

7

表示される内容は、テクスチャがマップされるジオメトリによって異なります。それらの画像フレームがSCNPlaneまたはSCNBoxジオメトリであると仮定すると、フレームの面は、ジオメトリの寸法またはアスペクト比に関係なく、右下の(0,0)から左下の(1,1)の範囲のテクスチャ座標を持ちます。

SceneKitテクスチャは、イメージの左上がテクスチャ座標(0,0)にあり、右下が(1,1)にあり、イメージのピクセルサイズに関係なくイメージをマップします。したがって、アスペクト比がテクスチャイメージのアスペクト比と一致するジオメトリを持たない限り、画像が伸びるこのようなケースが見えます。

あなたのテクスチャを「解決」するために行うことができます物事のカップルがあります。

  1. ノウ(または計算)あなたの画像のアスペクト比とジオメトリー(顔)あなたがそれを置くしたいです材料のcontentsTransformを使用して画像を補正します。

    たとえば、幅が2で高さが1であるSCNPlaneがあり、正方形の画像を割り当てた場合、画像は水平に引き伸ばされます。 をSCNMatrix4MakeScale(1,2,1)で作成したマトリックスに設定すると、水平方向のテクスチャ座標が2倍になり、2:1平面のアスペクト比が固定されます。ジオメトリの面に半角画像を表示する場所に応じて、翻訳が必要な場合もあります。

    Xcodeのシーンエディタでこれを行う場合、contentsTransformはマテリアルエディタの「オフセット」、「スケール」、および「回転」コントロールで、スクリーンショットの画像を割り当てた場所の下にあります。

  2. ジオメトリのアスペクト比とイメージのサイズに関する情報を少なくとも知り(または計算し)、修正されたテクスチャイメージを作成してフィットさせます。

    たとえば、上記のように2:1の平面を持ち、その上に320x480の画像を配置する場合、960x480のサイズの新しいテクスチャ画像を作成します。つまり、平面のアスペクト比に一致します。このイメージを使用して、必要な任意のスタイルの背景を作成し、320x480イメージをその背景の上に合成して、任意の位置に配置することができます。

+0

ちょっと、コンテンツを再生しようとしています。私はMatrixの仕事を理解していません。 – HaoDong

+0

私にもう一度例を示してください。今私は2つの材料を持つ平面を持っています。その幅と高さは935.473と1349.419です。私は1:1の画像を持っています。それを拡散プロパティに設定したいのです。この写真は飛行機の中央に表示されるはずです。ですから、SCNMatrix4MakeTranslationとSCNMatrix4MakeScale関数にどのように使用すればいいですか?どうもありがとう。私の貧弱な英語の書いたスキルについては申し訳ありません。私の質問を理解できますか? – HaoDong

0

enter image description here

私はスケールを変更し、オフセットや材料エディタでWrapTプロパティ。そして効果は良いです。しかし、私がそれを実行するとき、私は同じ効果を得ることができませんでした。ですから、contentsTransformプロパティを変更してプログラミングしようとします。しかし、スケールは両方ともcontentsTransformに影響します。したがって、offSetが(0、-4.03)でScaleが(1,1714)の場合、contentsTransformは何ですか?