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

Shuffy

不斷的學習,不斷的思考,才能不斷的進步.Let's do better together!
posts - 102, comments - 43, trackbacks - 0, articles - 19

《基于MFC的OpenGL編程》Part 15 Selection

Posted on 2010-03-31 20:50 Shuffy 閱讀(577) 評論(0)  編輯 收藏 引用 所屬分類: MFC,OpenGL

Selection

Selection is a powerful feature of OpenGL that allows you click at some position of the OpenGL window using the mouse and determine which of your objects lie beneath it. The act of selecting a specific object is called Picking. With OpenGL's selection feature, we can specify a viewing volume and determine which objects fall within that viewing volume. A powerful utility function, gluPickMatrix, produces a matrix which can be used to create a smaller viewing volume placed beneath the mouse cursor. Then we use selection to test this viewing volume to see which objects are contained by it.

Selection is actually a rendering mode, but in this mode no pisels are actually copied onto the frame buffer. Instead, primitives drawn within the viewing volume produce hit records in a selection buffer. We must set up this selection buffer in advance and name the primitives or groups of primitives so that they can be identified in the selection buffer.We can then parse the buffer to determine which objects intersected the viewing volume.

Naming Primitives

We have to name a group of primitives such as one describing a cube or a cylinder etc in order to identify them. These names are nothing but integers such as for display list names. The names list is maintained on the named stack. After we initialize the name stack we can push names on the stack or simply replace the name currently on the top of the stack. When a hit occurs during selection, all the names on the stack are copied onto the selection buffer.

1,CCY457OpenGLView類中加入一個變量,用來表示寬高比

      GLdouble m_aspectRatio; // width/height ratio

2OnSize函數修改如下:

void CCY457OpenGLView::OnSize(UINT nType, int cx, int cy)
{
      CView::OnSize(nType, cx, cy);
      
if ( 0 >= cx || 0 >= cy )
      {
           
return;
      }
      
// select the full client area
    ::glViewport(00, cx, cy);
      
// compute the aspect ratio
      
// this will keep all dimension scales equal
      m_aspectRatio = (GLdouble)cx/(GLdouble)cy;
      
// select the projection matrix and clear it
    ::glMatrixMode(GL_PROJECTION);
    ::glLoadIdentity();
      
// select the viewing volume
      ::gluPerspective(45.0f, m_aspectRatio, .01f, 200.0f);
      
//::gluOrtho2D(-10.0f, 10.0f, -10.0f, 10.0f);   
      
// switch back to the modelview matrix and clear it
    ::glMatrixMode(GL_MODELVIEW);
    ::glLoadIdentity();
}

3,繪制函數修改如下:

void CCY457OpenGLView::RenderScene ()
{
//繪制函數
      glTranslatef(0.0f,0.0f,-5.0f);
      glRotatef(m_xRot,
1.0f,0.0f,0.0f);
      glRotatef(m_yRot,
0.0f,1.0f,0.0f);
      glInitNames();
      glPushName(
0);
      glPushMatrix();
           glTranslatef(
-2.0f,0.0f,0.0f);
           glLoadName(
1);
           glutSolidSphere(
1.0f,20,20);
      glPopMatrix();
      glPushMatrix();
           glLoadName(
2);
           glTranslatef(
2.0f,0.0f,0.0f);
           glutSolidCube(
1.0f);
      glPopMatrix();
}

4,加入對鼠標左鍵選擇物體的處理

