曖昧なことばっかり書いてすみません。
少し混乱してました。
なので質問を書き直します。
言葉で書きます。
プレイヤーとカメラとの位置関係について、今まで、
コード:
#include"DXLib.h"
#include<math.h>
static const float ROTATE_SPEED=DX_PI/40;//回転スピード(DX_PI/A)
void rotate(float *x,float *y,const float ang,float mx,float my){
const float ox=*x-mx,oy=*y-my;
*x=ox*cos(ang)+oy*sin(ang);
*y=-ox*sin(ang)+oy*cos(ang);
*x+=mx;
*y+=my;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK)
//初期位置の設定
//カメラの場所設定
camera.X=player.X;
camera.Y=2584;
camera.Z=player.Z-46;
//カメラが見る座標を設定
cursor_x=player.X;
cursor_z=player.Z-1320;
cursor_y=2690;
SetCameraNearFar(2.0f,1000000.0f);
//メインループ
while(ScreenFlip()==0&&ProcessMessage()==0&&ClearDrawScreen()==0){
if(keybord_Get(KEY_INPUT_W)>0&&GAMESTART==1){
player.HX=player.speed*-sin(player.angleY);
player.HY=player.speed*-cos(player.angleY);
player.X+=player.HX;
player.Z+=player.HY;
camera.X+=player.HX;
camera.Z+=player.HY;
cursor_x+=player.HX;
cursor_z+=player.HY;
}
//方向回転
GetMousePoint(&Mouse_x,&Mouse_y);
if(cnt>0){
if(Mouse_x>320){
rotate(&camera.X,&camera.Z,+ROTATE_SPEED,player.X,player.Z);
rotate(&cursor_x,&cursor_z,+ROTATE_SPEED,player.X,player.Z);
rotate(&TAMA_end_x,&TAMA_end_z,+ROTATE_SPEED,player.X,player.Z);
player.angleY+=ROTATE_SPEED;
}
if(Mouse_x<320){
rotate(&camera.X,&camera.Z,-ROTATE_SPEED,player.X,player.Z);
rotate(&cursor_x,&cursor_z,-ROTATE_SPEED,player.X,player.Z);
rotate(&TAMA_end_x,&TAMA_end_z,-ROTATE_SPEED,player.X,player.Z);
player.angleY-=ROTATE_SPEED;
}
}
cnt++;
SetMousePoint(320,240);
if(player.Z<-9000){
player.Z=-9000;
}
if(player.Z>19643){
player.Z=19643;
}
if(player.X<-316526){
player.X=-316526;
}
if(player.X>19421){
player.X=19421;
}
}
ClearDrawScreen();
DxLib_End();
return 0;
}
このようにしていました。
変数については、player.angleYがプレイヤーの回転角です。
このようにして、カメラとカメラが見る座標を初期設定した後、
独立して、管理していたのですが、上のように移動範囲を決めたところ、
プレイヤーの座標は、回転しても変わらないので、いいのですが、
カメラと、カメラが見る座標に関しては、プレイヤー中心に回っていますので、
回転すると変わってしまって、カメラとその見る座標は、プレイヤーとは、同じく範囲を決めれません。
なので、相対座標で管理しようと思ったのですが、ただ、回転しないのであればcamera.Z=player.X-100(例)の
ように相対座標で管理できますが、回転をして、常に-100では、ないようなものは、
どうやって相対座標で管理すればよいのかわかりませんでした。
プログラムでは、マウスの座標が動くと回転のようにしてあります。
どこか勘違いをして、悩んでいるのかもしれませんので、おかしいところは、ご指摘お願いします。
__________
カメラ位置(位置ベクトル) = プレイヤ位置(同) + プレイヤ前方方向単位ベクトル×プレイヤとカメラとの間の距離
この式のプレイヤ前方方向単位ベクトルとは、上のプログラムでいうHX,HYのことですか?
この式は、"プレイヤーの位置からプレイヤーの向いている方向へカメラの距離分すすめる"というものですが、
カメラとプレイヤーの距離の差がわかりません。初期位置の時の差ですか?
一応、質問の答えが上の式といのは、わかります。
今悩んでいるのは、この式のカメラとプレイヤーの差がわかりません。
質問がかなりありますが、よろしくお願いします。