一个3D摄像机的设计与实现

本文介绍了3D摄像机的设计,包括右向量、上向量、观察向量和位置向量的概念,并详细阐述了摄像机的上下点头和左右摇头操作的实现,通过数学方法解释了平移和旋转的过程,帮助理解3D摄像机的工作原理。
摘要由CSDN通过智能技术生成

返回


这两天学习了3D图形学。独自花了2天时间设计了一个自由移动的DX9的摄像机类。下面我仔细讲述一下我的Camera类是如何完成的。
e3d_camere.h

#ifndef __e3d_camera__
#define __e3d_camera__
#include <d3dx9.h>

namespace e3d {
	class Camera
	{
	public:
		Camera(IDirect3DDevice9* Device = 0):m_right(D3DXVECTOR3(1.f, 0.f, 0.f)),
			m_up(D3DXVECTOR3(0.f, 1.f, 0.f)),
			m_look(D3DXVECTOR3(0.f, 0.f, 1.f)),
			m_position(D3DXVECTOR3(0.f, 0.f, 0.f)),
			m_aspect(800.f / 600),
			m_fovY(D3DX_PI*0.25),
			m_nearZ(1.f),
			m_farZ(1000.f),m_view(),m_proj(),_Device(0) {
			D3DXMatrixIdentity(&m_view);
			_Device = Device;

			D3DXMATRIX V;
			D3DXMatrixLookAtLH(&V, &m_position, &m_look, &m_up);

			//Device->SetTransform(D3DTS_VIEW, &V);
		
			D3DXMatrixPerspectiveFovLH(
				&m_proj,
				m_fovY, // 90 - degree
				m_aspect,
				m_nearZ,
				m_farZ);

		}

		//设置摄像机位置
		void SetPosition(float x, float y, float z) { m_position.x = x; m_position.y = y; m_position.z = z;}
		void SetPositionXM(D3DXVECTOR3 pos) {m_position = pos; }

		//获得摄像位置及朝向相关参数
		D3DXVECTOR3 GetPosition()	const { return m_position; }
		D3DXVECTOR3 GetRight()		const { return m_right; }
		D3DXVECTOR3 GetUp()		    const { return m_up; }
		D3DXVECTOR3 GetLook()		const { return m_look; }

		D3DXVECTOR3 GetPositionXM()	const { return m_position; }
		D3DXVECTOR3 GetRightXM()	const { return m_right; }
		D3DXVECTOR3 GetUpXM()		const { return m_up; }
		D3DXVECTOR3 GetLookXM()		const { return m_look; }

		//获得投影相关参数
		float GetNearZ()	const { return m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值