LINUX.ORG.RU
ФорумTalks

OpenGL освещение (срочно)


0

0
В талкс, т.к. срочно надо...

Блин бьюсь уж х.з. сколько с освещением в опенгл, включил как в примерах, рисую что-нить с помощью glut функций, например glutSolidCone, всё нормуль. Отрисовываю что-нить по полигонам - получаеться как без освещения (грани не видны, типа 2D), игрался с различной установкой материала ничего не помогло. Куда копать, подскажите пожалуйста, а то до завтра нужно сделать.

★★★
Всё нашёл, я ломак. Нужно задавать нормали. Только теперь не понятно как у сложного объекта, состоящего из множества полигонов, вычислить нормали так, чтобы они смотели именно наружу.
CrazyPit ★★★
() автор топика
Ответ на: комментарий от CrazyPit
1. не юзай glut
2. можно строить карту нормалей (массив) для каждого обьекта
направланеи вектора нормали завист от обхода полигона (правая тройка, левая тройка)

dreamer ★★★★★
()
Ответ на: комментарий от CrazyPit
Есть ещё штука вроде GL_LIGHT_MODEL_TWO_SIDE, с неё будет рассчитываться для обоих сторон освещение, если я правильно понимаю, то в этом случае будет всё равно, куда нормали направлены.
Legioner ★★★★★
()
Ответ на: комментарий от Legioner
> Есть ещё штука вроде GL_LIGHT_MODEL_TWO_SIDE, с неё будет рассчитываться для обоих сторон освещение, если я правильно понимаю, то в этом случае будет всё равно, куда нормали направлены.

Ага круто, нужно проверить.

CrazyPit ★★★
() автор топика
Ответ на: комментарий от dreamer
> 1. не юзай glut

Да я и не юзаю, это я тестил с ним освещение

> 2. можно строить карту нормалей (массив) для каждого обьекта

Так сейчас и делаю

> направланеи вектора нормали завист от обхода полигона (правая тройка, левая тройка)

А вот это я что-то не совсем понял.

CrazyPit ★★★
() автор топика
Ответ на: комментарий от dreamer
> ага, и считать 2 раза - у вас есть лишние такты процессора ?

В моём случае (курсовик) это не критично.

CrazyPit ★★★
() автор топика
Ответ на: комментарий от unnamed
> ...и будет у тебя не 3D-объект, а многоугольник в плоскости экрана

Т.е. GL_LIGHT_MODEL_TWO_SIDE можно не пробовать?

CrazyPit ★★★
() автор топика
Ответ на: комментарий от unnamed
> ...и будет у тебя не 3D-объект, а многоугольник в плоскости экрана

А можно поподробнее? Я когда то рисовал лист мёбиуса, без этой опции такая гадость получалась (там нормали сумасшедшие). А с ней всё нормально =)

Legioner ★★★★★
()
Ответ на: комментарий от Legioner
Блин, не помню я уже всего... :) Давно не занимался этим делом. Но такая гадость ещё могла быть из-за невключенного освещения, теста глубины или если все нормали направлены в одну сторону (на сторону глаза). Попробуй включить GL_AUTO_NORMAL, вроде есть такая фишка.
unnamed
()
Ответ на: комментарий от unnamed
самое освещение включил ?
glLightfv(GL_LIGHT1,GL_AMBIENT,lightAmbient1);
glLightfv(GL_LIGHT1,GL_DIFFUSE,lightDiffuse1);
glLightfv(GL_LIGHT1,GL_POSITION,lightPosition1);
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHTING);

dreamer ★★★★★
()
Ответ на: комментарий от unnamed
> Попробуй включить GL_AUTO_NORMAL, вроде есть такая фишка.

Есть то она есть, только что-то нихрена не работает, а было бы замечательно...

CrazyPit ★★★
() автор топика
Ответ на: комментарий от dreamer
Да. Только обычно начинают с LIGHT0, но, думаю, это не принципиально.
unnamed
()
Ответ на: комментарий от dreamer
Включил, сделал кубик (задал нормали вручную) всё ок. осталось написать расчёт нормалей для сложных объектов, но блин должно же это как-то автоматом считаться... GL_AUTO_NORMAL не пашет:(
CrazyPit ★★★
() автор топика
Ответ на: комментарий от unnamed
> Ты попробовал с массивом сделать?

Сейчас попробую, просто я ищу, может какое решение попроще есть... правда пока ищу уже бы сам написал:))

CrazyPit ★★★
() автор топика
Ответ на: комментарий от CrazyPit
Если расчёт, то с векторным произведением мутить надо. Средствами OpenGL кажись тоже можно, я не помню.
unnamed
()
Ответ на: комментарий от CrazyPit
>> направланеи вектора нормали завист от обхода полигона (правая тройка, левая тройка)

>А вот это я что-то не совсем понял.

Если обходятся вершины треугольника в одну сторону, то в качестве нормали берется векторное произведение двух векторов, построенных в этой последовательности обхода. Если в обратную сторону --- векторы будут направлены в другую сторону, и, следовательно, их векторное произведение будет направлено в другое полупространство.

Ay49Mihas ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.