要件リスト
■ムービー描画におけるサイズ調整のために。
■ もしもスクリーン(ウインドウ)入りきるならピクセル等倍で出す。
■スクリーンに入りきらないなら入りきる最大に縮小して出す。
■ 縦横比はかえない。
■そのときの倍率を求める関数。
// wx wy スクリーン(ウィンドウ)サイズ
// mx my ムービーのサイズ
// 基本的には中心あわせでムービーを1本出すとき用
Float32 dicide_disp_rat
{
Float32 rx = wx/mx;
Float32 ry = wy/my;
if(rx>1.0f){
rx=1.0f; // 入るなら拡大しないでそのまま 等倍で出したい。
}
if(ry>1.0f){
ry=1.0f;
}
if(rx<ry){ // 小さい方にあわせる。
// 縮小してムービーは全部みせたい。
return(rx);
}else{
return(ry);
}
}
/////
社内で出回ってる関数で自分のところに回ってきたものが、ごちゃごちゃとして何をやっているかの正確なところがわからなかった。
それは「スクリーンサイズ(ウインドウサイズ)とムービーのサイズを比べて、実際に書くサイズを決定し、綺麗に出すための0.5ピクセルずらしをしたあと、UV値など含むテキスチャ指定パラメータ4点分に変換する」関数(無駄なコード入り、intとfloatが混在)だった。理解するのに、しばらく時間がかかった。
バグが入っているわけではないのだが・・・。しかも綺麗に描画するためのノウハウまで入っていていいんだけどねぇ。
3~4個の要素が相乗り しているのがまずい。
・条件が決まれば、決定的なシステマチックなもの
・それはアプリの趣味によって変わるんじゃないの
という何かレベルの違うものまでいっしょ。
要素毎に関数を分割して書くべしというこで、冒頭の関数を書いた次第。「小さいときは最大サイズに拡大したいなぁ」と意向が変わったらこの関数の書き換え・取替えを行えばよい。