关于OpenGL的一个问题

philFF 2003-03-14 09:28:20
在VC的编译环境下用OpenGL进行三维仿真时出现这样一个问题:
当使用单缓冲模式的时候,用户区窗口的右边和下边没有黑边,
但是,
当使用双缓冲模式的时候,用户区窗口的右边和下边却出现了黑边,
为什么?该怎么解决?
...全文
25 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphapaopao 2003-03-30
  • 打赏
  • 举报
回复
1. Preface
前几天,有一个网友寻找OpenGL显示曲面的方法,email到我这里。我把我的 wave 程序发给他了。不料我的程序使他喜出望外。这是我想到如果我的程序放到网上的话,会有更多的人能够更容易的看到我的代码,并且公容易的学习如何使用OpenGL。

2. Contents
请大家访问 http://www.betajin.com/alphasun/index.htm。请看其中的 Wave OpenGL 页面,在里面便可下载 wave 的源代码。

以后我还会公布一些其它的程序源代码。希望能对大家有用。我的 MyProjects 有172个目录呢,并且有的workspace包含数个工程。

另外,如果大家觉得本贴对你有用,还烦劳各位 up 一下,使得更多的人能够看得到。
谢谢

corinna 2003-03-20
  • 打赏
  • 举报
回复
if(cx<=cy)
{
glOrtho(-scaling,scaling,-scaling*(GLfloat)cy/(GLfloat)cx,
scaling*(GLfloat)cy/(GLfloat)cx,-scaling,scaling);
}
else
{
glOrtho(-scaling,scaling,-scaling*(GLfloat)cy/(GLfloat)cx,
scaling*(GLfloat)cy/(GLfloat)cx,-scaling,scaling);
}

我觉得应该改为:
if(cx<=cy)
{
glOrtho(-scaling,scaling,-scaling*(GLfloat)cy/(GLfloat)cx,
scaling*(GLfloat)cy/(GLfloat)cx,-scaling,scaling);
}
else
{
glOrtho( -scaling*(GLfloat)cx/(GLfloat)cy,
scaling*(GLfloat)cx/(GLfloat)cy,-scaling,scaling, -scaling,scaling);
}

否则if和else里东西一样了


philFF 2003-03-17
  • 打赏
  • 举报
回复
我改回来了,还是不行啊
corinna 2003-03-16
  • 打赏
  • 举报
回复
glViewport(0,0,cy,cx);

这个我觉得应该是glViewport(0,0,cx,cy); 才对,不知道是不是这个原因,我的程序中都是

cx在前,cy在后的,cx是窗口width,cy是窗口height

希望你能找到原因:)
philFF 2003-03-15
  • 打赏
  • 举报
回复
我用蓝色清空的。
下面是我函数体的代码
void CMyGLTestView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);

CMyGLTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

double size = pDoc->GetLength() + pDoc->GetMaxRadius()*0.8;
if(size != 0)
{
scaling = (float)size;
}

if(cy>0)
{
glViewport(0,0,cy,cx);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

if(cx<=cy)
{
glOrtho(-scaling,scaling,-scaling*(GLfloat)cy/(GLfloat)cx,
scaling*(GLfloat)cy/(GLfloat)cx,-scaling,scaling);
}
else
{
glOrtho(-scaling,scaling,-scaling*(GLfloat)cy/(GLfloat)cx,
scaling*(GLfloat)cy/(GLfloat)cx,-scaling,scaling);
}

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
// glDrawBuffer(GL_BACK);

}
肯请你的指教...
corinna 2003-03-14
  • 打赏
  • 举报
回复
你是不是用黑色清空颜色缓存的?
我估计你的glViewPort没有设为窗口大小
corinna 2003-03-14
  • 打赏
  • 举报
回复
看看glViewPort有没有设对

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