亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? viewercamera.cpp

?? 涉及windows游戲編程中的一些源碼
?? CPP
字號:

/*
   模塊名稱:
       VCamera.cpp
   目的: 
       提供觀察者攝影機的操作,俯仰,平移,前進,后退,傾斜,旋轉等;

   作者:
        潘李亮 HeartBlue
		       XpertSoft HeartBlue 2002/9/26
			   Allright reserved
			   版權所有 
*/
#include "MMath.h"
#include "OpenGLCom.h"
#include "ViewerCamera.h"



void CViewerCamera::SetUpDir(float x,float y,float z)
{
   MVECTOR v={x,y,z};
   Math.Normalize(v);
   m_info.up.x=v.x; 
   m_info.up.y=v.y;
   m_info.up.z=v.z;
}

void CViewerCamera::SetCameraPos(float x,float y,float z)
{
	m_info.pos.x = x;
	m_info.pos.y = y;
	m_info.pos.z = z; 
}
void CViewerCamera::SetTarget(float x,float y,float z)
{
	m_info.target.x=x; 
	m_info.target.y=y;
	m_info.target.z=z;
}

void CViewerCamera::SetViewerUpDir(float x,float y,float z)
{
	m_info.vup.x=x;
	m_info.vup.y=y;
	m_info.vup.z=z;
	Math.Normalize(m_info.vup); 
}
void CViewerCamera::SetViewerDir(float x,float y,float z)
{
	m_info.vdir.x= x;
	m_info.vdir.y= y;
	m_info.vdir.z= z;
	Math.Normalize(m_info.vdir); 
}

//使用攝影機
void CViewerCamera::Look()
{

/*
//This commented code is for the ZOOMED distanced display
	MVECTOR d = {   m_info.target.x - m_info.pos.x,  
					m_info.target.y - m_info.pos.y,  
					m_info.target.z - m_info.pos.z,  
					m_info.target.w - m_info.pos.w
	};
	float len = Math.LenVector(d);
	float dx = m_zoom_info.fdist * d.x /len;
	float dy = m_zoom_info.fdist * d.y /len;
	float dz = m_zoom_info.fdist * d.z /len;
	gluLookAt(
		       m_info.pos.x+dx,    m_info.pos.y+dy,     m_info.pos.z+dz,          //觀察者的位置
		       m_info.target.x+dx, m_info.target.y+dy,  m_info.target.z+dz, //視點的中心
			   m_info.up.x,     m_info.up.y,      m_info.up.z               //上方的位置
			 );
*/

	gluLookAt(
		       m_info.pos.x,    m_info.pos.y,     m_info.pos.z,          //觀察者的位置
		       m_info.target.x, m_info.target.y,  m_info.target.z, //視點的中心
			   m_info.up.x,     m_info.up.y,      m_info.up.z               //上方的位置
			 );

}
//俯仰角度
void CViewerCamera::Raise(float theta)
{
	MVECTOR vdir= {m_info.target.x - m_info.pos.x, m_info.target.y-m_info.pos.y,m_info.target.z-m_info.pos.z};
	MVECTOR vn;	
	float m=Math.LenVector(vdir);
	Math.Normalize(vdir);

	//得到另外一條觀察平面的 坐標軸方向
	Math.CrossNormal(vdir,m_info.up,vn);
	
    //向上位置先旋轉
	Math.Rotate(vn,m_info.up,theta);
    //旋轉視線方向
    Math.Rotate(vn,vdir,theta);

    m_info.target.x = m_info.pos.x + vdir.x*m;
	m_info.target.y = m_info.pos.y + vdir.y*m; 
	m_info.target.z = m_info.pos.z + vdir.z*m; 
}
//旋轉
void CViewerCamera::Turn(float theta)
{
   MVECTOR n = m_info.vup;
   //旋轉攝影機的上方向
   Math.RotatePoint(n,m_info.up,theta);

   //旋轉攝影機的前方向
   MVECTOR vTagDir = {m_info.target.x-m_info.pos.x,m_info.target.y-m_info.pos.y,m_info.target.z-m_info.pos.z};
   
   float m=Math.LenVector(vTagDir);
   Math.Normalize(vTagDir);
   Math.RotatePoint(n,vTagDir,theta);
   
   m_info.target.x=m_info.pos.x + vTagDir.x*m;  
   m_info.target.y=m_info.pos.y + vTagDir.y*m;  
   m_info.target.z=m_info.pos.z + vTagDir.z*m;  

   //旋轉人的前面方向
   Math.Rotate(n,m_info.vdir,theta);
}

