3D затенение / освещение теряется с окружающими затененными сторонами - PullRequest
0 голосов
/ 28 декабря 2010

Как вы, ребята, справляетесь с затенением в 3D-игре? У меня есть источник направленного света, который затеняет одну сторону дерева из кубов. Все остальные 3 стороны получают только затенение. Таким образом, эффект 3d теряется при взгляде на две окружающие затененные стороны. Я что-то пропустил? Должен ли я затенять сторону, наиболее удаленную от источника света, еще темнее? Я попытался взглянуть на Fallout 3, и это похоже на то, что они делают, однако Minecraft, кажется, затеняет насыпь травы светом с двух противоположных сторон и темными оставшимися двумя противоположными сторонами, создавая эффект, что есть два направленных источника света для двух источников света затемненные стороны и окружающий свет для темных затемненных сторон.

Ответы [ 3 ]

1 голос
/ 28 декабря 2010

Похоже, ваш источник света в настоящее время выровнен по оси (например, имеет направление: x, y, 0 или 0, y, z). Это полностью осветит ту сторону вашего дерева, которая обращена к свету, и совсем не осветит другие. Одна вещь, которую вы могли бы сделать, чтобы улучшить положение вещей, это слегка переместить свет (добавив немного к 0 для x или z). это будет означать, что две грани подсвечиваются в разной степени (при условии, что значение 0 увеличено до значения от 0 до значения x / z). Тогда у тебя только два неосвещенных лица. Второй свет сделает их менее похожими в случае необходимости.

1 голос
/ 28 декабря 2010

С предметом, сделанным из кубов, вы гарантировано, что одна сторона объекта будет в темноте.С рассеянным светом, вы немного осветите его, но края по-прежнему не будут затенены.Есть несколько вариантов, которые вы можете использовать:

  1. Использовать текстуру для кубов, чтобы помочь показать форму кубов
  2. Делать несколько проходов, отражая свет от зеркальных поверхностей (дорого!)
  3. Создайте второй источник света (хотя это, вероятно, будет выглядеть очень неестественно)

Похоже, то, что вы делаете, должно быть очень простым, поэтому я бы сказал,Ваша текущая реализация кажется удовлетворительной.

0 голосов
/ 28 декабря 2010

Для начала попробуйте вызвать glLightModeli, чтобы установить для GL_LIGHT_MODEL_TWO_SIDE значение GL_TRUE.

...