Я работаю над очень простой программой, которая рисует 2 плоскости.Плоскость земли и задняя плоскость земли.
Я пытаюсь нарисовать обе плоскости, используя эти точки, упорядоченные по координатам X, Y, Z.
плоскость фона
- точка 1 100.000002 100.000002 100.000002
- точка 2 -100.000002 100.000002 100.000002
- точка 3 -50.000001 -23.000001 100.000002
- точка 4 50.000001 -23.000001 100.000002
земля плоскости
- точка 1 -50.000001 -23.000001 100.000002
- точка 2 50.000001 -23.000001 100.000002
- точка 3 0,352941 -0,352941 0,352941
- точка 4 -0,352941 -0,352941 0,352941
Настройка My GL:
- Подсветка OpenGL отключена.
- Я рисую с помощью GL_QUAD в том порядке, в котором перечислены точки.
- Я не назначил нормали поверхности к квадрам.
- Камера центрирована в (0,0,0) с Y + как «вверх» и осью Z как глубина.
Заземленная плоскость отлично отрисовывается (просто листсерый), но фоновая плоскость вообще не отображается.Поэтому я должен спросить:
- Должен ли я включить освещение и вычислить нормали поверхности?
- Нужно ли возиться с камерой и / или просмотреть фрустрим, чтобы увидеть заднюю плоскость (OpenGL «падает» на расстоянии Z = 100+)?
Любая помощь приветствуется.Я использую 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;
}