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 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.