MFC中opengl编程画图没有结果显示?

这下面是部分函数:voidCOpengl::DrawWithOpenGL(){glLoadIdentity();glColor3f(0.0,1.0,1.0);glBegi... 这下面是部分函数:
void COpengl::DrawWithOpenGL()
{
glLoadIdentity();
glColor3f(0.0,1.0,1.0);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f,0.0f);
glVertex3f(1.0f,-1.0f,0.0f);
glEnd();
glFlush();
}
void COpengl::SwapGLBuffer()
{
SwapBuffers(m_hdc);
}
void COpengl::ClearBuffer()
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
}
void CMFCopenglView::OnDraw(CDC* pDC)
{
CMFCopenglDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
m_bgl.ClearBuffer();
m_bgl.DrawWithOpenGL();
m_bgl.SwapGLBuffer();
}
int CMFCopenglView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
return (m_bgl.OnGLInitial(dc.m_hDC));
}
展开
 我来答
CMadchemist
推荐于2016-12-03 · 超过10用户采纳过TA的回答
知道答主
回答量:16
采纳率:0%
帮助的人:8.7万
展开全部
OnDraw()是由OnPaint()内部调用的,系统只有在收到WM_PAINT消息后才调用OnPaint()。你可以试一试手动用CWnd::UpdateWindow()发出WM_PAINT消息,看看有没有图案;

你还可以试一试不在OnCreate()里获取DC,而在OnInitialUpdate()里获取DC,可能窗口创建完成后还不能马上获得DC;

其实,如果你能看到黑色背景,就说明已经在绘图了。只是因为观察点/视截体设置不当,才看不到三角形
另外,glClearColor()只需要在初始化阶段调用一次即可
ifeiying
2012-09-15 · TA获得超过230个赞
知道小有建树答主
回答量:253
采纳率:100%
帮助的人:147万
展开全部
glMatrixMode(GL_PROJECTION);// 选择投影矩阵
glLoadIdentity();// 重置投影矩阵

// 设置视口的大小
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);//width、height是窗口宽高
// 默认Z值范围太小了,自己调大点

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();
然后把顶点Z值都设置为-5.0看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wwwcheck
2012-09-08
知道答主
回答量:16
采纳率:0%
帮助的人:12万
展开全部
glLoadIdentity();后加一句glTranslate(0,0,-3);试试。
追问
还是不行,坐标的范围很奇怪,看网上的很多代码中的坐标范围都是从-1到1,但是我的好像不是,要把坐标中X,Y设的很大才能显示二维的图像,而Z坐标超过正负一就看不到图像了!真是搞不懂,默认的不都是正交投影吗,为什么这么奇怪呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式