OpenGL初学者的问题: 为什么没有显示图形
为什么没有显示图形
BOOL CDrawView::Draw(CWnd* pWnd, CDerivCoorList& PointList,
GLfloat Deltax, GLfloat Deltay,
GLfloat DeltaAnglex, GLfloat DeltaAngley)
{
GLfloat left=GLfloat(0); GLfloat right=GLfloat(0);
GLfloat bottom=GLfloat(0); GLfloat top=GLfloat(0);
GetViewRange(PointList,left,right,bottom,top); //获取视景体范围
//画坐标系, 首先建模
::glBegin(GL_LINES);
::glVertex2f(left, 0);
::glVertex2f(right,0);
::glEnd();
::glBegin(GL_LINES);
::glVertex2f(0,top);
::glVertex2f(0,bottom);
::glEnd();
//画多段线
::glBegin(GL_LINE_STRIP);
POSITION pos=PointList.GetHeadPosition();
while (pos!=NULL)
{
CCoor* point=PointList.GetNext(pos);
::glVertex2f(point-> x, point-> y);
}
::glEnd();
///////////模型变换///////////////
//将局部坐标平移至((left+right)/2,(top+bottom)/2,-5)
::glLoadIdentity(); //将现有矩阵置为单位矩阵
::glMatrixMode(GL_MODELVIEW); //设置模型变换
::glTranslatef((left+right)/2,(top+bottom)/2,-5); //视点变换是在视点坐标系中进行,实际上相当将相机远离屏幕5,
//5没有实际意义,因为是一个平面图形
/*//以下进行平移,旋转操作
::glMatrixMode(GL_MODELVIEW); //设置模型变换
::glTranslatef(0,0, 0); //平移
::glScalef(1.0, 1.0,1.0);*/
/////////投影变换
::glMatrixMode(GL_PROJECTION); //设置投影变换
::glLoadIdentity(); //将现有矩阵置为单位矩阵
::gluOrtho2D(-(right-left),(right-left),-(top-bottom),(top-bottom)); //设置视景体范围
glMatrixMode(GL_MODELVIEW);//恢复模型变换
/////////视口变换/////////
CRect ClientRect;
pWnd-> GetClientRect(&ClientRect);//获取客户区大小
::glViewport((GLint)ClientRect.left/2, (GLint)ClientRect.bottom/2,
(GLsizei)ClientRect.Width(), (GLsizei)ClientRect.Height()); //设置设置图形显示区域
//SwapBuffers(m_hDC);
//交换前后缓存数据,即将后缓存数据送给前缓存。(在OpenGL中支持双缓存)
return TRUE;
}
[解决办法]
GLfloat left=GLfloat(0); GLfloat right=GLfloat(0);
GLfloat bottom=GLfloat(0); GLfloat top=GLfloat(0);
left,right,top,bottom
都是零啊,怎么画啊?
while (pos!=NULL)
{
CCoor* point=PointList.GetNext(pos);
::glVertex2f(point-> x, point-> y);
}
你保证point-> x,point-> y都有正确的值吗?
[解决办法]
你一次就画一个,试试啊。
看在那里出了问题
[解决办法]
你站在一个比飞机大20倍的物体旁边&&你站在月球看地球上的人!=(物体||人 )不存在