首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VS2008 运用opengl

2012-09-07 
VS2008 使用opengl为什么只有黑色的背景啊?我在上面画了一条线的,可是运行后只有黑色背景,上面什么都没有。

VS2008 使用opengl
为什么只有黑色的背景啊?我在上面画了一条线的,可是运行后只有黑色背景,上面什么都没有。谁能帮忙看下,高手们?


int CSinDou01View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
myInitOpenGL(); 
return 0;
}

void CSinDou01View::myInitOpenGL(void)
{

m_pDC =new CClientDC(this); //创建 DC
ASSERT(m_pDC != NULL);
if (!mySetupPixelFormat())//设定绘图的位图格式,函数下面列出
return;

//创建一个上下文设备环境 
m_hRC = wglCreateContext(m_pDC->GetSafeHdc()); 

//将刚生成的设备上下文指针设为当前环境 
wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);
}


bool CSinDou01View::mySetupPixelFormat(void)
{


static PIXELFORMATDESCRIPTOR pfd = 
{
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
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, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
int pixelformat; 
if ( (pixelformat = ChoosePixelFormat(m_pDC->m_hDC, &pfd)) == 0 )
{
return false;

if (SetPixelFormat(m_pDC->m_hDC, pixelformat, &pfd) == FALSE)
{
return false;



//得到指定设备环境的象素模式索引
int n = ::GetPixelFormat(m_pDC->GetSafeHdc()); 
//根据上面得到的索引值来声明一个象素模式
::DescribePixelFormat(m_pDC->GetSafeHdc(), n, sizeof(pfd), &pfd); 


return true;

}




void CSinDou01View::OnDraw(CDC* /*pDC*/)
{
CSinDou01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码

wglMakeCurrent(m_pDC->m_hDC,m_hRC) ;
//清除颜色缓冲和深度缓冲 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glClearColor(0.0,1.0,1.0,1.0); 
glTranslated(0.0f,0.0f,-3.0f);//把物体沿(0,0,-1)方向平移
glColor3f(0.0, 1.0, 1.0);

  glBegin(GL_LINES);
  glVertex3f(50, 50, 0);
  glVertex3f(500, 500, 0);
  glEnd();

glFinish(); 
//交换缓冲区数据 
SwapBuffers(wglGetCurrentDC()); 

}








[解决办法]
用OPENGL窗口画图的窗口,都要设定固定的风格的,具体什么风格,楼主上网查一下吧!
[解决办法]
glColor3f(0.0, 1.0, 1.0); 

glBegin(GL_LINES); 
glVertex3f(50, 50, 0); 
glVertex3f(500, 500, 0); 
glEnd(); 
改成
glBegin(GL_LINES); 
glColor3f(0.0, 1.0, 1.0); 
glVertex3f(50, 50, 0); 
glVertex3f(500, 500, 0); 
glEnd(); 



[解决办法]
gluPerspective设置了吗?如果没有当然没有显示了。
[解决办法]
要重载OnErasebackground()函数,
BOOL CUnderListView::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return TRUE;
//return CView::OnEraseBkgnd(pDC);
}就可以了

热点排行