龍神録60章にて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
はね

龍神録60章にて

#1

投稿記事 by はね » 15年前

聞きたいことがあるのですが
フェードインした部分とフェードアウトする部分を
画面の中心を軸にして
添付した黄色の線に沿って回転する感じ(壁が軸に対して回る感じ)にしたいのですが、
どうしたらいいでしょうか?

Justy

Re:龍神録60章にて

#2

投稿記事 by Justy » 15年前

 全然イメージがつかめないのですが、「フェードインした部分とフェードアウトする部分」って
どこのことでしょうか?

 ただ画面全体が回転すればいいのですか?

はね

Re:龍神録60章にて

#3

投稿記事 by はね » 15年前

そうです。よろしくお願いします

Justy

Re:龍神録60章にて

#4

投稿記事 by Justy » 15年前

 3D部分だけなら、ワールド行列かカメラ(ビュー行列)をZ軸で回転させれば回ります。

 2Dも含めて回したい場合は、回したい部分だけを一旦別のテクスチャに
レンダリングしておいて、そのテクスチャを回転させて画面に描画すればOKです。

はね

Re:龍神録60章にて

#5

投稿記事 by はね » 15年前

一応、Justyさんのサンプルも使ってるのですが
http://www.play21.jp/board/formz.cgi?ac ... &rln=36229
そのZ軸に値する場所ってどこなのでしょうか?

はね

Re:龍神録60章にて

#6

投稿記事 by はね » 15年前

すみません。ここということが分かったのですが、
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); 
}
カメラ自体を回す方法が分からないのですが
どうしたらいいのでしょうか?

Justy

Re:龍神録60章にて

#7

投稿記事 by Justy » 15年前

 なるほど。回すのは3D部分だけでいいのですね。

 CreateLookAtMatrixの第3引数に上向きのベクトルを指定してあげてください。

 先のスレのままなら、camera.upが指定されているはずで、中身は [0, 1, 0]、
つまり真上を向くようになっています。

 これを例えば、[-1, 0, 0] とかにすれば右に 90度回転することができますし、
[0, -1, 0]なら 180度、上下逆さまになります。

はね

Re:龍神録60章にて

#8

投稿記事 by はね » 15年前

ありがとうございます。
ただ、これだと一瞬のうちに角度が変わってしまうのですが、
綺麗に角度をゆっくり変える方法はないでしょうか?

Justy

Re:龍神録60章にて

#9

投稿記事 by Justy » 15年前


>綺麗に角度をゆっくり変える方法はないでしょうか?

 ベクトルを指定すればその向きが上になる(正確にはちょっと違いますが)のですから、
ベクトルをゆっくりなめらかに回してあげればいいだけです。

 60章のサンプルの場合、視線の Zの符号が一定なので [0, 1, 0]を
Z軸で指定角度だけ回転した行列を使って求めてもいいですし、
単純に xと y要素を円の方程式を使って回転したベクトルを指定すれば、
滑らかになるはずです。

はね

Re:龍神録60章にて

#10

投稿記事 by はね » 15年前

例えばですが、
右に40度動かすには
具体的にどういった計算方法で算出すればいいのでしょうか?

Justy

Re:龍神録60章にて

#11

投稿記事 by Justy » 15年前


>具体的にどういった計算方法で算出すればいいのでしょうか

 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]

でいいと思います。

 カメラを本格的にいじり始めたらこれじゃダメですけど。

Dixq (管理人)

Re:龍神録60章にて

#12

投稿記事 by Dixq (管理人) » 15年前

短文で申し訳ないですが、
ver3が出たいまやもう昔の3D関数を使う意味はないので、
本格的に3D描画をしたいなら、新しく実装された3D関数をお使いになってはいかがでしょうか?

あんなに苦労したのにDXライブラリは便利になりすぎだよ、うぅ(悲嬉涙

閉鎖

“C言語何でも質問掲示板” へ戻る