Я написал несколько приложений для Android, но это мой первый опыт 3D-программирования.
Я создал комнату (4 стены, потолок и пол) с парой объектов внутри и могу перемещать камеру вокруг нее, как будто хожу. Я текстурировал все поверхности различными изображениями, и все работало, как и ожидалось.
Для контекста: ширина комнаты 14 единиц, глубина 16 единиц (с центром в исходной точке), высота 3 единицы (1 над исходной точкой и 2 под ней). В середине комнаты есть 2 объекта, куб и перевернутая пирамида на нем.
Затем я добавил источник света, чтобы затенить куб и пирамиду. Я прочитал и следил за парой портов NeHe, поэтому я взял то, что у меня было на уроке по освещению, и применил это к своему новому коду.
gl.glEnable(GL10.GL_LIGHTING);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, new float[] { 0.1f, 0.1f, 0.1f, 1f }, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, new float[] { 1f, 1f, 1f, 1f }, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, new float[] { -4f, 0.9f, 6f, 1f }, 0);
gl.glEnable(GL10.GL_LIGHT0);
В результате куб и пирамида не заштрихованы. Они выглядят одинаково на сторонах, противоположных свету, и на сторонах, обращенных к нему. Когда камера направлена прямо в сторону от источника света, комната выглядит так, как она выглядела до того, как я добавил код освещения. Когда я поворачиваю камеру к источнику света, вся комната (включая объекты) становится темнее, пока не станет полностью черной, когда камера направлена прямо на источник.
Что здесь происходит? Я читал много статей об освещении и о том, как оно работает, но я не видел ничего, что указывало бы на то, почему это не освещало бы все стороны комнаты, а куб и пирамиду затеняли в зависимости от положения источника света. Есть ли какое-то ожидаемое поведение света, потому что он находится «внутри» комнаты? Я просто пропустил что-то легкое, потому что я новичок?