如何用OpenGL+MFC连续无闪烁输出绘图????
懒佯佯大哥 2014-06-05 01:02:08 用OpenGL+MFC写了一个绘制波形的程序,希望实现的功能是每一秒钟刷新一次,显示绘制的波形。
思路是用COPENGL继承CView类并绘制波形(绘制一些随机数),然后贴到对话框上,但是不知道怎么刷新波形 。
思路是考虑缓存交换,但是不知道该怎么做!!!
首先:部分COpenGL里的函数代码如下:
void COPENGL::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
wglMakeCurrent(pDC->m_hDC,m_hRC);
glClearColor(0,0,0,1.0f);//清除 背景,也就是背景色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
srand((unsigned)time( NULL ));
for (int k=0;k<nNum;k++)
{
fHrrp[k]=(float)(rand()%300-150)/((150-k)*(150-k));
if (fHrrp[k]<0)
{
fHrrp[k]=0-fHrrp[k];
}
if (fHrrp[k]>1.5)
{
fHrrp[k]=fHrrp[k]=1;
}
fHrrp[k]=fHrrp[k]-0.75;
}
glPushMatrix();
DrawLines(x,fHrrp,nNum);
vDrawCoordinate();
CString str;
str.Format("%s","range");
char *st=(LPSTR)(LPCTSTR)str;
DrawChar(0.70, -0.85, float(nNum));
DrawChar(-0.9,0.75 , 1);
DrawChar(-0.9,0 , 0.5);
DrawChar(-0.9,-0.75 , 0.0);
DrawChar(0, -0.85, st);
glPopMatrix();
glFlush();
SwapBuffers(pDC->m_hDC);
}
int COPENGL::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
PIXELFORMATDESCRIPTOR pfd={
sizeof(PIXELFORMATDESCRIPTOR), //size of the pfd
1, //version number
PFD_DRAW_TO_WINDOW| //support window
PFD_SUPPORT_OPENGL| //support OPENGLL
PFD_DOUBLEBUFFER, //double buffered
PFD_TYPE_RGBA, //RGBA type
24, //24bit color
0,0,0,0,0,0, //color bits ignored
0, //no alpha buffer
0, //shift bit ignored
0, //no accumulation buffer
0,0,0,0, //accum bits ignored
32, //32bit depth buffer
0, //no stencil buffer
0, //no auxiliary buffer
PFD_MAIN_PLANE, //main layer
0, //reversed
0,0,0 //layer masks ignored
};
CClientDC clientdc(this);
int pf=ChoosePixelFormat(clientdc.m_hDC,&pfd);
BOOL rt=SetPixelFormat(clientdc.m_hDC,pf,&pfd);
m_hRC=wglCreateContext(clientdc.m_hDC);
glShadeModel(GL_FLAT);
return 0;
}
最后在对话框中调用
BOOL CDrawDlg::OnInitDialog()
{
CDialog::OnInitDialog();
……
……
……
RECT rect;
rect.bottom = 0;rect.left = 0;rect.right = 200;rect.top = 200;
PPIView=new COPENGLL();
PPIView->Create(NULL, NULL, WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE, rect,this, IDD_OPENGL,NULL);//创建的大小
PPIView->SetWindowPos(&wndTop,50,50,550,450,SWP_SHOWWINDOW);
return TRUE;
}
如何调整COpenGL和对话框CDrawDlg中的代码,不断刷新输出波形,并且是不同的随机数波形???