青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

  C++博客 :: 首頁 :: 聯(lián)系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402386
  • 排名 - 59

最新評論

閱讀排行榜

評論排行榜

LOD地形根據(jù)視點的變化決定是否進行網(wǎng)格分割,因此系統(tǒng)應設計一個視點類,來管理視點相關的數(shù)據(jù)。這節(jié)介紹的視點類是通用的,在很多網(wǎng)站都可下到這個類的代碼,它可以用在OPENGL編程的各個場合,當然朋友也可根據(jù)需要自己增加相應功能!
/***********************************************************************
*    Copyrights Reserved by QinGeSoftware
*    Author : Qinge
*    Filename : Camera.h 1.0
*    Date: 2008-1-10
************************************************************************/
#pragma once
#include "Vector3.h"
class Camera
{
public:
    Camera(void);
    virtual ~Camera(void);
public:
    CVector3 GetPosition(){return m_vPosition;}                        //獲得攝像機位置
    CVector3    GetView(){return m_vView;}                             //獲得視線目標點
    CVector3 GetUpVector() {return m_vUpVector;}                       //獲得向上方向
    CVector3 GetStrafe() {return m_vStrafe;}                           //獲得平移方向的單位向量

    void PosotionCamera(float positionX, float positionY, float positionZ,
                         float viewX,     float viewY,     float viewZ,
                        float upVectorX, float upVectorY, float upVectorZ);  //初始化攝像機
    void RotateView(float angle, float X, float Y, float Z);      //繞(x,y,z)旋轉angle
    void SetViewByMouse();                                         //通過鼠標旋轉場景
    void RotateAroundPoint(CVector3 vCenter, float X, float Y, float Z);   //繞點旋轉
    void StrafeCamera(float speed);                                        //平移攝像機
    void MoveCamera(float speed);                                        //沿視線方向移動攝像機
    void Look();                                                    //設置視點相當于glLookAt()
    void Update();                                                       //更新視點位置。
    void CheckForMovement();                                           //檢查是否有視點變量更新
private:
    CVector3 m_vPosition;       //攝像機視點
    CVector3 m_vView;           //攝像機視線
    CVector3 m_vUpVector;       //攝像機向上方向
    CVector3 m_vStrafe;         //攝像機平移
    const float fSpeed;         //攝像機移動速度
};


/***********************************************************************
*    Copyrights Reserved by QinGeSoftware
*    Author : Qinge
*    Filename : Camera.cpp 1.0
*    Date: 2008-1-10
************************************************************************/
#include "StdAfx.h"
#include "Camera.h"

Camera::Camera(void):fSpeed(5.0f)
{
 
  m_vPosition = CVector3(0,0,0);
  m_vView      = CVector3(0.0,1.0,0.5);
  m_vUpVector = CVector3(0.0,0.0,1.0);

}

Camera::~Camera(void)
{
}


void Camera::PosotionCamera(float positionX, float positionY, float positionZ, float viewX, float viewY, float viewZ, float upVectorX, float upVectorY, float upVectorZ)
{
   m_vPosition = CVector3(positionX, positionY+200, positionZ);
   m_vView     = CVector3(viewX, viewY, viewZ);
   m_vUpVector = CVector3(upVectorX, upVectorY, upVectorZ);
}

void Camera::SetViewByMouse()
{
    CPoint m_CurPt,m_PrePt;
    HDC hDC = ::GetDC(NULL);
    float angleY, angleZ;
    CVector3  m_uAixs, m_vViewDire;
    unsigned long WIDTH, HEIGHT;

    WIDTH  =::GetDeviceCaps(hDC,HORZRES);                 //獲得屏幕分辨率
    HEIGHT =::GetDeviceCaps(hDC,VERTRES);                 //
   
    ::GetCursorPos(&m_CurPt);
    m_PrePt.x = WIDTH >>1;                                 //分辨率/2
    m_PrePt.y = HEIGHT >> 1;
    ::SetCursorPos(m_PrePt.x, m_PrePt.y);                 //固定光標在屏幕中心

    angleY = (m_CurPt.x - m_PrePt.x    )/1000.0;             //根據(jù)鼠標移動距離確定旋轉角度
    angleZ = (m_CurPt.y - m_PrePt.y )/1000.0;             //

    m_vViewDire = m_vView - m_vPosition;
    m_uAixs = m_vViewDire.CrossProduct(m_vViewDire,m_vUpVector);   //得到平移向量
    m_uAixs = m_uAixs.Normalize(m_uAixs);

    RotateView(angleZ, m_uAixs.x, m_uAixs.y, m_uAixs.z);           //繞任意軸旋轉
    RotateView(angleY,0,1,0);                                       //繞y軸旋轉



}

