在OnSize函数中的代码是这样的:
void CGLLightView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if (cy==0) // 防止被零除
{
cy=1;// 将Height设为1
}
glMatrixMode(GL_PROJECTION); // 选择投影矩阵
glLoadIdentity();// 重置投影矩阵
gluPerspective(0.0f,(GLfloat)cx/(GLfloat)cy,1.0,100.0);// 计算窗口的外观比
例
glLoadIdentity();
glViewport(0,0,cx,cy);//设视口
}绘制一个正方形的函数中的代码是这样的:
void CGLLightView::OnDraw(CDC* pDC)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_QUADS);
glVertex2f(-0.5f,0.5f);
glVertex2f(-0.5f,-0.5f);
glVertex2f(0.5f,-0.5f);
glVertex2f(0.5f,0.5f);
glEnd();
SwapBuffers(m_pDC->GetSafeHdc());
// TODO: add draw code for native data here
}问题:为什么正方形会变长方形?图形的高和宽跟窗口的高和宽成正比的:窗口拉长,正
方形也拉长!这个问题怎么解决?有人说这是和gluPerspective这个函数设定相关,但应
该怎么设定?是不是还有别的函数在影响这个问题?
请高手指教!!!
void CGLLightView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if (cy==0) // 防止被零除
{
cy=1;// 将Height设为1
}
glMatrixMode(GL_PROJECTION); // 选择投影矩阵
glLoadIdentity();// 重置投影矩阵
gluPerspective(0.0f,(GLfloat)cx/(GLfloat)cy,1.0,100.0);// 计算窗口的外观比
例
glLoadIdentity();
glViewport(0,0,cx,cy);//设视口
}绘制一个正方形的函数中的代码是这样的:
void CGLLightView::OnDraw(CDC* pDC)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_QUADS);
glVertex2f(-0.5f,0.5f);
glVertex2f(-0.5f,-0.5f);
glVertex2f(0.5f,-0.5f);
glVertex2f(0.5f,0.5f);
glEnd();
SwapBuffers(m_pDC->GetSafeHdc());
// TODO: add draw code for native data here
}问题:为什么正方形会变长方形?图形的高和宽跟窗口的高和宽成正比的:窗口拉长,正
方形也拉长!这个问题怎么解决?有人说这是和gluPerspective这个函数设定相关,但应
该怎么设定?是不是还有别的函数在影响这个问题?
请高手指教!!!
前几天,有一个网友寻找OpenGL显示曲面的方法,email到我这里。我把我的 wave 程序发给他了。不料我的程序使他喜出望外。这是我想到如果我的程序放到网上的话,会有更多的人能够更容易的看到我的代码,并且公容易的学习如何使用OpenGL。2. Contents
请大家访问 http://www.betajin.com/alphasun/index.htm。请看其中的 Wave OpenGL 页面,在里面便可下载 wave 的源代码。以后我还会公布一些其它的程序源代码。希望能对大家有用。我的 MyProjects 有172个目录呢,并且有的workspace包含数个工程。另外,如果大家觉得本贴对你有用,还烦劳各位 up 一下,使得更多的人能够看得到。
谢谢
我想先用3d-max制作一个飞机着陆的动画,然后用opengl来
处理。使之能用外界输入的数据来控制,我现在刚开始学习vc,请指点
如何才能掌握着技巧,你的设计,处理思路是什么?我现在没有头绪。
它能处理3d的文件格式嘛/
// Called by GLUT library when the window has chanaged size
void ChangeSize(GLsizei w, GLsizei h)
{
// Prevent a divide by zero
if(h == 0)
h = 1;
// Set Viewport to window dimensions
glViewport(0, 0, w, h); // Reset coordinate system
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far)
if (w <= h)
glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0);
else
glOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0); glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
这样能保证你所画的正方形保持不变
例
----------
应该是这里的错误,这是透视变换,看看它的相关参数就知道了。
另外,glOrtho 可以使正方形保持不变