![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Еще раз по осещение в OPGL
pr © (2004-04-15 14:54:00)Есть сцена размерами 4,4,4 в ней шесть объектов по углам и в т (-2,0,0) и в (2,0,0). Включаю источники света, 2 штуки, типа прожекторов и работает только один, нулевой. Пример кода :
glEnable (GL_DEPTH_TEST);
glEnable (GL_COLOR_MATERIAL);
pos[0]:=0;pos[1]:=0;pos[2]:=3;pos[3]:=1;
pos1[0]:=0;pos1[1]:=0;pos1[2]:=3;pos1[3]:=1;
direct[0]:=0;direct[1]:=0;direct[2]:=-3;direct[3]:=1;
direct1[0]:=1;direct1[1]:=0;direct1[2]:=-3;direct1[3]:=1;
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode (GL_PROJECTION);
glLoadIdentity;
glFrustum (-2, 2, -2, 2, 1, 5);
gltranslate(0,0,-3);
glMatrixMode(GL_MODELVIEW);
glloadidentity;
glenable(gl_lighting);
glenable(gl_light0);
glenable(gl_light1);
gllightfv(gl_light0,gl_position,@pos);
gllightfv(gl_light0,GL_SPOT_DIRECTION,@direct);
gllightf(gl_light0,GL_SPOT_EXPONENT,50);
gllightf(gl_light0,GL_SPOT_CUTOFF,20);
gllightfv(gl_light1,gl_position,@pos1);
gllightfv(gl_light1,GL_SPOT_DIRECTION,@direct1);
gllightf(gl_light1,GL_SPOT_EXPONENT,50);
gllightf(gl_light1,GL_SPOT_CUTOFF,20);
Заранее благодарю за ответ.
Sapersky (2004-05-13 16:56:00) [1]Писали уже (Дм (12.05.04 08:38) [6]) - текстурой.
Т.е. нужно заранее подготовить текстуру с пятном, а при выводе проверять, какие полигоны будут освещены, и в зависимости от положения/ориентации источника по отношению к ним считать текстурные координаты. В первом Half-Life так был сделан фонарик... интересно, как во втором? Шейдерами, наверное. Тоже вариант :)
Можно ещё использовать режим автоматического расчёта текстурных координат (у Краснова был пример). Хотя это больше для неплоских объектов и глобального освещения (не узкого луча) - текстура будет лепиться на весь объект.
pr (2004-05-12 10:51:00) [2]Когда я рисую плоскость я использую примитив Opengl quads, т.е четырехугольник. Для него задаются 4 вершины. Я конечно думал о том чтобы плоскость создать из множества четырехуольников, для получения пятна света, даже сделал это. Пятно на стенке появилось. Но может как-то можно получить пятно от прожектора на плоскость заданую одним примитивом. Вродебы логично рисовать стену одним плоским примитивом - четырехугольником.
Alexander S.F. (2004-05-12 09:48:00) [3]у меня был другой прикол: когда на низкополигональную модель объекта (например модель судна, сделанную в 3dsmax, и импортированную в свою сцену) направлял луч прожектора, то пятно было не круглой формы, а ломаной, по границам полигонов..
Ты проверь, сколько вершин треугольников, а следовательно и нормалей, используемых при растеризации полигона для расчета цвета, в quadric-модели попадает в желаемое пятно света, и сколько треугольников в твоих quads-примитивах.. и проверь, правильно ли ты считаешь для них нормали.. особо для смежных вершин
pr (2004-05-12 08:58:00) [4]Я говорю не про блики а про освещение от источника типа прожектора.
Дм (2004-05-12 08:38:00) [5]Как это появляется? Блики вообще надо накладывать в виде второй тексуры. Насколько мне известно.
pr (2004-05-12 07:57:00) [6]Еще вопрос по освещению. Если использовать примитивы Quads, polygon, и направить на них луч прожектора, то на поверхности этих примитивов не видно пятна света, хотя на Quadric-объектах пятно появляется. Подскажите в чем у меня проблема.
pr (2004-04-28 09:58:00) [7]Great thx
Regis (2004-04-25 00:29:00) [8]По умолчанию LIGHT0 задан как белый свет, а все остальные как чёрный, поэтому при включении их надо задавать св-ва источника:
gllightfv(gl_light1,GL_DIFFUSE, @diffuse) к примеру. Сам когда-то долго голову ломал :)
pr (2004-04-21 08:18:00) [9]Задал направление от оси первого источника на 45 градусов, не видно.
Потом нариовал сферу и поставил два точечных источника по разную сторону сферы. например координаты (-2,0,0) и (2,0,0) освещена сторона на которую падают лучи от нулевого источника.
Заранее благодарю за ответ.
PS. Дублировать вопросы больше не буду.
clover (2004-04-15 17:04:00) [10]Позиции у осветителей в одной точке, направления у осветителей 18 с небольшим градусов. Как ты там заметил, что один только работает? они почти в одну сторону светят ;)