void Camera::RotateView(float angle, float x, float y, float z)
{
    CVector3 vNewView;

   
    CVector3 vView = m_vView - m_vPosition;    //視線方向
   
    float cosTheta = (float)cos(angle);
    float sinTheta = (float)sin(angle);
    //下面就是一個數(shù)學公式
    vNewView.x  = (cosTheta + (1 - cosTheta) * x * x)        * vView.x;
    vNewView.x += ((1 - cosTheta) * x * y - z * sinTheta)    * vView.y;
    vNewView.x += ((1 - cosTheta) * x * z + y * sinTheta)    * vView.z;

    vNewView.y  = ((1 - cosTheta) * x * y + z * sinTheta)    * vView.x;
    vNewView.y += (cosTheta + (1 - cosTheta) * y * y)        * vView.y;
    vNewView.y += ((1 - cosTheta) * y * z - x * sinTheta)    * vView.z;

    vNewView.z  = ((1 - cosTheta) * x * z - y * sinTheta)    * vView.x;
    vNewView.z += ((1 - cosTheta) * y * z + x * sinTheta)    * vView.y;
    vNewView.z += (cosTheta + (1 - cosTheta) * z * z)        * vView.z;
       
    m_vView = m_vPosition + vNewView;           //視點+新向量=新視線目標點
}

void Camera::StrafeCamera(float speed)
{
   
                                                //給視線目標點,視點增加一個增量
    m_vPosition.x += m_vStrafe.x * speed;
    m_vPosition.z += m_vStrafe.z * speed;
   
    m_vView.x += m_vStrafe.x * speed;
    m_vView.z += m_vStrafe.z * speed;
}

void Camera::MoveCamera(float speed)
{
    CVector3 vVector = m_vView - m_vPosition;
    vVector = vVector.Normalize(vVector);
   
    m_vPosition.x += vVector.x * speed;        //沿視線方向移動
    m_vPosition.z += vVector.z * speed;        //
    m_vView.x += vVector.x * speed;            //
    m_vView.z += vVector.z * speed;            //
}

void Camera::Update()
{
   
    CVector3 vCross =m_vView.CrossProduct(m_vView - m_vPosition, m_vUpVector);
    m_vStrafe = vCross.Normalize(vCross);

    SetViewByMouse();
    CheckForMovement();

}
void Camera::CheckForMovement()                           // 上下左右移動視點
{
    if(GetKeyState(VK_UP) & 0x80 || GetKeyState('W') & 0x80)
    {               

        MoveCamera(fSpeed);               
    }

    if(GetKeyState(VK_DOWN) & 0x80 || GetKeyState('S') & 0x80)
    {           

        MoveCamera(-fSpeed);               
    }

    if(GetKeyState(VK_LEFT) & 0x80 || GetKeyState('A') & 0x80)
    {           

        StrafeCamera(-fSpeed);
    }

    if(GetKeyState(VK_RIGHT) & 0x80 || GetKeyState('D') & 0x80)
    {           

        StrafeCamera(fSpeed);
    }   
}
void Camera::Look()                            //等于gluLookAt()
{
    gluLookAt(m_vPosition.x, m_vPosition.y, m_vPosition.z,   
              m_vView.x,     m_vView.y,     m_vView.z,   
              m_vUpVector.x, m_vUpVector.y, m_vUpVector.z);
}

