Exemplo n.º 1
0
Camera::Camera( )
	: mPos( 0.0f, 0.0f, 0.0f ),
	mRight( 1.0f, 0.0f, 0.0f ),
	mUp( 0.0f, 1.0f, 0.0f ),
	mLook( 0.0f, 0.0f, 1.0f )
{
	SetProj( 0.25f*MathHelper::Pi, 1.0f, 1.0f, 1000.0f );
}
Exemplo n.º 2
0
Camera::Camera(IDirect3DDevice9 *d3dDevice, int w, int h) :d3dDevice(d3dDevice), width(w), height(h)
{
	vec[rig] = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
	vec[up] = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
	vec[fore] = D3DXVECTOR3(0.0f, 0.0f, 1.0f);

	projmat = new D3DXMATRIX;
	viewmat = new D3DXMATRIX;

	SetProj();
	SetViewport();
}
Exemplo n.º 3
0
TrackballCamera::TrackballCamera(float w, float h)
{
	SetWindow(w, h);
	vec3 mCenter = vec3(0.0f);
	float mRadius = 1.0f;
	quat mQuat = quat();

	vec3 pos = vec3(0.0f, 0.0f, 4.0f);
	vec3 target = vec3(0.0f);

	setMmworldQuat();
	//mmWorld = scale(mat4(1.0f), vec3(0.5f));
	SetView(pos, target);
	SetProj(45.0f, (float)windowWidth / windowHeight, 0.1f, 100.f);

	mbMouseLButtonDown = false;
	mbMouseWheelRoll = false;
	mbMouseRButtonDown = false;
}
Exemplo n.º 4
0
// アスペクト比を設定
const D3DXMATRIX* CProj::SetAspect( float aspect )
{
	return SetProj( m_Fovy, aspect, m_Near, m_Far );
}
Exemplo n.º 5
0
// 画角設定
const D3DXMATRIX* CProj::SetFovy( float fovy )
{
	return SetProj( fovy, m_Aspect, m_Near, m_Far );
}
Exemplo n.º 6
0
// ファークリップ設定
const D3DXMATRIX* CProj::SetFar( float zf )
{
	return SetProj( m_Fovy, m_Aspect, m_Near, zf );
}
Exemplo n.º 7
0
// ニアクリップ設定
const D3DXMATRIX* CProj::SetNear( float zn )
{
	return SetProj( m_Fovy, m_Aspect, zn, m_Far );
}
Exemplo n.º 8
0
// コンストラクタ
CProj::CProj( float fovy, float aspect, float zn, float zf )
{
	SetProj( fovy, aspect, zn, zf );
}
Exemplo n.º 9
0
void proCompCamera::OnUpdate(const tTimeInfo &timeInfo)
{   
	if(m_bDirtyModifier)
	{
		m_renderMask = proRenderBuffer::GetRenderMaskFromString(USE_MOD(renderPass));
      
		if(USE_MOD(fov) != 0.0f)
		{
			SetProj(USE_MOD(fov), USE_MOD(aspect), USE_MOD(nearPlane), USE_MOD(farPlane));
		}		
		else
		{
			SetProj2D(USE_MOD(width), USE_MOD(height), USE_MOD(nearPlane), USE_MOD(farPlane));
		}
      
      SetView(Vec3f(0.0f, 0.0f, 0.0f), Vec3f(0.0f, 1.0f, 0.0f), Vec3f(0.0f, 0.0f, 1.0f));
      proRenderBuffer::Instance()->SetRenderCamera(m_renderMask, GetOwner());
		m_viewMat.pos = USE_MOD(pos);
      
      SET_CACHE_COMP(proCompMat);
      if(GET_CACHE_COMP(proCompMat))
      {
         proMat4f &mat = GET_CACHE_COMP(proCompMat)->GetMatrix();
         mat.pos = USE_MOD(pos);
      }

		m_bDirtyModifier = FALSE;
	}

	UpdateViewMatrix();
	
	proRenderBuffer::Instance()->SetViewMatrixMask(m_renderMask, m_viewMat);
   proRenderBuffer::Instance()->SetProjMatrixMask(m_renderMask, m_projMat);
   proRenderBuffer::Instance()->SetModelMatrixMask(m_renderMask, Mat4fI());

	// create a view frustum
	SET_CACHE_COMP(proCompMat)
	if(GET_CACHE_COMP(proCompMat))
	{
		proMat4f mat = GET_CACHE_COMP(proCompMat)->GetMatrix();
		proRenderBuffer::Instance()->SetCameraMatrixMask(m_renderMask, mat);
		peFloat halfFOV = USE_MOD(fov) * 0.5f;
		peFloat tanFOV = tan(halfFOV);
		peFloat drawSize = 1.0f;
		
		proVec4f ntr = mat * Vec4f(tanFOV * USE_MOD(nearPlane) * USE_MOD(aspect), USE_MOD(nearPlane), tanFOV * USE_MOD(nearPlane), 1.0f);		
		proVec4f ntl = mat * Vec4f(-1 * tanFOV * USE_MOD(nearPlane) * USE_MOD(aspect), USE_MOD(nearPlane), tanFOV * USE_MOD(nearPlane), 1.0f);
		proVec4f nbl = mat * Vec4f(-1 * tanFOV * USE_MOD(nearPlane) * USE_MOD(aspect), USE_MOD(nearPlane), -1 * tanFOV * USE_MOD(nearPlane), 1.0f);
		proVec4f nbr = mat * Vec4f(tanFOV * USE_MOD(nearPlane) * USE_MOD(aspect), USE_MOD(nearPlane), -1 * tanFOV * USE_MOD(nearPlane), 1.0f);

		proVec4f ftr = mat * Vec4f(tanFOV * USE_MOD(farPlane) * USE_MOD(aspect), USE_MOD(farPlane), tanFOV * USE_MOD(farPlane), 1.0f);		
		proVec4f ftl = mat * Vec4f(-1 * tanFOV * USE_MOD(farPlane) * USE_MOD(aspect), USE_MOD(farPlane), tanFOV * USE_MOD(farPlane), 1.0f);
		proVec4f fbl = mat * Vec4f(-1 * tanFOV * USE_MOD(farPlane) * USE_MOD(aspect), USE_MOD(farPlane), -1 * tanFOV * USE_MOD(farPlane), 1.0f);
		proVec4f fbr = mat * Vec4f(tanFOV * USE_MOD(farPlane) * USE_MOD(aspect), USE_MOD(farPlane), -1 * tanFOV * USE_MOD(farPlane), 1.0f);		

		proVec3f nearNormal = Vec3f(Cross(ntr-ntl, nbl-ntl)).Normalize();
		proVec3f farNormal = Vec3f(Cross(fbl-ftl, ftr-ftl)).Normalize();

		proVec3f leftNormal = Vec3f(Cross(nbl-ntl, ftl-ntl)).Normalize();
		proVec3f rightNormal = Vec3f(Cross(fbr-ftr, ntr-ftr)).Normalize();

		proVec3f bottomNormal = Vec3f(Cross(nbr-nbl, fbl-nbl)).Normalize();
		proVec3f topNormal = Vec3f(Cross(ftl-ntl, ntr-ntl)).Normalize();

		proPlane planeNear;
		proPlane planeFar;
		proPlane planeLeft;
		proPlane planeRight;
		proPlane planeBottom;
		proPlane planeTop;

		planeNear.m_normal = nearNormal;
		planeNear.m_pos = Vec3f(ntr);

		planeFar.m_normal = farNormal;
		planeFar.m_pos = Vec3f(ftr);

		planeLeft.m_normal = leftNormal;
		planeLeft.m_pos = Vec3f(ntl);

		planeRight.m_normal = rightNormal;
		planeRight.m_pos = Vec3f(ntr);

		planeBottom.m_normal = bottomNormal;
		planeBottom.m_pos = Vec3f(nbl);

		planeTop.m_normal = topNormal;
		planeTop.m_pos = Vec3f(ntl);

		proRenderBuffer::Instance()->SetCameraPlaneMask(m_renderMask, planeNear, planeFar, planeLeft, planeRight, planeBottom, planeTop);
	}
}