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

Shuffy

不斷的學(xué)習(xí),不斷的思考,才能不斷的進(jìn)步.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 閱讀(588) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 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類(lèi)中加入一個(gè)變量,用來(lái)表示寬高比

      GLdouble m_aspectRatio; // width/height ratio

2,OnSize函數(shù)修改如下:

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,繪制函數(shù)修改如下:

void CCY457OpenGLView::RenderScene ()
{
//繪制函數(shù)
      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,加入對(duì)鼠標(biāo)左鍵選擇物體的處理

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/    

本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
原文鏈接: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>
            欧美jizzhd精品欧美巨大免费| 亚洲人成网站777色婷婷| 亚洲国产精品久久91精品| 国产精品久久久久久久久久妞妞| 欧美成人精品一区二区三区| 国产精品扒开腿做爽爽爽软件| 欧美激情成人在线视频| 国产一区二区精品丝袜| 亚洲小说春色综合另类电影| 亚洲另类自拍| 欧美 日韩 国产一区二区在线视频| 久久精品国产一区二区三区免费看| 欧美日韩国产页| 91久久精品国产91久久| 亚洲国产国产亚洲一二三| 欧美一区激情| 久久精品av麻豆的观看方式| 国产精品一卡二| 亚洲免费在线视频| 亚洲视频在线二区| 欧美日韩一区二区在线播放| 亚洲人成精品久久久久| 亚洲作爱视频| 欧美天天在线| 一区二区三区国产精华| 亚洲一区亚洲| 国产精品免费网站| 亚洲欧美视频在线观看视频| 欧美一区二区三区视频在线观看 | 亚洲一区二区三区在线看| 欧美久久久久久| 亚洲毛片一区| 午夜精品999| 国产夜色精品一区二区av| 欧美在线影院在线视频| 久久久久久久精| 尤物yw午夜国产精品视频明星| 久久久久久午夜| 亚洲第一福利视频| 一本色道久久综合亚洲精品婷婷| 欧美视频在线播放| 欧美一级淫片aaaaaaa视频| 久久影院午夜论| 亚洲级视频在线观看免费1级| 欧美高清在线视频观看不卡| 亚洲精品在线一区二区| 亚洲一二三级电影| 国产一区二区主播在线| 蜜月aⅴ免费一区二区三区| 亚洲精品日产精品乱码不卡| 午夜亚洲激情| 亚洲电影免费观看高清完整版在线观看| 久热精品视频在线| 中文在线不卡| 美女爽到呻吟久久久久| 夜夜嗨av一区二区三区中文字幕| 国产精品嫩草99av在线| 久久久久久久97| 日韩视频在线播放| 久久中文字幕导航| 亚洲午夜免费福利视频| 黄色欧美日韩| 欧美日韩一区国产| 久久久久久伊人| 一区二区三区视频观看| 久久日韩精品| 亚洲免费影视| 最新日韩在线视频| 国产手机视频精品| 欧美精品一区二区三区视频| 欧美一级黄色网| 亚洲毛片网站| 欧美a级理论片| 欧美自拍丝袜亚洲| 在线综合欧美| 亚洲精品国产品国语在线app| 国产精品香蕉在线观看| 欧美激情bt| 久久精品亚洲一区二区| 亚洲天堂成人在线观看| 亚洲人体影院| 欧美成人福利视频| 久久精品亚洲一区二区| 亚洲在线播放电影| 一区二区三区不卡视频在线观看| 一区二区三区在线观看欧美| 国产精品毛片高清在线完整版| 欧美国产一区二区在线观看| 久久久国产精品一区| 性做久久久久久久久| 在线综合亚洲| 亚洲精品一区二区三区婷婷月 | 欧美在线免费看| 一区二区三区产品免费精品久久75| 亚洲第一狼人社区| 欧美国产第二页| 久久亚洲影音av资源网| 久久久综合免费视频| 久久精品72免费观看| 性色一区二区| 欧美一区二区视频网站| 欧美一级久久久| 亚久久调教视频| 欧美有码在线观看视频| 午夜亚洲伦理| 欧美中在线观看| 欧美怡红院视频一区二区三区| 亚洲一区自拍| 欧美在线三级| 久久狠狠亚洲综合| 久久天堂成人| 欧美大片免费看| 玖玖玖国产精品| 欧美不卡一区| 亚洲第一在线综合网站| 亚洲国产精品久久人人爱蜜臀| 亚洲福利视频一区| 亚洲人成在线观看一区二区| 亚洲欧洲一二三| 亚洲少妇一区| 午夜影院日韩| 狂野欧美一区| 欧美日韩一区高清| 国产精品影视天天线| 韩日成人av| 亚洲另类在线视频| 亚洲免费视频中文字幕| 久久精品男女| 亚洲国产成人一区| 亚洲一卡久久| 久久福利一区| 欧美高清在线精品一区| 国产精品久久亚洲7777| 精品成人一区| 99这里只有精品| 久久精品国产999大香线蕉| 久久综合九色| 亚洲精品视频免费在线观看| 亚洲一区国产| 欧美99在线视频观看| 国产精品久久久久av免费| 国产精品免费看| 亚洲国产aⅴ天堂久久| 99在线精品视频在线观看| 欧美中在线观看| 亚洲黄网站在线观看| 亚洲香蕉视频| 免费久久99精品国产| 国产精品日韩专区| 亚洲福利小视频| 亚洲欧美一区二区原创| 欧美国产在线视频| 亚洲一区二区在线观看视频| 蜜臀91精品一区二区三区| 国产精品久久久久一区二区| 亚洲国产va精品久久久不卡综合| 亚洲欧美日韩一区二区| 亚洲国产欧美精品| 欧美影院在线| 国产精品红桃| 夜夜嗨av一区二区三区四区| 久久综合亚州| 亚洲午夜一区二区三区| 欧美精品videossex性护士| 伊人成年综合电影网| 午夜精品福利在线| 亚洲精品欧洲精品| 久久综合亚洲社区| 国产婷婷精品| 午夜老司机精品| 亚洲激情不卡| 蜜桃精品一区二区三区| 国内精品国产成人| 欧美一级视频一区二区| 99精品国产一区二区青青牛奶| 美女诱惑一区| 亚洲高清视频的网址| 久久综合激情| 欧美怡红院视频| 国产情侣久久| 性做久久久久久免费观看欧美| 日韩视频精品| 欧美日韩一区二区免费视频| 一区二区三区**美女毛片| 亚洲国产精品久久91精品| 久久综合色8888| 亚洲国产毛片完整版| 老司机一区二区三区| 久久国产精品99精品国产| 国产亚洲成av人在线观看导航 | 欧美日韩一区二区三区四区在线观看 | 久久这里有精品15一区二区三区| 国产区精品视频| 久久国产精品一区二区三区四区| 亚洲免费视频中文字幕| 国产欧美日韩另类视频免费观看| 欧美在线综合视频| 欧美伊人久久| 在线免费观看日本欧美| 亚洲国内高清视频|