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

  C++博客 :: 首頁 :: 聯系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402369
  • 排名 - 59

最新評論

閱讀排行榜

評論排行榜

LOD地形根據視點的變化決定是否進行網格分割,因此系統應設計一個視點類,來管理視點相關的數據。這節介紹的視點類是通用的,在很多網站都可下到這個類的代碼,它可以用在OPENGL編程的各個場合,當然朋友也可根據需要自己增加相應功能!
/***********************************************************************
*    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;             //根據鼠標移動距離確定旋轉角度
    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);
    //下面就是一個數學公式
    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>
            国产在线欧美| 国产婷婷精品| 亚洲精品视频一区| 牛牛国产精品| 亚洲一区欧美一区| 亚洲一区免费视频| 国产精品99久久久久久久vr | 国产亚洲欧美日韩美女| 久久精品国产清高在天天线| 一区二区三区免费网站| 亚洲视频观看| 久久国产精品亚洲77777| 久久久国产91| 欧美bbbxxxxx| 在线视频中文亚洲| 亚洲永久免费精品| 久久久国产一区二区三区| 麻豆精品在线视频| 亚洲破处大片| 亚洲人成人一区二区在线观看| 亚洲欧洲视频| 先锋影院在线亚洲| 久久一区二区三区av| 亚洲电影自拍| 亚洲伊人伊色伊影伊综合网 | 亚洲欧洲日本mm| 夜夜精品视频一区二区| 欧美一区二区三区四区在线观看地址 | 亚洲第一伊人| 亚洲图片欧洲图片日韩av| 久久国产精品毛片| 亚洲国产成人久久| 亚洲午夜精品17c| 免费欧美电影| 国产日韩免费| 亚洲午夜伦理| 欧美大片91| 亚洲摸下面视频| 欧美电影免费观看高清| 亚洲一级黄色| 欧美精品麻豆| 在线观看亚洲精品| 亚洲欧美综合一区| 91久久夜色精品国产九色| 欧美一级视频精品观看| 欧美日韩小视频| 亚洲茄子视频| 裸体素人女欧美日韩| 午夜精品www| 亚洲永久精品大片| 亚洲国产成人久久综合| 久久精品视频在线| 国产欧美日本在线| 亚洲免费在线电影| 日韩视频在线你懂得| 久久久久一区| 韩国视频理论视频久久| 欧美一区二区三区四区在线观看| 日韩午夜在线视频| 亚洲第一级黄色片| 久久久久久久久久久久久久一区| 一区二区精品国产| 欧美色视频在线| 夜夜爽夜夜爽精品视频| 欧美激情亚洲激情| 久久影音先锋| 亚洲国产精品嫩草影院| 免费在线观看一区二区| 久久精品人人爽| 亚洲在线电影| 国产欧美精品在线播放| 香蕉国产精品偷在线观看不卡 | 免费91麻豆精品国产自产在线观看| 亚洲私人影院在线观看| 欧美少妇一区二区| 亚洲男人天堂2024| 亚洲在线观看免费| 国产一区二区三区免费不卡| 久久久久久久网站| 久久久久久91香蕉国产| 在线观看一区欧美| 亚洲国产欧美不卡在线观看| 欧美精品成人一区二区在线观看| 一本色道88久久加勒比精品| 亚洲一区日韩| 久久久亚洲午夜电影| 亚洲第一综合天堂另类专| 亚洲国产三级网| 国产精品成人免费视频 | 欧美紧缚bdsm在线视频| 一区二区欧美日韩| 欧美在线视频二区| 另类图片国产| 欧美精品在线免费播放| 亚洲欧美日韩在线| 久久免费黄色| 国产精品高潮呻吟视频| 久久久国产一区二区| 亚洲国产91| 国产精品国产三级国产aⅴ浪潮| 国产一区二区三区在线观看网站| 在线日韩电影| 99视频有精品| 鲁鲁狠狠狠7777一区二区| 欧美亚洲第一页| 亚洲一区中文| 女人香蕉久久**毛片精品| 国产精品卡一卡二| 亚洲国产黄色片| 一区二区三区四区五区精品| 久久偷窥视频| 国产精品久久激情| 亚洲高清网站| 午夜精品福利在线| 亚洲精品五月天| 欧美一级视频一区二区| 欧美电影在线播放| 欧美一区二区国产| 日韩网站在线| 亚洲国产老妈| 欧美伊人久久| 欧美在线日韩| 亚洲欧美国产制服动漫| 亚洲伦理自拍| 欧美福利小视频| 国产一区二区久久| 国产精品免费一区豆花| 亚洲天堂av高清| 欧美国产精品v| 亚洲韩日在线| 久久精品亚洲一区| 国产综合久久久久久| 久久久久久高潮国产精品视| 国产精品入口| 亚洲视频香蕉人妖| 亚洲图片欧洲图片av| 久久av最新网址| 国产精品久久久久影院色老大| 亚洲精品极品| 在线一区二区三区四区| 欧美国产日本| 中文精品在线| 欧美日韩美女一区二区| 亚洲国产影院| 一本久久综合亚洲鲁鲁五月天| 欧美激情影院| 亚洲理论电影网| 国产精品一区二区在线| 99在线精品视频在线观看| 一区二区欧美日韩视频| 欧美日韩一区综合| 亚洲欧美综合| 国产免费成人在线视频| 久久影视三级福利片| 精品电影一区| 免费观看国产成人| 亚洲精品久久嫩草网站秘色| 亚洲天堂av综合网| 国产一区二区精品久久99| 亚洲国产日韩欧美在线图片| 在线视频精品| 国产精品一区二区三区免费观看 | 欧美日韩国产一级片| 日韩亚洲欧美成人一区| 亚洲欧美久久久久一区二区三区| 国产美女搞久久| 欧美激情无毛| 欧美国产一区二区在线观看| 欧美一级理论片| 狠狠网亚洲精品| 欧美激情一区二区三区高清视频| 亚洲理论在线观看| 国产欧美精品日韩精品| 欧美在线视频日韩| 亚洲激情一区| 国产伦精品一区二区三区照片91| 久久久999国产| 亚洲精品视频二区| 久久久亚洲人| 制服丝袜亚洲播放| 国内精品久久久久久久影视蜜臀 | 久久男女视频| 中文av一区特黄| 欧美成人首页| 欧美自拍偷拍| 一区二区三区鲁丝不卡| 激情欧美日韩| 国产精品户外野外| 亚洲国产精品va在看黑人| 亚洲一区欧美一区| 亚洲美女福利视频网站| 国产一在线精品一区在线观看| 欧美日本亚洲视频| 久久久亚洲国产天美传媒修理工| 一本色道久久综合亚洲二区三区 | 在线亚洲免费| 欧美aⅴ一区二区三区视频| 午夜精品在线视频| 欧美色另类天堂2015| 美女日韩在线中文字幕|