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();
} 展开
#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();
} 展开
1个回答
展开全部
有两个问题:
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啥也画不出来的。
你先把这两个改了,再有问题再说。
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啥也画不出来的。
你先把这两个改了,再有问题再说。
更多追问追答
追问
追答
对,如果你不指定Z坐标,那么默认z都是0,相当于你只在X-Y平面画,就看不出立体来。还有你把glbegin参数改成GL_LINE_STRIP就是折线了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询