スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2Dと3Dの融合

二次元と三次元の融合に関しては、複数カメラ作ってカメラのDepthで管理するのがデフォです。で、表示位置の調整をしたいのであればどっちもOrthgraphicで制御するのがベスト。しかし、もしもPerspectiveを使いたい場合の話です。

画面の”サイズ”ではなく、アスペクト比率が変わらない場合にはインスペクタでXYWHをあらかじめ設定しておけばいい(2Dをドットバイドット表示にしていない場合)のですけれども問題はAndroid端末等アスペクト比率が変わる場合ですよね。

こういう場合私はこういうコードで対処しています。

まず、仮想のスクリーンのサイズを決めてしまいます。決めないと何かと面倒なのであらかじめ決めておきましょう。融合する2Dの仮想スクリーンサイズと合わせるのが良いでしょう。今回はAndroid端末の標準的な画面サイズであるところの800x480を仮想サイズとします。

public Camera mCamera;

~~~~略

float sx = Screen.width;
float sy = 480;

sx = sx * (480f / (float)Screen.height);

float sub = 60 + ((sx / 2f) - 400);
float s = (float)sub / (sx);
float s2 = (float)40 / (sx);
mCamera.rect = new Rect(s, 0.0f, 0.5f -s - s2, 1.0f);

コードが汚いのは仕様です。

これで仮想画面のX60,360の位置にパースペクティブ補間の利いた画面を構築することが出来ます。ためしにFreeAcpectでClear FlagsをSkyboxに設定してみれば画面のアスペクト比を変えてもスクリーンの場所が画面の真ん中からの相対位置が変わらないことが確認できると思います。

と、あれこれ書いたけれど…、これは

X:0
Y:1
W:0
H:1

にしない場合限定だったわ。私がコレを使っているのはパースはかけたいけれども特定の場所でキャラクターに正面を向かせたい場合。画面の左側の真ん中にキャラを配置したいけれどもパースかけたい場合とか。0~1だとカメラの正面に配置しない限り回転させないと正面向かないから。
関連記事

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

まとめtyaiました【2Dと3Dの融合】

二次元と三次元の融合に関しては、複数カメラ作ってカメラのDepthで管理するのがデフォです。で、表示位置の調整をしたいのであればどっちもOrthgraphicで制御するのがベスト。しかし、もしもPerspectiveを使いたい場合の話です。

コメントの投稿

非公開コメント

プロフィール

masanotooru

Author:masanotooru
雪国で働くプログラマでしたが、会社を辞めて関西にいます。
プログラムの話もしますが漫画が好きなので漫画の話をします。
バイクを買ったので、そっちの話も増えました。
最近はUnityばかりなのでそっちメイン。

Google Adsense
検索フォーム
カテゴリ
最新コメント
メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。