CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

为什么通过菜单点击画OpenGL图形提示内存不能读?恳求帮小弟看看!

楼主sujinzhao407(摇风清影)2004-05-03 22:14:34 在 VC/MFC / 基础类 提问

我想通过点击菜单“立方体”画出一个旋转的立方体,我已经实现了不加菜单时的程序,现在只是想通过一个菜单点击之后再显示立方体,但是提示内存不能读,我怀疑是设备描述表和渲染描述表的问题,因为我在OnDraw()里还要画直线,平面,圆等其它图形,但是我又不知道该如何改!恳求各位大哥帮小弟看看,小弟正在做毕业设计,马上就要交了,请大家耐心看完View.cpp文件,里面用到的函数和变量已经在View.h里定义过了,谢谢各位大哥了!至于里面画直线圆等的函数请大家不要管,只需要看看立方体的就行了。其中,m_bTimerEnabled控制立方体的旋转与停止,step控制每次旋转的角度,s控制旋转时立方体大小的变化。openGl环境我已经配好了。  
   
  CGradDesignView::CGradDesignView()  
  {  
  //   TODO:   add   construction   code   here  
  m_bTimerEnabled   =TRUE;  
  step=0.0;  
  s=0.0;  
  }  
   
  void   CGradDesignView::OnDraw(CDC*   pDC)  
  {  
  CGradDesignDoc*   pDoc   =   GetDocument();  
  ASSERT_VALID(pDoc);  
  //   TODO:   add   draw   code   for   native   data   here  
                   
                                //直线  
  CPen   linePen(0,0,RGB(0,100,200));  
  CPen*   oldPen_line=pDC->SelectObject(&linePen);  
  pDC->MoveTo(x1_line,y1_line);  
  pDC->LineTo(x2_line,y2_line);  
  pDC->SelectObject(oldPen_line);  
  linePen.Detach();  
                            //立方体  
                /*wglMakeCurrent(pDC->m_hDC,m_hRC);  
  RenderScene();  
  wglMakeCurrent(NULL,NULL);*/  
   
   
  }  
   
  void   CGradDesignView::OnCube()    
  {  
  //   TODO:   Add   your   command   handler   code   here  
  CDC*   pDC=GetDC();  
  wglMakeCurrent(pDC->m_hDC,m_hRC);  
  RenderScene();  
  wglMakeCurrent(NULL,NULL);  
  }  
   
  场景绘制与渲染  
  //////////////////////////////////////////////////////////  
  BOOL   CGradDesignView::RenderScene()    
  {  
  glClearColor(0.1,0.5,0.7,1.0);  
  glClear(GL_COLOR_BUFFER_BIT   |   GL_DEPTH_BUFFER_BIT);  
   
          glPushMatrix();  
      glScalef(s,s,s);  
  glRotatef(step,0.0,1.0,0.0);  
  glRotatef(step,0.0,0.0,1.0);  
      glRotatef(step,1.0,0.0,0.0);  
  DrawColorBox(); //     绘制立方体  
          glPopMatrix();  
   
          glFlush();  
   
  ::SwapBuffers(m_pDC->GetSafeHdc()); //交互缓冲区  
  return   TRUE;  
  }  
   
  void   CGradDesignView::DrawColorBox(void)  
  {  
  GLfloat     p1[]={0.5,-0.5,-0.5},   p2[]={0.5,0.5,-0.5},  
                            p3[]={0.5,0.5,0.5},       p4[]={0.5,-0.5,0.5},  
                            p5[]={-0.5,-0.5,0.5},   p6[]={-0.5,0.5,0.5},  
                            p7[]={-0.5,0.5,-0.5},   p8[]={-0.5,-0.5,-0.5};  
   
  GLfloat     m1[]={0.0,0.0,0.0}, m2[]={-1.0,0.0,0.0},  
      m3[]={0.0,1.0,0.0}, m4[]={0.0,-1.0,0.0},  
    m5[]={0.0,0.0,1.0}, m6[]={0.0,0.0,-1.0};  
   
         
  GLfloat     c1[]={1.0,0.0,1.0},     c2[]={0.0,1.0,1.0},  
                            c3[]={1.0,1.0,1.0},     c4[]={1.0,0.0,1.0},  
                            c5[]={1.0,0.0,0.0},     c6[]={1.0,1.0,0.0},  
                            c7[]={0.0,1.0,0.0},     c8[]={1.0,1.0,1.0};    
          glBegin   (GL_QUADS);  
   
  glColor3fv(c1);  
                    glNormal3fv(m1);  
                  glVertex3fv(p1);  
      glColor3fv(c2);  
                  glVertex3fv(p2);  
      glColor3fv(c3);  
                  glVertex3fv(p3);  
      glColor3fv(c4);  
                  glVertex3fv(p4);  
   
  glColor3fv(c5);  
                    glNormal3fv(m5);  
                  glVertex3fv(p5);  
      glColor3fv(c6);  
                  glVertex3fv(p6);  
      glColor3fv(c7);  
                  glVertex3fv(p7);  
      glColor3fv(c8);  
                  glVertex3fv(p8);  
   
          glColor3fv(c5);  
                    glNormal3fv(m3);  
                  glVertex3fv(p5);  
      glColor3fv(c6);  
                  glVertex3fv(p6);  
      glColor3fv(c3);  
                  glVertex3fv(p3);  
      glColor3fv(c4);  
                  glVertex3fv(p4);  
   
  glColor3fv(c1);  
                    glNormal3fv(m4);  
                  glVertex3fv(p1);  
      glColor3fv(c2);  
                  glVertex3fv(p2);  
      glColor3fv(c7);  
                  glVertex3fv(p7);  
      glColor3fv(c8);  
                  glVertex3fv(p8);  
   
  glColor3fv(c2);  
                    glNormal3fv(m5);  
                  glVertex3fv(p2);  
      glColor3fv(c3);  
                  glVertex3fv(p3);  
      glColor3fv(c6);  
                  glVertex3fv(p6);  
      glColor3fv(c7);  
                  glVertex3fv(p7);  
   
  glColor3fv(c1);  
                    glNormal3fv(m6);  
                  glVertex3fv(p1);  
      glColor3fv(c4);  
                  glVertex3fv(p4);  
      glColor3fv(c5);  
                  glVertex3fv(p5);  
      glColor3fv(c8);  
                  glVertex3fv(p8);  
   
      glEnd();  
  }  
   
  void   CGradDesignView::OnSize(UINT   nType,   int   cx,   int   cy)    
  {  
  CView::OnSize(nType,   cx,   cy);  
   
  //   TODO:   Add   your   message   handler   code   here  
  //添加窗口缩放时的图形变换函数  
  glViewport(0,0,cx,cy);  
  /////////////////////////////////////////////////////////////////  
          glMatrixMode(GL_PROJECTION);  
          glLoadIdentity();  
          if   (cx   <=   cy)    
  glOrtho   (-1.5,   1.5,   -1.5*(GLfloat)cy/(GLfloat)cx,1.50*(GLfloat)cy/(GLfloat)cx,   -10.0,   10.0);  
          else    
  glOrtho   (-1.5*(GLfloat)cx/(GLfloat)cy,1.5*(GLfloat)cx/(GLfloat)cy,   -1.5,   1.5,   -10.0,   10.0);  
          glMatrixMode(GL_MODELVIEW);  
          glLoadIdentity   ();  
   
  }  
   
  void   CGradDesignView::OnTimer(UINT   nIDEvent)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
  //添加定时器响应函数和场景更新函数  
  Invalidate(FALSE);  
  /////////////////////////////////////////////////////////////////  
  if(m_bTimerEnabled)  
  {  
  step   =   step   +   1.0;  
  if   (step   >   360.0)  
  step   =   step   -   360.0;  
  s+=0.005;  
  if(s>1.0)  
      s=0.1;  
  }  
  CView::OnTimer(nIDEvent);  
  }  
   
  void   CGradDesignView::OnLine()    
  {  
  //   TODO:   Add   your   command   handler   code   here  
  CLineInputDlg   m_lineinputdlg;  
  if(m_lineinputdlg.DoModal()==IDOK)  
  {  
  x1_line=m_lineinputdlg.m_sx;  
  y1_line=m_lineinputdlg.m_sy;  
  x2_line=m_lineinputdlg.m_ex;  
  y2_line=m_lineinputdlg.m_ey;  
  }  
  Invalidate();  
  } 问题点数:0、回复次数:0Top

相关问题

  • VB提示内存溢出
  • win98安装时提示内存不足
  • 打开EXECL提示内存不足
  • opengl图形设计
  • 1G内存,还是提示“虚拟内存不够”,怎么解决?
  • 如何释放CView中图形所占的内存?
  • 如何将我所绘出的图形考到内存
  • 我的图形总是不断的占用内存
  • 在TImage 上画opengl图形。
  • 如何测试堆内存大小?请给点提示!!

关键词

  • 立方体
  • code
  • null
  • cgraddesignview
  • lineinputdlg
  • 小弟
  • pdc
  • linepen
  • wglmakecurrent
  • 菜单

得分解答快速导航

  • 帖主:sujinzhao407

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo