OpenGL初学者的问题: 为什么没有显示图形

snow3638 2007-04-26 10:13:45
为什么没有显示图形
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;

}
...全文
393 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluevox3000 2007-05-08
  • 打赏
  • 举报
回复
你站在一个比飞机大20倍的物体旁边&&你站在月球看地球上的人!=(物体||人 )不存在
snow3638 2007-04-27
  • 打赏
  • 举报
回复
GetViewRange(PointList,left,right,bottom,top);
通过以下函数,能返回left,right,bottom,top四个值,最后结果是
left=38613 right=38591 top=-212.425 bottom=-213.888 ;
而且我调试的结果point有值

BOOL CDrawView::GetViewRange(CDerivCoorList &ListPoint, GLfloat &left,
GLfloat &right, GLfloat &bottom, GLfloat &top )
{
CCoor* Head=ListPoint.GetHead();
left=(GLfloat)Head->x; right=(GLfloat)Head->x;
top=(GLfloat)Head->y; bottom=(GLfloat)Head->y;
POSITION pos=ListPoint.GetHeadPosition();
while (pos!=NULL)
{
CCoor* point=ListPoint.GetNext(pos);
if (left > point->x) left=point->x;
if(right < point->x) right=point->x;
if(top < point->y) top=point->y;
if(bottom > point->y) bottom=point->y;
}
return TRUE;

}
snow3638 2007-04-27
  • 打赏
  • 举报
回复
::glTranslatef((left+right)/2,(top+bottom)/2,-5); 这句错了,
只要把-5该为-1到1之间的数就行. 应该是设成一个负数,也就是说把视点(照相机)
向z负向移动,那才能看到物体, 怎么可能0到1之间的整数也可,为什么?
Zhentiwei 2007-04-27
  • 打赏
  • 举报
回复
你一次就画一个,试试啊。
看在那里出了问题
Zhentiwei 2007-04-26
  • 打赏
  • 举报
回复
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都有正确的值吗?

19,464

社区成员

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

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