CSDN=>FAQ=>FAQ 展示
  • 问题内容:OpenGL绘图的问题
  • 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5173861
  • 所属论坛:图形处理/算法     审核组:VC/MFC
  • 提问者:deltforce     解决者:commandconque
  • 感谢:syy64
  • 关键字:VC/MFC 函数 视图 图形处理/算法 图形 绘制 width aspect 三角形 glulookat 立方体 gldouble
  • 答案:

    在MFC的视图-文档结构中的用OpenGl函数绘制图形的代码

    OpenGl的初始化部分就省略了,因为我可以绘制出图形来
    void COpenGLMFC1View::OnPaint() 
    {
      CPaintDC dc(this); // device context for painting'
      glLoadIdentity(); 
      glClear(GL_COLOR_BUFFER_BIT); 
      glColor3f(1.0f, 1.0f, 1.0f); 
      glutWireCube(140.0);///***问题在这!!!
      glBegin(GL_POLYGON); //绘制一个彩色的三角形
       glColor4f(1.0f, 0.0f, 0.0f, 1.0f); 
       glVertex3f(100.0f, 50.0f,0.0f); 
       glColor4f(0.0f, 1.0f, 0.0f, 1.0f); 
       glVertex3f(450.0f, 400.0f,0.0f); 
       glVertex3f(450.0f, 50.0f,0.0f); 
      glEnd(); 
      glFlush(); 
    }

    View::OnSize(UINT nType, int cx, int cy) //设置视图的刷新的处理
    {
    CView::OnSize(nType, cx, cy);

    GLsizei width, height; 
    GLdouble aspect; 
    width = cx; 
    height = cy; 
    if (cy==0) 
    aspect = (GLdouble)width; 
    else 
    aspect = (GLdouble)width/(GLdouble)height; 

    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0.0, 500.0*aspect, 0.0, 500.0); 
             //gluLookAt(200,150,10,200,150,0,0,1.0,0.0);
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    }

    我的问题是我在OnPaint() 中有个绘制glutWireCube(140.0)函数,但是三角形能出来,但这个线框的立方体却没有出来,不知道为什么?
    无论该函数是否在glBegin()..glEnd()之间.
    怎么才能出来?
    另外我设置gluLookAt(200,150,10,200,150,0,0,1.0,0.0),一旦启用这个函数视图中就什么也看不见面,我想(200,150,200)应该在三角型内部,怎么都应该看见一点呀.不知道为什么.
    ---------------------------------------------------------------

    glClearColor(0.2f,0.5f,0.9f,1.0f);//ÉèÖñ³¾°ÑÕɫΪºÚÉ«
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

      glColor3f(0.0f, 1.0f, 0.0f); 
      glutWireCube(140.0);///***问题在这!!!


    gluLookAt(200,150,500,200,150,0,0,1.0,0.0),
    不断的调整第三个参数试试。
    ---------------------------------------------------------------

    你的程序中使用的是:
    gluOrtho2D(0.0, 500.0*aspect, 0.0, 500.0); 

    这个函数的默认near=-1,far=1;这个far是设置你最远能看见的距离,就只有1个单位
    而你的gluLookAt(200,150,10,200,150,0,0,1.0,0.0);
    摄像机已经是在10的单位以上了,
    你当然什么都看不见!!!

    改正后:
    glOrtho(0.0, 500.0*aspect, 0.0, 500.0,-1,100); 

    gluLookAt(140,140,10,100,50,0,0,1,0);

  • 评价: 有价值 给朵鲜花(10) 无价值 扔个鸡蛋(2)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo