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

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>
            免费毛片一区二区三区久久久| 亚洲欧美一区二区激情| 久久香蕉精品| 亚洲国内精品| 亚洲精品1234| 欧美日韩综合另类| 亚洲欧美中文字幕| 欧美在线日韩| 亚洲毛片在线看| 一区二区三区久久精品| 国产欧美一区二区精品忘忧草 | 国产精品美女诱惑| 欧美在线影院在线视频| 久久视频免费观看| 在线综合亚洲| 久久精品国产一区二区三| 亚洲精品久久久蜜桃 | 久久久免费精品| 免费人成网站在线观看欧美高清 | 国产精品一级二级三级| 免费观看成人www动漫视频| 欧美激情四色 | 一区二区三区你懂的| 先锋影音久久久| 亚洲麻豆一区| 久久精品国产成人| 正在播放亚洲| 久久婷婷综合激情| 亚洲欧美日韩精品久久奇米色影视| 久久精品成人| 亚洲一区二区在线看| 久久青草福利网站| 午夜性色一区二区三区免费视频 | 亚洲小说区图片区| 91久久在线观看| 欧美亚洲一区三区| 在线亚洲欧美视频| 免费不卡在线观看av| 久久99伊人| 欧美日韩在线综合| 亚洲第一中文字幕在线观看| 国产欧美日韩视频| 亚洲天天影视| 宅男66日本亚洲欧美视频| 理论片一区二区在线| 久久久久久久久蜜桃| 国产精品白丝黑袜喷水久久久| 亚洲电影免费观看高清完整版在线| 国产日韩成人精品| 亚洲一区二区三区色| 亚洲网站在线| 欧美视频网站| 亚洲美女av网站| 亚洲精品视频在线观看网站| 久久久久久综合网天天| 久久精品欧洲| 国产视频一区在线观看| 亚洲一区二区欧美日韩| 亚洲免费中文| 国产精品久久网| 亚洲性线免费观看视频成熟| 一区二区三区精品在线| 欧美日韩国产va另类| 亚洲日本在线观看| 亚洲深夜福利| 欧美丝袜第一区| 亚洲无人区一区| 久久av一区二区三区| 国产欧美日韩91| 久久精品91久久香蕉加勒比| 久久婷婷丁香| 91久久午夜| 欧美巨乳波霸| 一区二区三区高清视频在线观看| 亚洲性夜色噜噜噜7777| 国产乱码精品一区二区三区av| 亚洲免费网站| 麻豆精品视频在线| 亚洲人成网站777色婷婷| 欧美理论在线| 亚洲女性裸体视频| 狂野欧美激情性xxxx| 亚洲精品午夜| 国产精品啊v在线| 欧美一二区视频| 欧美激情五月| 亚洲在线第一页| 狠狠久久亚洲欧美专区| 免费亚洲视频| 亚洲免费人成在线视频观看| 免费观看久久久4p| 中国亚洲黄色| 黄色另类av| 欧美日韩三级| 久久九九99视频| 亚洲人成人一区二区在线观看| 亚洲欧美日韩一区二区| 影音先锋日韩有码| 欧美体内she精视频| 久久国产精品久久国产精品| 亚洲日产国产精品| 久久永久免费| 亚洲一区二区三区免费观看 | 国产精品青草久久久久福利99| 久久精品国产亚洲a| 日韩午夜av在线| 久久亚洲精品中文字幕冲田杏梨| 99热这里只有精品8| 国产综合av| 国产精品99一区| 免费国产一区二区| 欧美在线关看| 亚洲午夜未删减在线观看| 欧美成人激情视频| 欧美在线亚洲综合一区| 99视频在线精品国自产拍免费观看| 国产一区二区三区奇米久涩| 欧美日韩小视频| 欧美chengren| 久久综合久久综合九色| 欧美中文在线免费| 亚洲综合欧美日韩| 亚洲午夜精品国产| 99国产精品99久久久久久粉嫩| 欧美.日韩.国产.一区.二区| 欧美在线观看你懂的| 亚洲男人的天堂在线观看| 日韩视频久久| 亚洲精品久久久久久下一站| 亚洲电影在线| 国内视频精品| 国产一区深夜福利| 国产一区二区精品| 国产亚洲欧美激情| 国产日韩欧美精品在线| 国产老女人精品毛片久久| 国产精品r级在线| 欧美视频你懂的| 欧美视频一区在线观看| 欧美色欧美亚洲高清在线视频| 欧美激情导航| 欧美日韩高清在线观看| 欧美日韩一区二区三区| 欧美日韩国产一级| 国产精品成人一区二区三区夜夜夜 | 亚洲国产精品久久久久秋霞影院| 欧美电影免费观看| 欧美激情国产日韩| 欧美激情中文不卡| 亚洲激情成人在线| 夜夜精品视频一区二区| 亚洲已满18点击进入久久| 亚洲中无吗在线| 久久激情综合网| 欧美成人精品| 欧美色欧美亚洲另类七区| 国产精品久久一级| 国内精品久久久| 亚洲高清视频的网址| 999亚洲国产精| 亚洲一区在线看| 久久人人爽人人爽| 亚洲激情网址| 亚洲一区二区三区免费视频 | 亚洲麻豆国产自偷在线| 亚洲永久免费av| 久久亚洲免费| 欧美精品福利在线| 国产精品视频免费观看www| 国产亚洲一区二区精品| 最新成人av网站| 亚洲无玛一区| 久久亚洲精品欧美| 日韩一级片网址| 欧美在线免费看| 欧美久久久久久久久久| 国产午夜精品久久| 日韩视频在线观看国产| 欧美在线二区| 亚洲国产精品久久久久婷婷老年 | 国产精品久久九九| 亚洲电影在线| 欧美一区二区三区在线看| 欧美激情一区二区三区在线| 亚洲一区二区三区精品动漫| 欧美成人精品在线视频| 国产日韩一区二区三区在线| 99re66热这里只有精品4| 久久久www成人免费无遮挡大片 | 亚洲精品在线三区| 久久免费的精品国产v∧| 国产精品美女www爽爽爽| 亚洲人成人77777线观看| 久久久久久国产精品一区| 一区二区三区 在线观看视频| 久久精品欧美| 国产欧美日韩中文字幕在线| 亚洲一二三区在线| 亚洲电影自拍| 玖玖综合伊人|