我正在研究一个绘制2架飞机的非常简单的程序。地平面和背景平面。
我正在尝试使用以X,Y,Z坐标排序的这些点来绘制两个平面。
背景平面
地平面
我的GL设置:
地平面渲染完美(只是一张灰色),但背景平面根本不渲染。所以我不得不问:
感谢任何帮助。我正在使用libSDL和OpenGL。
我的OpenGL初始化代码如下所示:
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
return false;
}
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
screenptr = SDL_SetVideoMode(swidth, sheight, sbpp, VIDEO_MODE_OPTIONS);
if( screenptr == NULL) {
return false;
}
glEnable(GL_TEXTURE_2D);
glClearColor(0,0,0,0);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//gluPerspective(45.0f, SCREEN_WIDTH/SCREEN_HEIGHT, 0.1f, 500.0f);
//gluPerspective( 45.0f, 1.0, 0.1f, 100.0f );
//glFrustum(-500.0f, 500.0f, -500.0f, 500.f, 0.1f, 500.f);
//glFrustum(-1.0, 1.0, -1.0, 1.0, 5, 400);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
if(glGetError() != GL_NO_ERROR) {
return false;
}
答案 0 :(得分:4)
你需要看看你在哪里创建你的相机矩阵(调用glPerspective或类似的东西,我还没有使用过SDL)并将近距离和远距离平面设置为一个值,这样你就可以了希望用户看到距离近平面更远,但距离远平面更近。不在近平面和远平面之间的所有东西都被剪掉了。
编辑我查了一下,在SDL中你创建了这样的视图矩阵:
/* Create our projection matrix with a 45 degree field of view
* a width to height ratio of 1.0 and view from .1 to 100 infront of us */
perspective(projectionmatrix, 45.0, 1.0, 0.1, 100.0);
不要将近平面设置为0(将导致零偏差)或远程平面设置为Float.Max(可能会导致奇怪的问题)
另请看一下透视投影的视图截图:
答案 1 :(得分:2)
您如何设置投影矩阵?它应该包含一些关于知道事物可以渲染多远的信息(通常称为远平面距离),在你需要的情况下你需要超过100个。
它可能存在的第二个问题是,如果你只渲染前向四边形,那么如果你的四边形是朝后的,它将不会被渲染。