view camera.cc~ @ 132:d84ee8b2cfd9

camera position update
author Takao YONAMINE <e095763@ie.u-ryukyu.ac.jp>
date Thu, 21 Jul 2011 17:25:59 +0900
parents
children
line wrap: on
line source

#include <stdlib.h>
#include <string.h>
#include "libps2.h"
#include "ps2util.h"
#include "car.h"
#include "game.h"
#include "controler.h"
#include "camera.h"

//大域変数、各部で共有
extern SGO_PAD pad;

static CAMERA camera, def_camera;


void
camera_init()
{
  //カメラの初期位置設定
  def_camera.xyz[0] = 0;
  def_camera.xyz[1] =-7;// -3;
  def_camera.xyz[2] =-14; //0;
  def_camera.xyz[3] = 1;

  def_camera.zd[0] = 0;
  def_camera.zd[1] = 2;
  def_camera.zd[2] = 7;
  def_camera.zd[3] = 1;

  def_camera.yd[0] = 0;
  def_camera.yd[1] = 1;
  def_camera.yd[2] = 0;
  def_camera.yd[3] = 1;

  def_camera.angle[0]=-0.2;//0;  //pich
  def_camera.angle[1]=0;     //yoh 
  def_camera.angle[2]=0;     //roll
  def_camera.angle[3]=0;

  //def_cameraをcameraにコピー
  memcpy( &camera, &def_camera, sizeof(CAMERA));
  set_camera(&def_camera);
}

/*
  ps2依存関係から拝借。
  自分が消したのか、元々無いのかは覚えていないけど
  呼ばれているのでとりあえず(空っぽにしておく)。
*/
// set_camera must be called if camera's parameters were moved                  
void set_camera(CAMERA *camera)
{
  //vu0_rot_camera_matrix(world_view, camera->xyz, camera->zd, camera->yd,camera->angle);
}


/**
 * pose: カメラの対象物(obj)の座標行列
 * カメラがobjについていくように(そのような動きに見せるため)
 * カメラの位置ベクトル、視点ベクトルを更新
 */
void
camera_update(Game *game, FMATRIX pose)
{
  FVECTOR location, eyes, vertical, angle;

 //int type = game->camera_type;

  ps2_vu0_apply_matrix(location, pose, def_camera.xyz);
  ps2_vu0_apply_matrix(eyes, pose, def_camera.zd);
  ps2_vu0_apply_matrix(vertical, pose, def_camera.yd);

  /**When the car bends, the angle of the camera is changed**/
  if(pad.left>0  && game->jiki->speed !=0){
    if(game->jiki->speed !=0){
      if(def_camera.angle[1]<=0.2){
	def_camera.angle[1]+=0.02;
      }
    }
  }
  else if(pad.right>0 && game->jiki->speed !=0){
    if(game->jiki->speed !=0){
      if(def_camera.angle[1]>=-0.2){
        def_camera.angle[1]-=0.02;
      }
    }
  }
  else {
    if(def_camera.angle[1]<-0.01){
      def_camera.angle[1]+=0.02;
    }
    else if(def_camera.angle[1]>0.01){
      def_camera.angle[1]-=0.02;
    }
  } 

  ps2_vu0_apply_matrix(angle, pose, def_camera.angle);
  ps2_vu0_copy_vector(camera.xyz, location);
  ps2_vu0_copy_vector(camera.zd,  eyes);
  ps2_vu0_copy_vector(camera.yd,  vertical);
  ps2_vu0_copy_vector(camera.angle, angle);
  set_camera(&camera);
}


CAMERA get_MagorokuCamera( void )
{
  return camera;
}