//繞行
void CViewerCamera::Circle(float theta)
{
	MVECTOR vdir={m_info.target.x-m_info.pos.x,m_info.target.y-m_info.pos.y,m_info.target.z-m_info.pos.z};
	float m=Math.LenVector(vdir);
 
	//保存視點的位置
	MVECTOR oldCenter = {  m_info.pos.x + m * m_info.vdir.x,
		                    m_info.pos.y + m * m_info.vdir.y,
		                    m_info.pos.z + m * m_info.vdir.z	};

	//旋轉 觀察者 和 攝影機的方向
	Turn(theta);

	//得到新的視點位置
	MVECTOR newCenter= {   m_info.pos.x + m * m_info.vdir.x,
		                   m_info.pos.y + m * m_info.vdir.y,
		                   m_info.pos.z + m * m_info.vdir.z	};

	MVECTOR deta= {oldCenter.x - newCenter.x,
		           oldCenter.y - newCenter.y,
				   oldCenter.z - newCenter.z};

    //恢復舊的視點位置,和設置新的觀察者的位置
	m_info.pos.x += deta.x;
	m_info.pos.y += deta.y;
	m_info.pos.z += deta.z;

	m_info.target.x += deta.x; 
	m_info.target.y += deta.y; 
	m_info.target.z += deta.z; 
} 

//傾斜
void CViewerCamera::Lean(float theta)
{
	MVECTOR vTagDir = {m_info.target.x-m_info.pos.x,m_info.target.y-m_info.pos.y,m_info.target.z-m_info.pos.z};
	float m=Math.LenVector(vTagDir);
	Math.Normalize(vTagDir);

	Math.Rotate(vTagDir,m_info.up,theta); 
}
//向前向后運動
void CViewerCamera::Forward(float dist)
{

    float dx = dist * m_info.vdir.x;
	float dy = dist * m_info.vdir.y;
	float dz = dist * m_info.vdir.z;

	//Move the position
	m_info.pos.x += dx;
	m_info.pos.y += dy;
	m_info.pos.z += dz;
    //Reset tagart
	m_info.target.x += dx; 
	m_info.target.y += dy; 
	m_info.target.z += dz; 

}
//左右平移
void CViewerCamera::Shift(float dist)
{

//得到x的方向
	MVECTOR vx;
	Math.CrossNormal(m_info.vdir,m_info.vup,vx);

    float dx=dist*vx.x;
	float dy=dist*vx.y;
	float dz=dist*vx.z;

    m_info.target.x+=dx;
	m_info.target.y+=dy;
	m_info.target.z+=dz;

	m_info.pos.x+=dx;
	m_info.pos.y+=dy;
	m_info.pos.z+=dz;
}
void CViewerCamera::Up(float dist)
{
   float dx=dist*m_info.vup.x; 
   float dy=dist*m_info.vup.y; 
   float dz=dist*m_info.vup.z; 

   m_info.target.x+=dx; 
   m_info.target.y+=dy; 
   m_info.target.z+=dz; 

   m_info.pos.x+=dx; 
   m_info.pos.y+=dy; 
   m_info.pos.z+=dz;
}

void CViewerCamera::ReLocate(float x,float y,float z)
{
    MVECTOR vTagDir = {m_info.target.x-m_info.pos.x,m_info.target.y-m_info.pos.y,m_info.target.z-m_info.pos.z};
    m_info.pos.x=x;
	m_info.pos.y=y;
	m_info.pos.z=z;

	m_info.target.x=x + vTagDir.x; 
	m_info.target.y=y + vTagDir.y; 
	m_info.target.z=z + vTagDir.z; 
}

