关于OpenGL的一个问题 在VC的编译环境下用OpenGL进行三维仿真时出现这样一个问题:当使用单缓冲模式的时候,用户区窗口的右边和下边没有黑边,但是,当使用双缓冲模式的时候,用户区窗口的右边和下边却出现了黑边,为什么?该怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你是不是用黑色清空颜色缓存的?我估计你的glViewPort没有设为窗口大小 我用蓝色清空的。下面是我函数体的代码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); }肯请你的指教... glViewport(0,0,cy,cx);这个我觉得应该是glViewport(0,0,cx,cy); 才对,不知道是不是这个原因,我的程序中都是cx在前,cy在后的,cx是窗口width,cy是窗口height希望你能找到原因:) 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里东西一样了 1. Preface 前几天,有一个网友寻找OpenGL显示曲面的方法,email到我这里。我把我的 wave 程序发给他了。不料我的程序使他喜出望外。这是我想到如果我的程序放到网上的话,会有更多的人能够更容易的看到我的代码,并且公容易的学习如何使用OpenGL。2. Contents 请大家访问 http://www.betajin.com/alphasun/index.htm。请看其中的 Wave OpenGL 页面,在里面便可下载 wave 的源代码。以后我还会公布一些其它的程序源代码。希望能对大家有用。我的 MyProjects 有172个目录呢,并且有的workspace包含数个工程。另外,如果大家觉得本贴对你有用,还烦劳各位 up 一下,使得更多的人能够看得到。谢谢 让Dialog上的CStatic文字水平居中!!! 用socket下载文件问题,下载不成功! 关于线程的终止问题,谁能够详细讲解一下啊 关于SubclassDlgItem问题! 关于MessageBox()函数的返回植问题 我想在列表框里的选项前前一加一CHECK框,该如何做 怎么提取这个一个字符串,很简单的一个问题 有人用过MFC编写NI数据采集卡程序吗,控制台程序有效,但在MFC中就不能使用了。 有关数据库的BLOB问题!!!! dialog上的工具条,怎么实现停靠和浮动的功能 傻瓜问题,送分(胡说八道的不给) OpenGL 最简单问题
我估计你的glViewPort没有设为窗口大小
下面是我函数体的代码
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);
}
肯请你的指教...
{
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里东西一样了
前几天,有一个网友寻找OpenGL显示曲面的方法,email到我这里。我把我的 wave 程序发给他了。不料我的程序使他喜出望外。这是我想到如果我的程序放到网上的话,会有更多的人能够更容易的看到我的代码,并且公容易的学习如何使用OpenGL。2. Contents
请大家访问 http://www.betajin.com/alphasun/index.htm。请看其中的 Wave OpenGL 页面,在里面便可下载 wave 的源代码。以后我还会公布一些其它的程序源代码。希望能对大家有用。我的 MyProjects 有172个目录呢,并且有的workspace包含数个工程。另外,如果大家觉得本贴对你有用,还烦劳各位 up 一下,使得更多的人能够看得到。
谢谢