Initial commit.
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
|
||||
#include "std.h"
|
||||
#include "camera.h"
|
||||
|
||||
extern gxScene *gx_scene;
|
||||
|
||||
Camera::Camera(){
|
||||
setZoom( 1 );
|
||||
setRange( 1,1000 );
|
||||
setViewport( 0,0,0,0 );
|
||||
setClsColor( Vector() );
|
||||
setClsMode( true,true );
|
||||
setProjMode( PROJ_PERSP );
|
||||
setFogRange( 1,1000 );
|
||||
setFogColor( Vector() );
|
||||
setFogMode( gxScene::FOG_NONE );
|
||||
}
|
||||
|
||||
void Camera::setZoom( float z ){
|
||||
zoom=z;
|
||||
local_valid=false;
|
||||
}
|
||||
|
||||
void Camera::setRange( float n,float f ){
|
||||
frustum_nr=n;frustum_fr=f;
|
||||
local_valid=false;
|
||||
}
|
||||
|
||||
void Camera::setViewport( int x,int y,int w,int h ){
|
||||
vp_x=x;vp_y=y;vp_w=w;vp_h=h;
|
||||
local_valid=false;
|
||||
}
|
||||
|
||||
void Camera::setClsColor( const Vector &v ){
|
||||
cls_color=v;
|
||||
}
|
||||
|
||||
void Camera::setClsMode( bool c,bool z ){
|
||||
cls_argb=c;cls_z=z;
|
||||
}
|
||||
|
||||
void Camera::setProjMode( int mode ){
|
||||
proj_mode=mode;
|
||||
}
|
||||
|
||||
void Camera::setFogColor( const Vector &v ){
|
||||
fog_color=v;
|
||||
}
|
||||
|
||||
void Camera::setFogRange( float nr,float fr ){
|
||||
fog_nr=nr;fog_fr=fr;
|
||||
}
|
||||
|
||||
void Camera::setFogMode( int mode ){
|
||||
fog_mode=mode;
|
||||
}
|
||||
|
||||
const Frustum &Camera::getFrustum()const{
|
||||
if( !local_valid ){
|
||||
float ar=(float)vp_h/vp_w;
|
||||
frustum_w=frustum_nr*2/zoom;
|
||||
frustum_h=frustum_nr*2/zoom*ar;
|
||||
new( &local_frustum ) Frustum( frustum_nr,frustum_fr,frustum_w,frustum_h );
|
||||
local_valid=true;
|
||||
}
|
||||
return local_frustum;
|
||||
}
|
||||
|
||||
float Camera::getFrustumNear()const{
|
||||
return frustum_nr;
|
||||
}
|
||||
|
||||
float Camera::getFrustumFar()const{
|
||||
return frustum_fr;
|
||||
}
|
||||
|
||||
float Camera::getFrustumWidth()const{
|
||||
getFrustum();return frustum_w;
|
||||
}
|
||||
|
||||
float Camera::getFrustumHeight()const{
|
||||
getFrustum();return frustum_h;
|
||||
}
|
||||
|
||||
void Camera::getViewport( int *x,int *y,int *w,int *h )const{
|
||||
*x=vp_x;*y=vp_y;*w=vp_w;*h=vp_h;
|
||||
}
|
||||
|
||||
bool Camera::beginRenderFrame(){
|
||||
if( !proj_mode ) return false;
|
||||
getFrustum();
|
||||
gx_scene->setViewport( vp_x,vp_y,vp_w,vp_h );
|
||||
gx_scene->clear( &(cls_color.x),1,1,cls_argb,cls_z );
|
||||
if( proj_mode==PROJ_ORTHO ){
|
||||
gx_scene->setOrthoProj( frustum_nr,frustum_fr,frustum_w,frustum_h );
|
||||
}else{
|
||||
gx_scene->setPerspProj( frustum_nr,frustum_fr,frustum_w,frustum_h );
|
||||
}
|
||||
gx_scene->setFogRange( fog_nr,fog_fr );
|
||||
gx_scene->setFogColor( (float*)&fog_color.x );
|
||||
gx_scene->setFogMode( fog_mode );
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user