3Dで壁に当たったときのカメラについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
ptolemy
記事: 258
登録日時: 12年前

3Dで壁に当たったときのカメラについて

#1

投稿記事 by ptolemy » 11年前

DXライブラリで3Dゲームを作っているんですが、壁に当たるとカメラが真上に動きます。
プレイヤーとカメラは、

コード:

if(playerX>700){
playerX=700;
}
のように範囲を決めています。

どうやったらカメラの角度を直せますか?

今、事情により添付できないのでお手数ですが、前に添付したものをDLお願いします。
http://dixq.net/forum/viewtopic.php?f=3&t=14398
テキストファイルがしっかり記載されていませんがこれから添付するときは修正しておきます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 3Dで壁に当たったときのカメラについて

#2

投稿記事 by softya(ソフト屋) » 11年前

ソースコードには
SetCameraPositionAndTarget_UpVecY( VGet( cameraX, sitenC, cameraZ ), VGet( target2X, siten2, target2Z ) );
しか見つけられなかったので、playerXとの関係がよく分かりません。

if(playerX>700){
playerX=700;
}
はプレイヤーとカメラを表している条件でもないようなので、これらだけだと情報不足で何とも答え様がありません。
もう少し詳しい情報をいただけますか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: 3Dで壁に当たったときのカメラについて

#3

投稿記事 by ptolemy » 11年前

すみません。

2Dの時プレイヤーの座標をplayerにしていたので間違いました。

if(targetX>700){
targetX=700;
}
です。
700とは、フィールドの端の座標です。
カメラも同じようにしています。

本当ににすみません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 3Dで壁に当たったときのカメラについて

#4

投稿記事 by softya(ソフト屋) » 11年前

プログラムコードを見る限りtargetX(target2X?)が700まで行ったらいきなり上をカメラが真上になる状況になると思えないのすでが、その状況時のcameraX, sitenC, cameraZ ならびにtarget2X, siten2, target2Z の値を教えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: 3Dで壁に当たったときのカメラについて

#5

投稿記事 by ptolemy » 11年前

上にいくというかカメラがおかしな方を見るのは確かです。

今、PC使えないのでまた明日書き込みます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 3Dで壁に当たったときのカメラについて

#6

投稿記事 by softya(ソフト屋) » 11年前

ptolemy さんが書きました:上にいくというかカメラがおかしな方を見るのは確かです。

今、PC使えないのでまた明日書き込みます。
勘で書きますが、cameraXとtarget2Xの補正がズレるんじゃないかという気がしますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: 3Dで壁に当たったときのカメラについて

#7

投稿記事 by ptolemy » 11年前

[壁に当たる前]
cameraX=220
sitenC=276
cameraZ=150
target2Z=345
siten2=0
target2Z=279


[壁と接触しているとき]
cameraX=220
sitenC=294
cameraZ=150
target2Z=726
siten2=0
target2Z=279


でした。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 3Dで壁に当たったときのカメラについて

#8

投稿記事 by softya(ソフト屋) » 11年前

やはりcameraXとtarget2Z(target2X?)がずれているので、ターゲットの座標からcameraXを相対位置で計算すべきかと思います。
浮動小数点の誤差かプログラムのバグかはソースコードがないので何とも言えませんが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: 3Dで壁に当たったときのカメラについて

#9

投稿記事 by ptolemy » 11年前

毎度すみません。返信遅れました。
PCの水冷化をしていて起動ができませんでした。

本題についてなのですが、
playerの座標とcameraの座標が100離れているのに
壁に当たったとき同じ座標になるように書いてました。

それで、カメラの座標が、真上に来ていました。

しかし、当たっているときXとZが固定されているので、
回転のキーを押してもモデルだけ回転して
カメラが回転しなくなりました。

どうしたら良いのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 3Dで壁に当たったときのカメラについて

#10

投稿記事 by softya(ソフト屋) » 11年前

>しかし、当たっているときXとZが固定されているので、
>回転のキーを押してもモデルだけ回転して
>カメラが回転しなくなりました。

プログラムを見ないと何とも答えようがないです。
当たっている時に固定しなければしけない理由が分からないからです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: 3Dで壁に当たったときのカメラについて

#11

投稿記事 by ptolemy » 11年前

すみません。

訂正で壁に触れているときではなく壁に進みながら回転するとおかしくなります。

コード:

if(targetX>700){
targetX=700;
}
if(cameraX>600){
cameraX=600;
}
のようにしているので進みながらの状態では、固定されているということです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 3Dで壁に当たったときのカメラについて

#12

投稿記事 by softya(ソフト屋) » 11年前

私が前に言ったように、targetXからの相対座標でカメラを管理してはどうでしょうか?
常に
cameraX = targetX - 100;
では何がマズイのでしょうか?
targetX中心の回転を考慮するなら三角関数で相対位置を計算すれば良いだけです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: 3Dで壁に当たったときのカメラについて

#13

投稿記事 by ptolemy » 11年前

すいません。返信遅れました。

相対座標で考えればいいのですね。常に-100になるようにします。

閉鎖

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