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

Shuffy

不斷的學(xué)習(xí),不斷的思考,才能不斷的進(jìn)步.Let's do better together!
posts - 102, comments - 43, trackbacks - 0, articles - 19

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類中加入一個(gè)變量,用來表示寬高比

      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)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(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>
            一区二区欧美视频| 欧美亚洲日本网站| 欧美国产一区二区在线观看 | 欧美一区1区三区3区公司| 亚洲人成网在线播放| 欧美高清成人| 99精品欧美一区| 日韩午夜三级在线| 国产精品久久久99| 久久久久天天天天| 久久影音先锋| 亚洲最黄网站| 亚洲综合久久久久| 一区二区视频欧美| 亚洲激情在线视频| 国产精品毛片a∨一区二区三区| 欧美一区二区三区久久精品 | 亚洲精品影院| 国产精品视频男人的天堂 | 一区二区在线观看视频| 欧美成人一区二免费视频软件| 欧美成人免费一级人片100| 亚洲精品专区| 性娇小13――14欧美| 亚洲国产乱码最新视频| 日韩一级大片在线| 国产自产高清不卡| 亚洲日本国产| 国产亚洲欧美日韩一区二区| 欧美高清hd18日本| 国产精品卡一卡二卡三| 欧美成人黄色小视频| 欧美午夜一区二区| 免费在线成人av| 国产精品国产三级国产 | 一区二区三区欧美日韩| 亚洲欧美中文日韩在线| 亚洲精品在线一区二区| 亚洲欧美日韩精品| 亚洲人成绝费网站色www| 亚洲免费视频中文字幕| 日韩午夜电影在线观看| 久久久99爱| 亚洲欧美成人在线| 欧美激情二区三区| 久久一区二区三区四区五区| 国产精品久久久久国产精品日日| 欧美aⅴ99久久黑人专区| 国产精品资源| 亚洲视频在线二区| 日韩亚洲欧美成人| 麻豆精品91| 久久久天天操| 国产日韩精品在线| 亚洲一区在线免费观看| 在线一区亚洲| 欧美伦理视频网站| 亚洲国产视频一区| 亚洲国产精品欧美一二99| 久久精品视频一| 久久久久成人网| 国产一级一区二区| 午夜精品久久久久久久男人的天堂 | 国产精品日韩久久久| 亚洲国产精品ⅴa在线观看| 国语精品一区| 久久gogo国模啪啪人体图| 午夜性色一区二区三区免费视频 | 一区二区三区蜜桃网| 亚洲精品免费看| 欧美激情视频一区二区三区在线播放| 美女精品视频一区| 亚洲盗摄视频| 欧美黄网免费在线观看| 亚洲国产精品一区二区三区| 亚洲经典三级| 欧美激情在线观看| 亚洲美女视频在线观看| 中文精品视频一区二区在线观看| 欧美日韩精品一区二区| 一区二区精品国产| 欧美一区二区三区视频| 国产有码一区二区| 久久一区二区精品| 亚洲丁香婷深爱综合| 在线一区二区三区四区五区| 国产精品久久久一区麻豆最新章节| 亚洲图片欧美一区| 久久久久久久久久久久久久一区| 精品1区2区3区4区| 欧美喷潮久久久xxxxx| 在线一区二区三区四区| 久久成人一区| 亚洲国产一区二区三区在线播| 欧美激情按摩| 亚洲欧美日韩精品一区二区| 久久在线免费视频| 艳妇臀荡乳欲伦亚洲一区| 欧美色综合天天久久综合精品| 翔田千里一区二区| 亚洲第一网站| 香蕉久久夜色| 亚洲区第一页| 国产欧美 在线欧美| 久久人人九九| 亚洲午夜精品一区二区| 欧美va亚洲va国产综合| 午夜精品久久久久久久男人的天堂| 国产亚洲制服色| 欧美日韩成人一区二区三区| 久久成人免费| 一本色道久久综合一区| 美日韩精品视频免费看| 亚洲欧美日韩区| 亚洲黄一区二区三区| 国产老肥熟一区二区三区| 欧美不卡在线| 久久免费99精品久久久久久| 一本到12不卡视频在线dvd| 毛片一区二区三区| 欧美一级网站| 中文精品视频| 亚洲精选视频免费看| 韩国av一区二区三区在线观看| 欧美久久电影| 男女精品网站| 久久久视频精品| 亚洲欧美日韩一区二区三区在线观看| 亚洲国产精品成人综合| 欧美成年人视频| 老**午夜毛片一区二区三区| 香港成人在线视频| 亚洲性线免费观看视频成熟| 最新中文字幕亚洲| 亚洲大胆女人| 激情六月婷婷久久| 国产日韩欧美一区二区三区四区| 国产精品二区在线| 欧美涩涩网站| 国产精品爱久久久久久久| 欧美激情91| 欧美激情一区二区久久久| 久久久久久久网| 久久男女视频| 欧美v日韩v国产v| 欧美3dxxxxhd| 欧美精品一区三区在线观看| 欧美不卡在线视频| 欧美精选午夜久久久乱码6080| 欧美大片在线看免费观看| 欧美成人国产一区二区| 欧美福利电影在线观看| 欧美另类变人与禽xxxxx| 欧美久久电影| 国产精品久久久久aaaa九色| 国产精品爽爽ⅴa在线观看| 国产精品亚洲综合久久| 国产亚洲一区二区在线观看| 国语精品中文字幕| 亚洲电影在线| 一本色道久久| 欧美在线网址| 免费h精品视频在线播放| 亚洲高清久久| 一区二区三区欧美激情| 亚洲欧美三级伦理| 久久国产欧美日韩精品| 免费成人在线视频网站| 欧美久久久久免费| 国产精品入口福利| 一区二区在线观看av| 亚洲精品久久久久| 亚洲女同在线| 六十路精品视频| 日韩视频三区| 欧美中文字幕视频| 欧美片第一页| 国产综合久久久久久| 亚洲美女av电影| 久久黄色级2电影| 亚洲级视频在线观看免费1级| 一区二区成人精品| 久久精品国产精品亚洲综合| 欧美绝品在线观看成人午夜影视| 欧美小视频在线| 亚洲国产精品久久人人爱蜜臀| 亚洲视频在线二区| 蜜桃久久av| 亚洲女同性videos| 欧美精品麻豆| 精品成人a区在线观看| 亚洲综合国产| 亚洲成色精品| 久久se精品一区二区| 欧美日韩高清在线观看| 一区免费观看| 性欧美1819sex性高清| 亚洲欧洲免费视频| 久久精品最新地址| 国产免费观看久久黄|