VC++OpenGl环境,单文档框架。
程序的功能是:先开三维数据文件,并显示三维图形 ;然后单击菜单,响应事件是 对满足特定条件的三维图形上的点进行染色。
为什么颜色涂不上去?原因是染色程序的问题?还是因为绘制三维图形时候的坐标和窗口坐标不统一?还是绘制函数不能放在响应函数里?
大侠指教啊,谢谢了。主要代码贴出来void CRenderView::OnPaint() 
{
// Device context for painting
CPaintDC dc(this); 
  
// Useful in singledoc templates
HWND hWnd = GetSafeHwnd();
HDC hDC = ::GetDC(hWnd);
wglMakeCurrent(hDC,m_hGLContext);//绘制显示三维图形的函数
DrawWithOpenGL();
SwapBuffers(hDC); //dc.m_ps.hdc
}//菜单响应函数
void CRenderView::OnSeg() 
{
// TODO: Add your command handler code here
MessageBox("开始涂色.....");
       glMatrixMode(GL_MODELVIEW);   
       glLoadIdentity();
       glClear(GL_COLOR_BUFFER_BIT);
       glColor3f(1.0f,0.0f,0.0f);       //为了测试程序方便,我把响应函数的功能改为绘制一个点(但最后程序运行时只是三维图像能够显示了,点击菜单后没有描绘出点)
       glBegin(GL_POINT);
       glVertex3f(30,30,30);
       glPointSize(100.0);
       glEnd();
       glFlush();
       Invalidate(false);
        MessageBox("涂色结束.....");
}
求帮助啊谢谢了

解决方案 »

  1.   

    补充一下:DrawWithOpenGl()是绘制三维图形的函数
      

  2.   

    换个思路,通过一个bool变量控制。bool isHit;void OnSeg()
    {
       isHit = !isHit;
    }
    在绘制函数中:DrawWithOpenGL判断:
    if (isHit)
       //染色,
    else
       //正常绘制。
      

  3.   

    在glBegin(GL_POINT);之前加glEnable(GL_COLOR_MATERIAL);
    在glEnd(GL_POINT);之后再glDisable(GL_COLOR_MATERIAL);
    这样模型就不会被染色了
    另外如果点没有画出来,也许是你点的尺寸设置的太大了,把100改为3试试