Форум программистов, компьютерный форум CyberForum.ru

OpenGL, работа с освещением - C++

Восстановить пароль Регистрация
 
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
01.08.2013, 21:21     OpenGL, работа с освещением #1
Здравствуйте. Пробую себя в игростроении. Нарисовал трехмерный домик, физику сделал - можно бегать по поверхностям, прыгать, не проходить сквозь стены - все вроде бы работает. И тут встал вопрос об освещении... Использую уроки от NeHe, там про освщение написано, сделал как говорилось. Заработало. Но заметил несколько странностей(с заданием параметров освещения немного разобрался):
1) Освещение двигается как будто вместе с камерой(при перемещении камеры использую gluLookAt, то есть всю систему координат не двигаю). Сам источник освещения создается при инициализации окна - это правильно?
2) Само освещение работает как-то странно. Пример: подхожу к стене, смотрю в упор - освещенность стены средняя. Поворачиваю камеру направо(смотрю в правую сторону) - освещенность стены увеличивается. Поворачиваю камеру налево - освещенность падает как если бы источник освещения был отключен. При этом пол, на котором я стою, не меняет освещения...
Что я делаю не так? Нужно, чтобы источник освещения оставался на одном и том же месте и освещение поверхности не зависело от направления взгляда... Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 21:21     OpenGL, работа с освещением
Посмотрите здесь:

OpenGl C++
Opengl и C++ C++
opengl with devcpp C++
C++ ООП в с++ и OpenGL
Арканоид с OpenGL C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dr_Quake
Заблокирован
01.08.2013, 21:43     OpenGL, работа с освещением #2
А при чём тут C++? Сдаётся мне ты при повороте и в матричных преобразованиях забыл первое правило Demoscene FAQ - при трансформе x,y,z - в по очереди надо сначала сохранить все переменные и использовать их как базу для каждого трансформа, а иначе выйдет фигня вида newx=f(x,y,z);newy=f(newx,y,z) итд. Но это телепатия без кода.
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
01.08.2013, 22:24  [ТС]     OpenGL, работа с освещением #3
Какая часть кода нужна? Код в нескольких файлах... Слишком много текста. x,y,z - имеются в виду координаты размещаемых объектов? Рисую так: сначала сбрасываю матрицу, потом перемещаю систему координат в нужную точку с помощью glTranslatef, рисую объект относительно этой точки, перемещаю систему координат обратно той же функцией. Координаты объектов задаются при запуске приложения, при работе программы остаются неизменными. Исключение-координаты игрока, их использую при перемещении камеры.
Dr_Quake
Заблокирован
01.08.2013, 22:29     OpenGL, работа с освещением #4
А, ты правильным образом делаешь - тогда скорее всего note:

glLightfv() is affected by the current state of the modelview matrix. That is calling glTranslatef(move_x,0,move_y), before setting the light position will translate the light by (move_x,0,move_y).
И второе место - аналогично про glu_Lookat или чем ты там определяешь финальные координаты камеры?
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
02.08.2013, 10:27  [ТС]     OpenGL, работа с освещением #5
Эээ... Это значит, что позиция источника света задается относительно пожения камеры, я правильно понял? Вот как я задаю источник света:
C++ (Qt)
1
2
3
4
5
6
7
8
GLfloat m_Position[] = {0.0f,5.0f,0.0f,1.0f};
    GLfloat m_Attenuation = 1.0f;
    GLfloat m_LinAttenuation = 0.01f;
    GLfloat m_QuadAttenuation = 0.01f;
    glLightfv(GL_LIGHT0, GL_POSITION, m_Position);
    glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, m_Attenuation);
    glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, m_LinAttenuation);
    glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, m_QuadAttenuation);
Вроде как должен получиться точечный источник света в позиции с координатами (0;5;0) относительно камеры, так? Получается - вокруг меня светло, а дальше освещение падает(хотя если смотреть вертикально вниз, то пол затемняется). Но при попытке сделать так:
C++ (Qt)
1
GLfloat m_Position[] = {10.0f,5.0f,10.0f,1.0f};
ерунда получается: источник вроде бы должен переместиться относительно меня и начать освещать небольшую область, а вокруг меня будет темно. На самом деле он как бы остается надо мной, но интенсивность света падает...
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
02.08.2013, 11:20     OpenGL, работа с освещением #6
PazDim, как вариант попробуй каждый раз перед установкой позиции источника сбрасывать видовую матрицу в единичную, а после установки - возвращать ее обратно.
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
02.08.2013, 11:41  [ТС]     OpenGL, работа с освещением #7
Я устанавливал источник только один раз, при запуске приложения... Нужно при каждой отрисовке?
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
02.08.2013, 11:46     OpenGL, работа с освещением #8
PazDim, проведи эксперимент.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 15:22     OpenGL, работа с освещением
Еще ссылки по теме:

Арканоид с OpenGL C++
MinGW + OpenGL C++
С++ и OpenGL C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
02.08.2013, 15:22  [ТС]     OpenGL, работа с освещением #9
Спасибо, попробовал. Двигаю всю систему координат(глобальную) при каждой отрисовке по OZ, устанавливаю источник света и возвращаю систему координат обратно. Наблюдаю интересный эффект: источник света действительно находится вдали от меня, но при этом рисуется относительно меня - перемещается вместе со мной, вращается вокруг меня. Это из-за вот этого -
is affected by the current state of the modelview matrix
? Можно как-то размещать источник в глобальной системе координат? Нет, это конечно тоже неплохо - можно будет не особо парясь фонарик сделать... Но хотелось бы в глобальной системе координат рисовать - так как-то привычнее...
Yandex
Объявления
02.08.2013, 15:22     OpenGL, работа с освещением
Ответ Создать тему
Опции темы

Текущее время: 21:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru