金橋科普  
設為首頁 關于我們 郵箱登錄
科普聚焦
您現在的位置: 首頁 >> 科普頻道 >> 電腦遊戲 >> 文章詳情
OpenGL GUI教程(一)2

akinggw inoware 2006-09-11

畫一個東東

 

下面,我們來看一下她是如何作畫的:

void CGUIElement::Draw()

{

  if(!Visible())

   return;

 

  int left = m_Rect.left;

  int right = m_Rect.right;

  int top = m_Rect.top;

  int botton = m_Rect.bottom;

 

  if(m_pTexture == NULL)

  {

  gldisable(GL_TEXTURE_2D);

 

  if(m_pMaterial != NULL)

  {

  glDisable(GL_LIGHTING);

  glColor4fv(m_pMaterial->GetAmient().RGBA);

}

else

{

  glDisable(GL_LIGHTING);

  glColor3d(255,255,255);

}

 

glBegin(GL_QUADS);

glVertex3d(left,bottom,0);

glVertex3d(right,botton,0);

glVertex3d(right,top,0);

glVertex3d(left,top,0);

glEnd();

}

else

{

  m_pTexture->Bind();

 

  if(m_pMaterial != NULL)

  {

    glDisable(GL_LIGHTING);

    glColor3f(m_pMattrial->GetAmbient().R/255.0f,m_pMattrial->GetAmbient().G/255.0f,m_pMattrial->GetAmbient().B/255.0f);

}

else

   glColor3d(1,1,1);

 

if(m_pTexture->IsMasked())

{

  glAlphaFunc(GL_GREATER,0.0f);

  glEnable(GL_ALPHA_TEST);

}

 

glBegin(GL_QUADS);

glTexCoord2f(m_TexCoord[0].x,m_TexCoord[0].y);glVertex3d(left,bottom.0);

glTexCoord2f(m_TexCoord[1].x,m_TexCoord[1].y);glVertex3d(right,bottom.0);

glTexCoord2f(m_TexCoord[2].x,m_TexCoord[2].y);glVertex3d(right,top.0);

glTexCoord2f(m_TexCoord[3].x,m_TexCoord[3].y);glVertex3d(left,top.0);

glEnd();

 

if(m_pTexture->IsMasked())

 glDisable(GL_ALPHA_TEST);

}

 

CGUIElement *Iter = begin();

Set_ptr(Iter);

 

While(Iter != NULL)

{

  Iter->Draw();

  Iter = next();

}

}

 

正如你所看到的,她非常容易明白,所以我就不講了,(:

 

處理輸入

 

一個基本的組件只需要處理鼠標事件。

 

Int CGUIElement::OnLMouseUp(UINT x,UINT y)

{

  CGUIElement *IterElement = end();

  Set_ptr(IterElement);

   While(IterElement != NULL)

   {

 if(IterElement->OnLMouseUp(x,y)){

   return 1;

 IterElement = prev();

}

 

if(GetType() != GUI)

{

  if(PointInRect(GetRect(),x,y))

  {

  GetGUI()->PostMessage(this,NULL,GUI_Message_AquireFocus);

  Return 1;

}

 

return 0;

}

 

}

 

正如你所看到的,首先組件將這個輸入送給他的孩子,看他們是否能處理它。如果他們能,將返回1,那麼根結點就不用處理這個鼠標輸出。相反就由她自己處理。

 


  發表評論 寫信給編輯 關閉窗口
同欄目內容
· 瑞典在網遊中開設虛擬大使館 2007-06-06
· 魔獸爭霸3秘籍(魔獸無敵秘籍) 2007-03-28
· OpenGL GUI教程(一) 2006-09-11
· 動畫DirectDraw之旅(1) 2006-09-04
· DDraw,DInput編程 2006-09-04
· DirectDraw編程基礎 2006-09-04
相關內容
近期主推
西藏發現青藏高原最大冰川群
·西藏發現青藏高原最大冰川群
·中日: "月亮女神"攜手"嫦娥"
·行星大碰撞砸死恐龍催生人類
·美研制會飛汽車定價9萬美元
·美國教授設計出自適應機器人
·銀河系可能有20多個黑洞
近期熱門
英海域驚現大龍蝦為普通龍蝦5倍
·英海域驚現大龍蝦為普通龍蝦5倍
·新物種金蛙體表有劇毒
·我國嫦娥工程計劃測量月球
·精神病藥物可治多種癌症
·視覺震撼:來自海底的精靈
·能刪除不良記憶的藥物誕生
近期焦點
廣西發現罕見溶洞鐘乳石有30萬年
·廣西發現罕見溶洞鐘乳石有30萬年
·澳大利亞驚現“卡布基諾”海灘
·美國"彩色"瀑布夜幕下震撼遊人
·地球上究竟有多少個物種
·英國探險家北極遊泳破紀錄
·世界之最 世上最小的動物
金橋科普是一個公益性欄目,內容由作者提供或摘自互聯網,其目的是向廣大網民普及科學技術知識。如果您發現本網站轉載或摘編了您擁有著作權的作品,請通知我們(電話:023-63659911),我們立即刪除。
關于我們 | 網站地圖 | 用戶注冊 | 廣告客戶 | 招聘信息 | 業務信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重慶科技咨詢中心.重慶網得信息技術有限公司.版權所有
Email:webmaster@jqinfo.com
重慶數據通信局提供網絡帶寬. 渝ICP備05002327號