posted on 2008-01-15 17:01 sdfasdf 閱讀(2604) 評論(0)  編輯 收藏 引用 所屬分類: OPENGL
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情第二页| 久久午夜电影网| 午夜在线不卡| 午夜免费日韩视频| 午夜伦欧美伦电影理论片| 亚洲婷婷在线| 久久成人免费网| 欧美成人中文字幕| 亚洲激情欧美| 亚洲人成人一区二区在线观看| 久久久久国色av免费看影院 | 日韩视频中文| 亚洲一区精品视频| 久久久久久久综合狠狠综合| 美女国内精品自产拍在线播放| 欧美激情视频在线播放 | 久久综合狠狠综合久久综青草| 欧美成人一区在线| 国产精品日日摸夜夜添夜夜av| 韩国一区二区三区在线观看| 亚洲精品久久在线| 欧美亚洲免费在线| 亚洲国产成人精品久久久国产成人一区| 亚洲娇小video精品| 亚洲免费高清| 午夜精彩视频在线观看不卡| 欧美成人午夜免费视在线看片| 日韩一级视频免费观看在线| 久久国产成人| 欧美三级小说| 亚洲国产综合在线| 久久精品一区二区三区不卡| 亚洲伦理久久| 欧美大片免费| 一色屋精品视频在线观看网站| 亚洲一区国产一区| 亚洲国产日韩欧美在线图片| 欧美一区二区三区在线看| 欧美日韩在线精品| 亚洲国产电影| 久久只有精品| 午夜精品一区二区在线观看| 欧美日韩精品欧美日韩精品一| 亚洲国产成人久久综合| 久久激情综合网| 亚洲制服少妇| 国产精品国产福利国产秒拍| 亚洲美女中文字幕| 亚洲第一视频网站| 免费观看成人鲁鲁鲁鲁鲁视频| 精品99视频| 久久亚洲精品中文字幕冲田杏梨| 亚洲男人的天堂在线aⅴ视频| 欧美午夜精品久久久久久孕妇| 一本色道久久综合亚洲精品不| 欧美aa在线视频| 狂野欧美激情性xxxx| 精品1区2区3区4区| 欧美mv日韩mv国产网站| 另类激情亚洲| 亚洲精品女人| 亚洲精品一区在线| 国产精品porn| 亚洲欧美日韩直播| 国产精品99久久99久久久二8 | 欧美国产综合一区二区| 亚洲欧洲日本专区| 亚洲国产精品热久久| 欧美成人在线免费观看| 99国产精品国产精品久久 | 久久精品三级| 久久久精品国产免费观看同学| 在线观看欧美激情| 亚洲国产婷婷| 欧美日韩综合在线免费观看| 欧美一二三区精品| 久久久久久久精| 亚洲经典在线看| 99精品视频免费观看| 新67194成人永久网站| 国产乱人伦精品一区二区| 久久精品中文字幕免费mv| 久久久夜精品| 一本色道久久综合亚洲精品不| 亚洲一二三区在线| 影音先锋成人资源站| 亚洲精品欧美日韩专区| 国产精品一区在线观看| 欧美国产精品日韩| 国产精品vvv| 久久综合色88| 欧美性猛交xxxx乱大交退制版 | 国产一区二区精品| 欧美成人精品高清在线播放| 欧美久久久久久久| 欧美一区二区免费| 久久久久国产一区二区三区| 一区二区三区日韩欧美| 久久爱91午夜羞羞| 日韩亚洲欧美在线观看| 午夜精品短视频| 日韩一级片网址| 久久精品国产99| 亚洲专区国产精品| 久久字幕精品一区| 欧美亚洲日本国产| 欧美日韩成人在线播放| 蜜桃av综合| 国产色爱av资源综合区| 一本久道久久综合婷婷鲸鱼| 亚洲东热激情| 亚洲欧美中文日韩在线| 亚洲一区二区免费在线| 免费欧美日韩| 久久亚洲私人国产精品va| 国产精品久久久一区二区三区| 亚洲国产日韩欧美| 亚洲大片在线| 久久久国产精品一区二区中文| 亚洲一区二区三区免费在线观看 | 欧美视频在线免费看| 欧美国产国产综合| 伊人久久大香线蕉综合热线| 亚洲一区免费视频| 一区二区三区日韩精品| 欧美大胆成人| 欧美激情一区二区三区全黄 | 午夜伦理片一区| 欧美色区777第一页| 亚洲精品一区二区三区婷婷月 | 国产亚洲成人一区| 亚洲欧美日产图| 亚洲欧美激情精品一区二区| 欧美日韩情趣电影| 99这里只有精品| 亚洲一区二区三区视频| 国产精品久久久久久久7电影| 亚洲深夜福利在线| 久久亚洲电影| 欧美三级免费| 欧美激情视频免费观看| 狠狠色丁香婷婷综合影院| 亚洲女人天堂av| 午夜精品亚洲一区二区三区嫩草| 欧美日韩福利在线观看| 亚洲精品国产拍免费91在线| 日韩亚洲不卡在线| 欧美性猛交xxxx乱大交蜜桃| 一区二区三区国产在线观看| 亚洲欧美综合精品久久成人| 国产视频自拍一区| 久久综合狠狠综合久久综青草 | 亚洲国产视频直播| 中日韩美女免费视频网址在线观看 | 亚洲人成在线播放网站岛国| 欧美激情女人20p| 99国产成+人+综合+亚洲欧美| 亚洲性图久久| 国产欧美视频一区二区| 久久一区视频| 亚洲美女黄色| 久久精品91| 亚洲精品久久久久| 国产精品久久波多野结衣| 久久精品国产2020观看福利| 91久久精品www人人做人人爽 | 欧美成人国产一区二区| 亚洲精品免费观看| 国产精品天美传媒入口| 久久久久成人精品免费播放动漫| 欧美激情第六页| 欧美一区二区三区免费看| 亚洲高清资源| 国产精品高潮呻吟久久av无限| 性欧美xxxx大乳国产app| 亚洲国产成人一区| 先锋亚洲精品| 亚洲精品在线视频| 国产精品青草久久| 免费观看在线综合| 先锋影院在线亚洲| 亚洲经典自拍| 久久视频精品在线| 亚洲小说春色综合另类电影| 亚洲高清久久网| 国产欧美日韩亚洲| 欧美日韩精品系列| 欧美h视频在线| 久久国产色av| 亚洲一区在线视频| 亚洲每日更新| 亚洲成人在线网| 久久久精品久久久久| 亚洲综合色自拍一区| 亚洲免费成人av电影| 136国产福利精品导航网址| 中日韩视频在线观看| 欧美日韩在线大尺度| 欧美大片免费看| 久久精品视频免费播放|