ページ 1 / 1
龍神録60章にて
Posted: 2009年11月09日(月) 14:49
by はね
聞きたいことがあるのですが
フェードインした部分とフェードアウトする部分を
画面の中心を軸にして
添付した黄色の線に沿って回転する感じ(壁が軸に対して回る感じ)にしたいのですが、
どうしたらいいでしょうか?
Re:龍神録60章にて
Posted: 2009年11月09日(月) 23:38
by Justy
全然イメージがつかめないのですが、「フェードインした部分とフェードアウトする部分」って
どこのことでしょうか?
ただ画面全体が回転すればいいのですか?
Re:龍神録60章にて
Posted: 2009年11月10日(火) 01:40
by はね
そうです。よろしくお願いします
Re:龍神録60章にて
Posted: 2009年11月10日(火) 02:22
by Justy
3D部分だけなら、ワールド行列かカメラ(ビュー行列)をZ軸で回転させれば回ります。
2Dも含めて回したい場合は、回したい部分だけを一旦別のテクスチャに
レンダリングしておいて、そのテクスチャを回転させて画面に描画すればOKです。
Re:龍神録60章にて
Posted: 2009年11月10日(火) 03:16
by はね
Re:龍神録60章にて
Posted: 2009年11月10日(火) 14:38
by はね
すみません。ここということが分かったのですが、
static void UdateCamera()
{
const float range = 50;
VECTOR r;
r.x = -((float)(ch.x - FX) / (FMX - FX) * range - range*0.5f);
r.y = ((float)(ch.y - FY) / (FMY - FY) * range - range*0.5f);
r.z = 0.f;
const float k = 0.04f;
camera.pos_offset.x += (r.x - camera.pos_offset.x) * k;
camera.pos_offset.y += (r.y - camera.pos_offset.y) * k;
camera.pos_offset.z += (r.z - camera.pos_offset.z) * k;
VECTOR pos;
VectorAdd(&pos, &camera.base_pos, &camera.pos_offset);
MATRIX cameraMatrix;
CreateLookAtMatrix(&cameraMatrix, &pos, &camera.target, &camera.up);
SetTransformToView(&cameraMatrix);
}
カメラ
自体を回す方法が分からないのですが
どうしたらいいのでしょうか?
Re:龍神録60章にて
Posted: 2009年11月10日(火) 22:46
by Justy
なるほど。回すのは3D部分だけでいいのですね。
CreateLookAtMatrixの第3引数に上向きのベクトルを指定してあげてください。
先のスレのままなら、camera.upが指定されているはずで、中身は [0, 1, 0]、
つまり真上を向くようになっています。
これを例えば、[-1, 0, 0] とかにすれば右に 90度回転することができますし、
[0, -1, 0]なら 180度、上下逆さまになります。
Re:龍神録60章にて
Posted: 2009年11月11日(水) 03:04
by はね
ありがとうございます。
ただ、これだと一瞬のうちに角度が変わってしまうのですが、
綺麗に角度をゆっくり変える方法はないでしょうか?
Re:龍神録60章にて
Posted: 2009年11月11日(水) 22:42
by Justy
>綺麗に角度をゆっくり変える方法はないでしょうか?
ベクトルを指定すればその向きが上になる(正確にはちょっと違いますが)のですから、
ベクトルをゆっくりなめらかに回してあげればいいだけです。
60章のサンプルの場合、視線の Zの符号が一定なので [0, 1, 0]を
Z軸で指定角度だけ回転した行列を使って求めてもいいですし、
単純に xと y要素を円の方程式を使って回転したベクトルを指定すれば、
滑らかになるはずです。
Re:龍神録60章にて
Posted: 2009年11月12日(木) 19:50
by はね
例えばですが、
右に40度動かすには
具体的にどういった計算方法で算出すればいいのでしょうか?
Re:龍神録60章にて
Posted: 2009年11月12日(木) 23:13
by Justy
>具体的にどういった計算方法で算出すればいいのでしょうか
60章であれば
[color=#d0d0ff" face="monospace]
const float angle40 = 40.f * (float)PI / 180.f;
camera.up.x = -sinf(angle40);
camera.up.y = cosf(angle40);
[/color]
でいいと思います。
カメラを本格的にいじり始めたらこれじゃダメですけど。
Re:龍神録60章にて
Posted: 2009年11月12日(木) 23:15
by Dixq (管理人)
短文で申し訳ないですが、
ver3が出たいまやもう昔の3D関数を使う意味はないので、
本格的に3D描画をしたいなら、新しく実装された3D関数をお使いになってはいかがでしょうか?
あんなに苦労したのにDXライブラリは便利になりすぎだよ、うぅ(悲嬉涙