CViewerCamera::CViewerCamera()
{
	this->m_zoom_info.factor = 1;
	this->m_zoom_info.zoom_angle =0;
	this->m_info.vangle =0; 

	m_info.near_dist = 0.01;
	m_info.pos.z = m_info.pos.y =m_info.pos.x = 0;
	m_info.target.x = m_info.target.z =0;
	m_info.target.y = 10;

	m_info.up.x =m_info.up.y = 0;
	m_info.up.z = 1.0;
	
	m_info.vdir.x = m_info.vdir.z = 0;
	m_info.vdir.y = 1.0;
	
	m_info.vup.x = m_info.up.x ; 
	m_info.vup.y = m_info.up.y ;
	m_info.vup.z = m_info.up.z ;  
}
void  CViewerCamera::ZoomedProject(float factor)
{
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
    gluPerspective(this->m_zoom_info.zoom_angle,factor,0.1,m_info.far_dist *ZOOM_LOD_F* (m_info.vangle/m_zoom_info.zoom_angle));
	glMatrixMode(GL_MODELVIEW);
}
void  CViewerCamera::Project(float factor)
{
	if(IsZoomed())
	  ZoomedProject(factor);
	else
	{
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		gluPerspective(this->m_info.vangle,factor,0.1,m_info.far_dist);
		glMatrixMode(GL_MODELVIEW);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产一区二区三区青草影视| 欧美精品一区二区三区在线| 国产精品国产三级国产aⅴ入口| 国产黑丝在线一区二区三区| 欧美激情综合五月色丁香| 粉嫩av一区二区三区在线播放 | 亚洲精品少妇30p| 色悠悠久久综合| 亚洲国产aⅴ天堂久久| 91精品国产入口| 国产精品系列在线播放| 国产精品丝袜一区| 在线一区二区三区做爰视频网站| 日韩影视精彩在线| 日韩欧美一二三四区| 成人免费看片app下载| 一个色综合av| 久久青草欧美一区二区三区| 91香蕉视频mp4| 无吗不卡中文字幕| 2023国产一二三区日本精品2022| 国产99一区视频免费| 亚洲综合在线免费观看| 精品福利二区三区| 色综合 综合色| 91亚洲国产成人精品一区二区三| 亚洲资源中文字幕| 久久午夜国产精品| 欧美在线短视频| 国产成人在线视频网址| 亚洲一区二区三区视频在线 | 精品国产123| 91老师国产黑色丝袜在线| 日韩电影在线免费观看| 欧美国产精品中文字幕| 欧美日韩国产精选| 成人免费毛片a| 精品亚洲porn| 亚洲成av人片一区二区三区| 国产精品毛片久久久久久久| 日韩色在线观看| 欧美亚洲禁片免费| 成人性色生活片| 久久精品国内一区二区三区| 亚洲一区av在线| 亚洲国产精品99久久久久久久久 | 国产精品水嫩水嫩| 91精品国产综合久久久久久 | 欧美日韩国产综合久久| 粉嫩av一区二区三区| 欧美a级一区二区| 艳妇臀荡乳欲伦亚洲一区| 久久精品一区二区三区av| 欧美一级免费观看| 欧美在线观看视频一区二区三区| 成人免费高清在线| 国产另类ts人妖一区二区| 六月丁香婷婷色狠狠久久| 香蕉久久夜色精品国产使用方法 | 91亚洲精品久久久蜜桃| 国产成人精品免费在线| 九九**精品视频免费播放| 五月天一区二区| 亚洲大尺度视频在线观看| 亚洲欧美一区二区久久| 欧美高清在线视频| 久久精品日产第一区二区三区高清版 | 国产精品妹子av| 久久噜噜亚洲综合| 久久综合色播五月| 欧美成人三级在线| 精品久久国产字幕高潮| 欧美大度的电影原声| 亚洲精选免费视频| 国产精品初高中害羞小美女文 | 一区在线观看免费| 亚洲视频在线一区观看| 综合婷婷亚洲小说| 一区二区免费看| 亚洲成av人片| 免费看日韩a级影片| 久久电影网电视剧免费观看| 久久99久久久久| 国产乱人伦偷精品视频不卡| 国产成人激情av| 成人免费视频免费观看| 99国产精品一区| 95精品视频在线| 欧美在线一二三| 51久久夜色精品国产麻豆| 91精品国产一区二区三区| 26uuu国产一区二区三区| www国产精品av| 国产精品蜜臀在线观看| 一区二区三区在线播放| 一区二区三区四区av| 视频在线观看一区| 国产综合一区二区| 成人黄色一级视频| 欧美日韩中文一区| 精品国精品自拍自在线| 中文字幕免费不卡| 亚洲午夜精品网| 美腿丝袜在线亚洲一区| 国产99久久精品| 色偷偷久久人人79超碰人人澡| 欧美在线一二三| 精品伦理精品一区| 亚洲欧洲韩国日本视频| 亚洲va欧美va人人爽午夜| 国产呦精品一区二区三区网站| 成人av在线一区二区| 精品视频在线免费看| 亚洲精品一区二区三区香蕉| 亚洲欧洲精品一区二区三区| 婷婷六月综合亚洲| 成人涩涩免费视频| 欧美高清性hdvideosex| 欧美国产欧美综合| 五月综合激情婷婷六月色窝| 国v精品久久久网| 欧美一级二级三级蜜桃| 亚洲欧洲日韩av| 男女男精品网站| 色域天天综合网| 国产日韩精品一区二区三区在线| 亚洲国产视频在线| 成人免费不卡视频| 日韩午夜三级在线| 亚洲无人区一区| 成人精品视频一区二区三区尤物| 欧美日韩中文字幕一区二区| 国产精品免费av| 精品一区二区影视| 在线成人av影院| 亚洲人精品一区| 国产成人精品三级| 日韩亚洲欧美在线| 艳妇臀荡乳欲伦亚洲一区| 成人免费视频视频在线观看免费| 中文字幕一区二区三区av| 国内精品久久久久影院色| 欧美日韩黄色一区二区| 亚洲免费在线观看视频| 国产成人精品1024| 精品国精品国产| 美女诱惑一区二区| 91精品在线麻豆| 亚洲一区二区三区视频在线播放 | av网站免费线看精品| 精品久久国产老人久久综合| 日韩精品色哟哟| 欧美日韩一区二区欧美激情| 一区二区三区四区不卡在线| 91免费国产在线观看| 国产精品国产精品国产专区不蜜 | 国产又黄又大久久| 欧美成人精品福利| 蜜臀久久99精品久久久久久9 | 亚洲国产综合91精品麻豆| 99热精品国产| 中文字幕一区二区三区在线观看| 国产91在线看| 国产女人18毛片水真多成人如厕| 激情综合色综合久久综合| 欧美videofree性高清杂交| 日韩电影免费一区| 欧美日韩国产一区二区三区地区| 一区二区三区免费网站| 91福利在线观看| 午夜精品久久久久久久| 欧美色综合天天久久综合精品| 亚洲一区二区不卡免费| 欧美日韩一卡二卡三卡| 亚洲第一福利一区| 欧美一区二区免费| 精品影院一区二区久久久| 精品国产一二三区| 成人在线综合网| 亚洲人精品午夜| 欧美日韩夫妻久久| 久久福利视频一区二区| 国产欧美日韩卡一| 91蝌蚪国产九色| 亚洲地区一二三色| 欧美不卡一二三| 99精品桃花视频在线观看| 玉米视频成人免费看| 欧美日本国产视频| 精品一区二区三区av| 国产精品国产三级国产普通话蜜臀 | 视频一区欧美精品| 欧美mv日韩mv国产网站| 丁香亚洲综合激情啪啪综合| 亚洲天堂网中文字| 4438x亚洲最大成人网| 国产一区不卡精品| 一区二区三区精品在线观看| 欧美一区二区网站| 欧美精品亚洲二区|