void CCY457OpenGLView::ProcessSelection (CPoint point)
{
      
int xPos = point.x ;
      
int yPos = point.y ;
      GLuint selectBuff[
64];
      GLint hits, viewport[
4];
      glSelectBuffer(
64, selectBuff);
      glGetIntegerv(GL_VIEWPORT, viewport);
      glMatrixMode(GL_PROJECTION);
      glPushMatrix();
      glRenderMode(GL_SELECT);
      glLoadIdentity();
      gluPickMatrix(xPos, viewport[
3- yPos, 2,2, viewport);
      gluPerspective(
45.0f, m_aspectRatio, .01f, 200.0f);
      RenderScene();
      hits 
= glRenderMode(GL_RENDER);
      
if(hits==1)
           ProcessObject(selectBuff);
      glMatrixMode(GL_PROJECTION);
      glPopMatrix();
      glMatrixMode(GL_MODELVIEW);
}
void CCY457OpenGLView::ProcessObject (GLuint* pSelectBuff)
{
      
int id = pSelectBuff[3];
      
if(id==1)
           MessageBox(
"You clicked on Sphere");
      
if(id==2)
           MessageBox(
"You clicked on Cube");
}
void CCY457OpenGLView::OnLButtonDown(UINT nFlags, CPoint point)
{
      ProcessSelection(point);
      CView::OnLButtonDown(nFlags, point);
}

作者:洞庭散人

出處:http://phinecos.cnblogs.com/    

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
原文鏈接:http://www.cnblogs.com/phinecos/archive/2008/11/07/1328861.html
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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ⅴ浪潮| 亚洲一区二区三区激情| 亚洲自拍偷拍福利| 激情综合中文娱乐网| 欧美顶级少妇做爰| 欧美日韩亚洲系列| 久久久视频精品| 欧美高清视频一区二区| 亚洲欧美日韩一区二区| 久久久精品国产免费观看同学 | 久久久人人人| av成人免费观看| 亚洲免费一在线| 亚洲日本成人在线观看| 中文在线资源观看视频网站免费不卡| 国产精品爽黄69| 国产精品久久久久久久久免费 | 亚洲欧洲一区二区三区| 中文在线不卡视频| 亚洲第一网站| 亚洲已满18点击进入久久| 伊人伊人伊人久久| 亚洲天堂激情| 亚洲免费成人av| 久久av资源网站| 亚洲在线免费观看| 免费成年人欧美视频| 性做久久久久久| 欧美精品电影| 欧美电影打屁股sp| 国产日韩欧美在线播放| 亚洲精品国久久99热| 在线 亚洲欧美在线综合一区| 亚洲伦理久久| 亚洲日本欧美天堂| 久久午夜国产精品| 久久精品九九| 国产精品magnet| 日韩一级精品视频在线观看| 亚洲大胆美女视频| 欧美在线亚洲综合一区| 亚洲欧美在线磁力| 欧美天堂在线观看| 亚洲激情视频在线观看| 亚洲动漫精品| 久久精品99| 久久久久一本一区二区青青蜜月| 国产精品任我爽爆在线播放| 亚洲欧洲精品一区二区三区不卡 | 一区二区三区国产精华| 日韩一二三在线视频播| 女主播福利一区| 免费成人黄色av| 亚洲电影免费观看高清完整版在线观看| 亚洲免费在线| 久久国产福利国产秒拍| 国产欧美日韩综合精品二区| 亚洲一本大道在线| 欧美一区二区三区免费大片| 国产精品免费福利| 亚洲综合第一| 久久嫩草精品久久久精品| 国产自产精品| 玖玖综合伊人| 亚洲激情成人| 亚洲免费视频一区二区| 国产精品尤物| 午夜精品视频网站| 久久久国产精品一区二区三区| 国产婷婷色一区二区三区四区| 午夜影院日韩| 欧美a级一区二区| 亚洲精品午夜| 国产精品美女一区二区在线观看| 亚洲性图久久| 国产精品五月天| 欧美专区在线播放| 免费在线观看成人av| 亚洲蜜桃精久久久久久久| 欧美日韩中文在线观看| 亚洲自拍偷拍网址| 欧美成人一区二区三区| 99视频精品在线| 国产欧美日韩另类视频免费观看| 欧美中文日韩| 亚洲精选久久| 久久综合伊人| 中文在线一区| 韩国成人福利片在线播放| 欧美精品久久久久久久免费观看 | 国产精品av免费在线观看| 午夜性色一区二区三区免费视频| 免费成人高清| 午夜在线视频观看日韩17c| 国内在线观看一区二区三区| 欧美精品91| 久久九九免费| 一区二区三区回区在观看免费视频| 久久av红桃一区二区小说| 91久久嫩草影院一区二区| 欧美私人网站| 欧美高清在线| 香蕉国产精品偷在线观看不卡| 欧美电影电视剧在线观看| 欧美一级在线播放| 亚洲最新色图| 亚洲国产精品va在线观看黑人| 国产精品―色哟哟| 欧美极品影院| 老牛影视一区二区三区| 欧美一级免费视频| 一区二区日本视频| 亚洲经典在线| 嫩草影视亚洲| 久久久久亚洲综合| 欧美一区二区三区四区视频| 一本色道88久久加勒比精品| 亚洲国产高清视频| 一区二区亚洲精品国产| 国产精品入口66mio| 欧美三级第一页| 欧美精品在线免费观看| 欧美a级一区| 免费日韩成人| 欧美电影打屁股sp| 蜜臀久久99精品久久久画质超高清 | 亚洲视频久久| 亚洲精品欧美在线| 亚洲黄色一区二区三区| 怡红院av一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 国产日韩1区| 国产亚洲亚洲| 好看的日韩av电影| 韩国精品久久久999| 黄色亚洲在线| 永久域名在线精品| 亚洲第一福利视频| 精品动漫一区二区| 亚洲国产婷婷香蕉久久久久久99| 在线日韩中文字幕| 91久久综合| 在线中文字幕一区| 亚洲一区二区三| 欧美一区二区视频免费观看| 欧美在线日韩| 欧美成人免费小视频| 亚洲国产精品专区久久| 雨宫琴音一区二区在线| 狠狠做深爱婷婷久久综合一区| 一区二区视频免费在线观看| 亚洲国产成人精品女人久久久| 亚洲国产精品嫩草影院| 亚洲看片网站| 午夜亚洲伦理| 欧美成人福利视频| 91久久在线观看| 亚洲一品av免费观看| 久久不见久久见免费视频1| 久久一二三四| 欧美日韩综合不卡| 韩国av一区二区三区| 日韩视频在线你懂得| 午夜精品久久久久久| 乱中年女人伦av一区二区| 亚洲电影下载| 亚洲男人的天堂在线| 久久综合色88| 国产精品盗摄一区二区三区| 国语自产在线不卡| 99国产精品99久久久久久| 欧美在线视频不卡| 亚洲第一主播视频| 亚洲欧美日韩中文视频| 久久久91精品国产| 欧美午夜精品久久久久久孕妇| 国内自拍一区| 亚洲永久免费观看| 欧美91精品| 欧美一乱一性一交一视频| 欧美黄色成人网| 激情久久影院| 亚洲摸下面视频| 亚洲国产婷婷| 久久精品盗摄| 国产精品亚洲视频| av成人激情| 亚洲国产成人精品久久| 久久狠狠婷婷| 国产美女一区| 亚洲免费婷婷| 亚洲最新中文字幕|