Хорошо, я сделал «скайбокс» (на самом деле это 5 плоскостей из-за разных текстур).Работает нормально, но есть проблема с молнией.Это не самая сильная сторона в OpenGL, поэтому я не удивлюсь, если ответ не будет таким сложным.
Так что это мой взгляд на начальную позицию.Как вы можете видеть, передняя плоскость яркая, но левая, верхняя и правая не очень, и между ними и передней есть граница.
http://img696.imageshack.us/img696/3673/light01.png
Когда я идудо абсолютного центра (почти) скайбокса граница не так заметна (я думаю, что в абсолютном центре нет границы.
http://img233.imageshack.us/img233/2949/light02.png
Сначала я попробовал с одним источником светав позиции (0,0,0) с этими настройками, но ничего, я пытался изменить ambient, diffuse, но не очень помогает:
private float[] lightAmbient = {0.5f, 0.5f, 0.5f, 1.0f};
private float[] lightDiffuse = {1.0f, 1.0f, 1.0f, 1.0f};
private float[] lightPosition = {0.0f, 0.0f, 0.0f, 1.0f};
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glEnable(GL10.GL_DITHER);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearColor(0, 0, 0, 0);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glEnable(GL10.GL_LIGHT0);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbientBuffer);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuseBuffer);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPositionBuffer);
}
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glEnable(GL10.GL_LIGHTING);
GLU.gluLookAt(gl, eyeX, eyeY, eyeZ, centerX, centerY, centerZ, 0.0f, 1.0f, 0.0f);
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
if(height == 0) {
height = 1;
}
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 65.0f, (float)width / (float)height, 1.0f, 80.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
Так что вопрос в том, как я могу сделать этоработать в любом месте, где я нахожусь. Я надеюсь, что кто-то может мне помочь, потому что теперь это не очень красиво выглядит (без света хорошо, но я не очень хочу ночной сцены, особенно с текстурой, где есть солнце:).
РЕДАКТИРОВАТЬ (как это работает сейчас) : как было в ответе, для скайбокса больше нет нормалей, но после того, как я включил молнию, мне нужно было добавить эту строкук коду, и теперь он работает как шарм,г везде яркое небо.
gl.glLightModelf(GL10.GL_LIGHT_MODEL_TWO_SIDE, GL10.GL_TRUE);