问一个opengl视点的问题

Areslp 2009-10-14 08:25:00
我采用正交投影,但是发现当一个平面转到与视景体的上、下面平行的时候,应该有一根线,但是现在显示不出来,也没有发现是哪里错了,请大家指教。、

设置视点代码:width和height是窗口的宽,高
glViewport(0,0,width,height);
aspect = (GLdouble)width/(GLdouble)height;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float h=20.0f;
glOrtho(-h*aspect,h*aspect,-h,h,0.0,40.0);

画三角形:
boost::shared_ptr<Triangle> triangle_ptr(new Triangle(Point(-10.0f,0.0f,10.0f),Point(10.0f,0.0f,0.0f),Point(-10.0f,0.0f,0.0f)));-->平行于xoz面的三角形
m_scene->add_child(triangle_ptr);

请问问题出在哪里?
...全文
36 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Areslp 2009-10-15
  • 打赏
  • 举报
回复
谢了,好像确实这个glBegin(GL_LINE_LOOP);模式没选对的问题,我是这样画的
glBegin(GL_POLYGON);
glVertex3f(m_p0.m_x,m_p0.m_y,m_p0.m_z);
glVertex3f(m_p1.m_x,m_p1.m_y,m_p1.m_z);
glVertex3f(m_p2.m_x,m_p2.m_y,m_p2.m_z);
glEnd();

用GL_LINE_LOOP就能看到
dukelee 2009-10-14
  • 打赏
  • 举报
回复
我写了个测试程序:
#include <GL/glut.h>
#include <stdlib.h>
#include <windows.h>
#include "math.h"
//using namespace std;
#define PI 3.1415926


void myinit()
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glShadeModel(GL_FLAT);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LINE_SMOOTH);

}

void resize(int w, int h)
{
glViewport(0,0,w,h);
GLfloat aspect = (GLfloat)w/(GLfloat)h;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float hh=20.0f;
glOrtho(-hh*aspect,hh*aspect,-hh,hh,0.0,40.0);
glMatrixMode(GL_MODELVIEW); //这句加一下
}

void mydraw()
{
float a[]={-10.0,0.0,10.0};
float b[]={10.0,0.0,0.0};
float c[]={-10.0,0.0,0.0};

glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glColor3f(1.0, 0.0, 1.0);
glEnable(GL_POINT_SMOOTH);
glPointSize(1.0);
glBegin(GL_LINE_LOOP);
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
glEnd();
glFlush();
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE| GLUT_RGB);
glutInitWindowSize(600,600);
glutCreateWindow("PttoCircle");
myinit();

glutReshapeFunc(resize);
glutDisplayFunc(mydraw);
//glutKeyboardFunc(keyboard);
//glutMouseFunc(mouse);
//glutMotionFunc(mousemove);
//glutIdleFunc(Idlefn);
glutMainLoop();
return 0;
}

19,469

社区成员

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

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