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

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

常用鏈接

留言簿(48)

我參與的團(tuán)隊(duì)

搜索

  •  

積分與排名

  • 積分 - 402860
  • 排名 - 59

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

LOD地形根據(jù)視點(diǎn)的變化決定是否進(jìn)行網(wǎng)格分割,因此系統(tǒng)應(yīng)設(shè)計(jì)一個(gè)視點(diǎn)類,來(lái)管理視點(diǎn)相關(guān)的數(shù)據(jù)。這節(jié)介紹的視點(diǎn)類是通用的,在很多網(wǎng)站都可下到這個(gè)類的代碼,它可以用在OPENGL編程的各個(gè)場(chǎng)合,當(dāng)然朋友也可根據(jù)需要自己增加相應(yīng)功能!
/***********************************************************************
*    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;}                        //獲得攝像機(jī)位置
    CVector3    GetView(){return m_vView;}                             //獲得視線目標(biāo)點(diǎn)
    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);  //初始化攝像機(jī)
    void RotateView(float angle, float X, float Y, float Z);      //繞(x,y,z)旋轉(zhuǎn)angle
    void SetViewByMouse();                                         //通過(guò)鼠標(biāo)旋轉(zhuǎn)場(chǎng)景
    void RotateAroundPoint(CVector3 vCenter, float X, float Y, float Z);   //繞點(diǎn)旋轉(zhuǎn)
    void StrafeCamera(float speed);                                        //平移攝像機(jī)
    void MoveCamera(float speed);                                        //沿視線方向移動(dòng)攝像機(jī)
    void Look();                                                    //設(shè)置視點(diǎn)相當(dāng)于glLookAt()
    void Update();                                                       //更新視點(diǎn)位置。
    void CheckForMovement();                                           //檢查是否有視點(diǎn)變量更新
private:
    CVector3 m_vPosition;       //攝像機(jī)視點(diǎn)
    CVector3 m_vView;           //攝像機(jī)視線
    CVector3 m_vUpVector;       //攝像機(jī)向上方向
    CVector3 m_vStrafe;         //攝像機(jī)平移
    const float fSpeed;         //攝像機(jī)移動(dòng)速度
};


/***********************************************************************
*    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);                 //固定光標(biāo)在屏幕中心

    angleY = (m_CurPt.x - m_PrePt.x    )/1000.0;             //根據(jù)鼠標(biāo)移動(dòng)距離確定旋轉(zhuǎn)角度
    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);           //繞任意軸旋轉(zhuǎn)
    RotateView(angleY,0,1,0);                                       //繞y軸旋轉(zhuǎn)



}

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);
    //下面就是一個(gè)數(shù)學(xué)公式
    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;           //視點(diǎn)+新向量=新視線目標(biāo)點(diǎn)
}

void Camera::StrafeCamera(float speed)
{
   
                                                //給視線目標(biāo)點(diǎn),視點(diǎn)增加一個(gè)增量
    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;        //沿視線方向移動(dòng)
    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()                           // 上下左右移動(dòng)視點(diǎn)
{
    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 閱讀(2605) 評(píng)論(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>
            性欧美在线看片a免费观看| 免费观看30秒视频久久| 久久亚洲视频| 在线看视频不卡| 久久久久久久综合狠狠综合| 免费欧美日韩| 亚洲美洲欧洲综合国产一区| 欧美性猛交视频| 欧美一区二区三区视频| 麻豆成人在线观看| 99精品欧美一区二区三区综合在线 | 欧美日韩国产首页| 亚洲午夜精品一区二区三区他趣| 午夜一级久久| 亚洲成在人线av| 欧美日韩中文在线| 久久国产夜色精品鲁鲁99| 欧美黄色免费网站| 亚洲嫩草精品久久| 亚洲高清视频一区二区| 欧美精品一线| 久久精品成人| 一本到12不卡视频在线dvd| 久久精品欧美日韩| 亚洲免费观看视频| 国产亚洲一二三区| 欧美日韩一区二区三区四区五区| 午夜久久久久久| 最新中文字幕一区二区三区| 欧美一区不卡| 99国产精品久久久| 国产一区亚洲一区| 欧美日韩一区在线播放| 久久久水蜜桃av免费网站| 91久久久在线| 牛牛影视久久网| 性久久久久久| 在线一区欧美| 亚洲国产美国国产综合一区二区| 国产精品萝li| 欧美日本韩国一区| 裸体一区二区| 久久久夜夜夜| 先锋影院在线亚洲| 一区二区欧美日韩| 亚洲福利专区| 欧美福利一区| 久久在线播放| 久久理论片午夜琪琪电影网| 亚洲欧美99| 亚洲午夜精品久久久久久浪潮| 亚洲国产精品一区在线观看不卡| 国产婷婷成人久久av免费高清 | 亚洲国产第一| 韩国亚洲精品| 国产日韩精品在线播放| 国产精品地址| 国产精品sss| 欧美日韩情趣电影| 欧美日韩国产一中文字不卡| 欧美成人精品一区二区三区| 久久婷婷蜜乳一本欲蜜臀| 欧美一区二区在线看| 午夜精品区一区二区三| 亚洲男同1069视频| 亚洲免费在线电影| 亚洲一区二区在线视频| 亚洲一区激情| 午夜精品视频一区| 欧美亚洲一区| 欧美在线亚洲一区| 久久精品国产77777蜜臀| 欧美在线视频免费播放| 欧美综合国产精品久久丁香| 欧美在线视频a| 久久精品麻豆| 免费日韩av片| 欧美激情区在线播放| 欧美日韩成人免费| 欧美日韩一区二区免费视频| 欧美偷拍一区二区| 国产精品一区二区在线观看网站 | 蜜桃av噜噜一区| 免费的成人av| 欧美日本久久| 国产精品久久久久久久久免费桃花 | 亚洲欧美在线aaa| 欧美一区二区观看视频| 久久久久久久综合| 欧美国产日韩二区| 国产精品扒开腿爽爽爽视频| 国产精品中文在线| 亚洲电影第三页| 亚洲精品影视| 午夜精品999| 久久免费国产精品| 亚洲激情婷婷| 亚洲在线视频免费观看| 久久精品人人做人人爽电影蜜月| 玖玖国产精品视频| 欧美日韩中文在线观看| 国产色产综合产在线视频| 亚洲国产综合在线看不卡| 亚洲最新视频在线播放| 欧美中日韩免费视频| 欧美高潮视频| 一区二区三区久久| 久久日韩粉嫩一区二区三区| 欧美日韩播放| 国内成人精品视频| av成人免费| 两个人的视频www国产精品| 亚洲美女黄色| 久久精品视频免费播放| 欧美日韩国产精品自在自线| 国产区在线观看成人精品| 亚洲人在线视频| 欧美影院一区| 亚洲日本成人网| 久久精品国产69国产精品亚洲| 欧美日韩国产高清视频| 好男人免费精品视频| 亚洲一区二区伦理| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美精品在线视频观看| 国产一区日韩二区欧美三区| 亚洲免费观看高清完整版在线观看熊 | 久久精品综合| 亚洲美女视频网| 久久先锋影音| 国产欧美va欧美不卡在线| 亚洲最新合集| 欧美激情亚洲综合一区| 欧美在线免费看| 国产精品久久久久国产a级| 亚洲欧洲日产国产网站| 久久久欧美精品| 一区二区欧美激情| 欧美a级在线| 红桃视频国产一区| 欧美在线亚洲| 亚洲视频视频在线| 欧美精品一区二区精品网| 亚洲第一狼人社区| 久久久亚洲影院你懂的| 亚洲自拍电影| 国产精品高清网站| 亚洲午夜精品久久久久久浪潮| 亚洲第一天堂av| 久久综合一区| 亚洲国产mv| 欧美福利网址| 玖玖玖国产精品| 亚洲国产欧美精品| 欧美成人精品不卡视频在线观看| 性色av一区二区三区在线观看 | 久久久久久久久久码影片| 国产亚洲一区二区三区在线播放| 亚洲欧美一区二区激情| 国产精品99久久久久久久久| 欧美日韩和欧美的一区二区| 一区二区激情视频| 亚洲巨乳在线| 欧美午夜视频网站| 亚洲资源av| 午夜久久久久| 国产一区二区三区av电影| 久久精品成人一区二区三区| 性欧美办公室18xxxxhd| 国内自拍亚洲| 蜜桃久久av| 欧美国产视频日韩| 亚洲素人在线| 亚洲亚洲精品在线观看 | 免费日韩av片| 日韩视频一区二区三区在线播放免费观看 | 久久经典综合| 久久精品免费观看| 亚洲第一精品夜夜躁人人爽| 美女主播精品视频一二三四| 久久综合伊人77777| 亚洲日韩欧美视频| 9久草视频在线视频精品| 欧美体内谢she精2性欧美| 欧美一二三区精品| 久久久久久久久久看片| 亚洲精选大片| 亚洲一区二区三区乱码aⅴ| 国产一区二区三区直播精品电影| 模特精品在线| 欧美手机在线视频| 久久精品夜夜夜夜久久| 久久综合久色欧美综合狠狠| 99国产精品国产精品毛片| 亚洲视频导航| 在线日韩一区二区| 99精品久久久| 激情六月婷婷综合| 日韩视频免费观看高清完整版| 国产农村妇女毛片精品久久麻豆 |