|
|
|
| Не могу справиться с освещением в опенгл! И так, и сяк его направляю - ну все равно не так светит!
float dir[]={0,-1,0};
float pos[]={0,1,0,1};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
|
вроде должен сверху вниз светить, а светит как-то по диагонали. че за фигня? | |
|
|
|
|
|
|
|
для: alex19921992
(08.03.2007 в 16:37)
| | Возможно, направление источника света трансформируется текущей видовой матрицей. | |
|
|
|
|
|
|
|
для: -=Art=-
(08.03.2007 в 17:40)
| | эээээээ........ не совсем понятно конечно..... А ведь если я задам такой материал, чтобы он излучал свет и поставлю излучаемость на максимум... то он будет реальным источником света и причем видимым! Правильно ли я рассуждаю???
Кстати, тени будут автоматически отбрасываться или это надо тоже настраивать? | |
|
|
|
|
|
|
|
для: alex19921992
(09.03.2007 в 05:27)
| | >эээээээ........ не совсем понятно конечно.....
попробуй перед вышеприведенным кодом
>А ведь если я задам такой материал, чтобы он излучал свет и поставлю излучаемость на максимум...
>то он будет реальным источником света и причем видимым!
> Правильно ли я рассуждаю???
нет
>Кстати, тени будут автоматически отбрасываться или это надо тоже настраивать?
писать самому | |
|
|
|
|
|
|
|
для: -=Art=-
(09.03.2007 в 07:32)
| | >попробуй перед вышеприведенным кодом
та строка уже была
>нет
но ведь в играх дофига источников света, а не восемь, как тут..
>писать самому
а нет ли готовых движков?
--------------------
может, попробуете отладить:
надо чтоб в комнате свет падал с потолка комнаты на пол.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); // это уже давно стояло
glTranslated(0,0,-3.5);
//glRotated(rot1,0,1,0);
//glRotated(rot2,1,0,0);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_DEPTH_TEST);
float dir[]={0,-1,0}; //настраиваем источник света
float pos[]={0,1,0,1};
float sp[4] = {1,1,1,1};
float color[4]={1,1,1,0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glLightfv(GL_LIGHT0, GL_SPECULAR, sp);
glLightfv(GL_LIGHT0, GL_DIFFUSE, color);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
glBegin(GL_TRIANGLES); //тут мы рисуем комнату
glColor3d(1,0,0);
glVertex3d(-1,1,1);
glVertex3d(-1,-1,-1);
glVertex3d(-1,-1,1);
glVertex3d(-1,1,1);
glVertex3d(-1,-1,-1);
glVertex3d(-1,1,-1);
glColor3d(0,1,0);
glVertex3d(1,1,1);
glVertex3d(1,-1,-1);
glVertex3d(1,-1,1);
glVertex3d(1,1,1);
glVertex3d(1,-1,-1);
glVertex3d(1,1,-1);
glColor3d(0.5,0.5,0);
glVertex3d(-1,-1,-1);
glVertex3d(1,1,-1);
glVertex3d(1,-1,-1);
glVertex3d(-1,-1,-1);
glVertex3d(1,1,-1);
glVertex3d(-1,1,-1);
glColor3d(0.5,0,0.5);
glVertex3d(1,1,1);
glVertex3d(-1,1,-1);
glVertex3d(-1,1,1);
glVertex3d(1,1,1);
glVertex3d(-1,1,-1);
glVertex3d(1,1,-1);
glColor3d(0,0.5,0.5);
glVertex3d(1,-1,1);
glVertex3d(-1,-1,-1);
glVertex3d(-1,-1,1);
glVertex3d(1,-1,1);
glVertex3d(-1,-1,-1);
glVertex3d(1,-1,-1);
glEnd();
|
| |
|
|
|
|
|
|
|
для: alex19921992
(09.03.2007 в 07:47)
| |
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); // это уже давно стояло
float dir[]={0,-1,0}; //настраиваем источник света
float pos[]={0,1,0,1};
float sp[4] = {1,1,1,1};
float color[4]={1,1,1,0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glLightfv(GL_LIGHT0, GL_SPECULAR, sp);
glLightfv(GL_LIGHT0, GL_DIFFUSE, color);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_DEPTH_TEST);
glTranslated(0,0,-3.5);
//glRotated(rot1,0,1,0);
//glRotated(rot2,1,0,0);
glBegin(GL_TRIANGLES); //тут мы рисуем комнату
glColor3d(1,0,0);
glVertex3d(-1,1,1);
glVertex3d(-1,-1,-1);
glVertex3d(-1,-1,1);
glVertex3d(-1,1,1);
glVertex3d(-1,-1,-1);
glVertex3d(-1,1,-1);
glColor3d(0,1,0);
glVertex3d(1,1,1);
glVertex3d(1,-1,-1);
glVertex3d(1,-1,1);
glVertex3d(1,1,1);
glVertex3d(1,-1,-1);
glVertex3d(1,1,-1);
glColor3d(0.5,0.5,0);
glVertex3d(-1,-1,-1);
glVertex3d(1,1,-1);
glVertex3d(1,-1,-1);
glVertex3d(-1,-1,-1);
glVertex3d(1,1,-1);
glVertex3d(-1,1,-1);
glColor3d(0.5,0,0.5);
glVertex3d(1,1,1);
glVertex3d(-1,1,-1);
glVertex3d(-1,1,1);
glVertex3d(1,1,1);
glVertex3d(-1,1,-1);
glVertex3d(1,1,-1);
glColor3d(0,0.5,0.5);
glVertex3d(1,-1,1);
glVertex3d(-1,-1,-1);
glVertex3d(-1,-1,1);
glVertex3d(1,-1,1);
glVertex3d(-1,-1,-1);
glVertex3d(1,-1,-1);
glEnd();
|
Попробуй так.
Куда тебе больше 8 источников? Странный ты...
Готовые движки есть. Blitz3D, например | |
|
|
|
|
|
|
|
для: -=Art=-
(09.03.2007 в 10:30)
| | То есть ты хочешь сказать, что во всех играх, использующих опенгл, на всех уровнях не больше восьми источников света? Кстати, как настроить мощность источников света? | |
|
|
|
|
|
|
|
для: alex19921992
(09.03.2007 в 11:39)
| | Кстати, почему-то при движении камеры освещение вообще непонятно себя ведет... как-то по-другому светит... wtf? | |
|
|
|
|
|
|
|
для: alex19921992
(09.03.2007 в 12:53)
| | направление источника света трансформируется текущей видовой матрицей.
Можно получить больше 8 ис , но тебе не об этом париться надо. | |
|
|
|
|
|
|
|
для: -=Art=-
(09.03.2007 в 17:14)
| | Я понял... просто интересно было... Вот про матрицу я вообще ничего не знаю. Просто вот я снчала хотел сделать камеру, чтоб просто леталапо пространству, как в играх, но че-то впал в ступор(((( Проблема: как лучше хранить камеру: 3-мя координатами и 3-мя поворотами вокруг осей или 2-мя точками и поворотом вокруг этой оси.. или еще как-то? после этого я понял что здесь математику надо знать очень хорошо. Потому как в обоих случаях проблема: как стандартными ф-ями опенгл по этим данным поставить как надо камеру? Даже не знаю, что делать... | |
|
|
|
|
|
|
|
для: alex19921992
(09.03.2007 в 17:24)
| | Вообще, как лучше сделать камеру? Я нашел ф-ю, которая переносит камеру в определенную точку. Но как сделать, чтобы юзер мог ей управлять? Наверное вы такое делали, может поможете? | |
|
|
|
|
|
|
|
для: alex19921992
(11.03.2007 в 16:53)
| | Можно задавать камеру 3 углами(между направлением взгляда и осями координат) и координатами точки, в которой находится набюдатель. | |
|
|
|
|
|
|
|
для: -=Art=-
(11.03.2007 в 18:56)
| | Мне тут сказали, что камеру лучше считать в сферических координатах, а я даже не знаю, че это... может подскажете? | |
|
|
|
|
|
|
|
для: alex19921992
(14.03.2007 в 08:53)
| | www.justfuckinggoogleit.com
http://www.exponenta.ru/educat/class/courses/an/theme4/theory.asp | |
|
|
|
|