金桥科普  
设为首页 关于我们 邮箱登录
科普聚焦时代科技科普生活科学技术自然科学航空航天科技博览历史考古电脑IT
您现在的位置: 首页 >> 科普频道 >> 电脑游戏 >> 文章详情
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号