openGL顶点数组显示问题

整个程序如下,发现显示的是空白,是因为投影的问题吗?还是因为什么设置没有设置好,希望大神能够指点#include<GL/glut.h>#include<stdlib.h>... 整个程序如下,发现显示的是空白,是因为投影的问题吗?还是因为什么设置没有设置好,希望大神能够指点
#include<GL/glut.h>
#include<stdlib.h>
static GLfloat vertex[]={
0.0,9.0,2.0,
0.0,9.0,3.0,
0.0,1.0,3.0
};
static GLfloat colors[]={
1.0,0.0,0.0,
1.0,0.0,0.0,
1.0,0.0,0.0
};
void Drawing()
{ int i;
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(3,GL_FLOAT,0,colors);
glVertexPointer(3,GL_FLOAT,0,vertex);
glBegin(GL_LINE);
for(i=0;i<3;i++)
glArrayElement(i);
glEnd();
glutSwapBuffers();
}
void init()
{
glClearColor(1.0,1.0,1.0,1.0);
}
void ondisplay()
{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
Drawing();
}
void onshape(int w,int h)
{
glViewport(0,0,w,h);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
gluPerspective(45.0,(GLfloat)w/h,100,100);
glLoadIdentity();
}
void main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("dingdian");
init();
glutDisplayFunc(ondisplay);
glutReshapeFunc(onshape);
glutMainLoop();

}
展开
 我来答
百度网友1c6e06f
2014-03-04 · TA获得超过2894个赞
知道小有建树答主
回答量:695
采纳率:66%
帮助的人:655万
展开全部
有两个问题:
1、reshape里面关于投影和模型矩阵的设置顺序和用法都不对,应该这样:
void onshape(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode( GL_PROJECTION );// 先设置投影矩阵
glLoadIdentity();
gluPerspective(45.0,(GLfloat)w/h,1,100);// 最后两个参数不能一样大,第一个一般设置的很小,第二个大些,两个参数的意义你百度下,我就不说了,百度说的更详细
glMatrixMode(GL_MODELVIEW);// 后设置模型矩阵
glLoadIdentity();
gluLookAt( 15, 0, 0, 0, 0, 0, 0, 1, 0 );// 意思是,你的眼睛在(15, 0, 0),然后你盯着(0, 0, 0)这个点,然后(0, 1, 0)表示y轴是朝上,前6个参数你灵活的调整下,就可以看到你画的点
}

2、你如果画线段就是glBegin( GL_LINES );如果是画连续的折线就是GL_LINE_STRIP,如果是首尾相连的折线就是GL_LINE_LOOP,而GL_LINE啥也画不出来的。

你先把这两个改了,再有问题再说。
更多追问追答
追问

确实出来图形了,但是图形不对,我又把顶点坐标改了下

static GLfloat vertex[]={

0.0,0.0,

2.0,0.0,

2.0,2.0,

0.0,2.0

};

后面的glVertexPointer(2,GL_FLOAT,0,vertex);

结果也只是一条竖直的线,请问大神是不是因为投影视角是3维的,而这里设置的是2维的,所以才有这个问题啊?

追答
对,如果你不指定Z坐标,那么默认z都是0,相当于你只在X-Y平面画,就看不出立体来。还有你把glbegin参数改成GL_LINE_STRIP就是折线了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式