うんち!
結果的に?
実際にやってみたコーナー
結果的に?
実際にやってみたコーナー
ゲーム中の実世界との距離(重要)
ミス
ライトウェーブ上のメートルとFloatの値は同じ
LW上では100分の1のスケールで作っている::実寸で制作仕直し
LW上では100分の1のスケールで作っている::実寸で制作仕直し
時速1km->秒速0.2777777777m->秒速0.2777777777->1フレ0.277777777/60or30
1024*768を内部的に軸にする
プリプロセッサ定義
#define
プリプロセッサ定義
IMAGE_POINT(x,y) toF( getApplication()->getScreenW() ) * (x/1024.0f), toF( getApplication()->getScreenH() ) * (y/768.0f) * (getApplication()->getAspect()/12.0f)
修正
#define
IMAGE_RECT(x,y,w,h) Math::Rect2DF(x * (toF( getApplication()->getScreenW() )/1024.0f), y * (toF( getApplication()->getScreenH() )/768.0f) , w * (toF( getApplication()->getScreenW() )/1024.0f), h * (toF( getApplication()->getScreenH() )/768.0f) )
toF Float型にキャスト
getScreenW() スクリーンの幅取得
getScreenH() スクリーンの高さ取得
getAspect() アスペクト取得9、10、12のどれかが返ってくる
これらはSettingクラスで定義。システムの中心となっているCApplicationクラスに含まれている
Settingクラス
getScreenW() スクリーンの幅取得
getScreenH() スクリーンの高さ取得
getAspect() アスペクト取得9、10、12のどれかが返ってくる
これらはSettingクラスで定義。システムの中心となっているCApplicationクラスに含まれている
Settingクラス
これを
getRender()->DrawTexture(
getRender()->DrawTexture(
IMAGE_RECT( 192.0f,339.0f,640.0f,90.0f ),// 描画先 CColor(255,255,255,255), // 色 Math::Rect2DF(0.0f,0.0f,640.0f,90.0f), // 描画元テクスチャUV m_pTexSyokika ); // テクスチャポインタ
で更新
これでスイーツの意見は実装したと思うが、アスペクト比を変えると少しずれるので修正が必要。
しっかり確認はしていない眠いです。
しっかり確認はしていない眠いです。
なにか変な部分が見つかったら太郎まで
理論的な何かコーナー
- 相対的に座標を決める
例
800*600のウィンドウサイズとします。
(100,0)に点を打つようなものとします。
これは、(0,0)から800の1/8右にずれてると考えられます。
よって、(800*1/8,0)とかける。
次にこの点を1024*800に打つとします。
そうすると、(1024*1/8,0)と書けば、全体のバランスを崩さずに、画像が表示できます。
プログラム組むとき、解像度をm*nとかして、やれば組直しせずにすむと思います。
上の例でいくと、(m*1/8,n*0)でやればいいと思います。
800*600のウィンドウサイズとします。
(100,0)に点を打つようなものとします。
これは、(0,0)から800の1/8右にずれてると考えられます。
よって、(800*1/8,0)とかける。
次にこの点を1024*800に打つとします。
そうすると、(1024*1/8,0)と書けば、全体のバランスを崩さずに、画像が表示できます。
プログラム組むとき、解像度をm*nとかして、やれば組直しせずにすむと思います。
上の例でいくと、(m*1/8,n*0)でやればいいと思います。
- ワイド画面に対応するように画像を引き伸ばす
4:3,16:9,16:10だけでいいということなんでそれで書きます。もっと一般化したのがいいなら言ってください。
基準を決めます。4:3を基準に組むとします。それで、4:3=16:12ですね。
まず、比率が変わったことを気にしないで、上の相対的に座標を決める方法をつかって、変換します。
例1
まず、比率が変わったことを気にしないで、上の相対的に座標を決める方法をつかって、変換します。
例1
1024:768から1680*1050のとき。
(16:12→16:10変換のとき)
1024:768→1680*1260と考え、変換。
(16:12→16:10変換のとき)
1024:768→1680*1260と考え、変換。
そして、縦の揃えていない縦の比率に注目します。変換する前の縦の比をn、後のやつをmとし、画像を指定する2点の座標を(x1,y1),
(x2,y2)とすると、
(x1,y1*m/n),(x2,y2*m/n)となります。
例2
例1のような変換をし、2点を(x1,y1),(x2,y2)とすると、
(x1,y1*10/12),(x2,y2*10/12)として、出力すればいいと思います。
(x2,y2)とすると、
(x1,y1*m/n),(x2,y2*m/n)となります。
例2
例1のような変換をし、2点を(x1,y1),(x2,y2)とすると、
(x1,y1*10/12),(x2,y2*10/12)として、出力すればいいと思います。
- 上の2つの例をつかってワイド解像度、標準解像度どちらも対応させる。
まず、基準解像度を決めます。今回は具体的に1024*768でやりましょう。
絵を貼り付けるためには1点の座標と幅、高さが必要となりますね。
基準解像度下の点をP(x,y)、幅をw、高さをhとします(この値はずっと保持しておいてね!)。
また、変換後の解像度をm*nとします。
そして、相対的に座標を決めるために、全体の何割ずれたところに点Pがあるのか求めます。
これをQとすると、Q(x/1024,y/768)となります。
次に幅、高さの伸張率を求めます。上の説明から、幅の伸張率はm/1024、高さの伸張率はn/768となります。
これらから、変換後の座標、幅、高さはそれぞれ(m*x/1024,n*y/768)=(x*(m/1024),y*(n/768)),w*(m/1024),h*(n/768)
となります。すなわち、基準解像度下の点の位置、幅、高さと縦横の伸張率がわかれば、変換できます。
よって必要なデータは、基準解像度下の点の座標、幅、高さ、変換後の解像度です。
絵を貼り付けるためには1点の座標と幅、高さが必要となりますね。
基準解像度下の点をP(x,y)、幅をw、高さをhとします(この値はずっと保持しておいてね!)。
また、変換後の解像度をm*nとします。
そして、相対的に座標を決めるために、全体の何割ずれたところに点Pがあるのか求めます。
これをQとすると、Q(x/1024,y/768)となります。
次に幅、高さの伸張率を求めます。上の説明から、幅の伸張率はm/1024、高さの伸張率はn/768となります。
これらから、変換後の座標、幅、高さはそれぞれ(m*x/1024,n*y/768)=(x*(m/1024),y*(n/768)),w*(m/1024),h*(n/768)
となります。すなわち、基準解像度下の点の位置、幅、高さと縦横の伸張率がわかれば、変換できます。
よって必要なデータは、基準解像度下の点の座標、幅、高さ、変換後の解像度です。
- 画像のアス比を変えないでワイドにする?
アス比1:1のウィンドウがあると仮定します。そして、ウィンドウの中心をOとします。
そして、半径が任意の円を考えると、ディスプレイ上のすべての点を網羅することがわかります。
そして画像を貼るわけですが、画像の各頂点に着目します。円の左上の部分に画像があるなら、画像の
左上の頂点が円に接するようにします。(右上だったら右上の頂点が、左下だったら左下の頂点がという風にしていきます)
そして、アス比の変更に伴って、円を楕円にしていけば、ある程度バランスとれるかな?と思います。
そして、半径が任意の円を考えると、ディスプレイ上のすべての点を網羅することがわかります。
そして画像を貼るわけですが、画像の各頂点に着目します。円の左上の部分に画像があるなら、画像の
左上の頂点が円に接するようにします。(右上だったら右上の頂点が、左下だったら左下の頂点がという風にしていきます)
そして、アス比の変更に伴って、円を楕円にしていけば、ある程度バランスとれるかな?と思います。
間違ってたりしたら教えてください。
by すいーつ
by すいーつ