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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
#1

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

01.08.2013, 21:21. Просмотров 1116. Ответов 8
Метки нет (Все метки)

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

Проблемы с освещением, C# - OpenGL
помогити плз, на черном фоне выводит черную сферу, при включении GL_LIGHTING using System; using System.Collections.Generic; using...

Проблема с освещением - OpenGL
Делаю освещение фигуры. Фигура состоит из множества четырехугольников. Без освещения все работает правильно. Включаю освещение таким...

Непонятки с освещением - OpenGL
Добрый день. Пишу небольшую программу для рисования графиков функции в 3-хмерном пространстве. Необходимое условие, поставленное...

Проблемы с освещением - OpenGL
Изучаю OpenGL, добрался до направленного источника света. В качестве фигуры выбрал куб, так как он обладает единичными координатами...

Что-то не так с освещением - Unity, Unity3D
http://saveimg.ru/show-image.php?id=41f383be827e1ac1c19bfe5d9a87a157 Не магу сделать более естественнее и чтобы свет не проходил через...

ST. Управление освещением на ПЛК - Контроллеры PLC
На входе в квартиру установлены два датчика: один снаружи квартиры, другой внутри. Если срабатывает сначала внешний, а потом внутренний...

8
Dr_Quake
Заблокирован
01.08.2013, 21:43 #2
А при чём тут C++? Сдаётся мне ты при повороте и в матричных преобразованиях забыл первое правило Demoscene FAQ - при трансформе x,y,z - в по очереди надо сначала сохранить все переменные и использовать их как базу для каждого трансформа, а иначе выйдет фигня вида newx=f(x,y,z);newy=f(newx,y,z) итд. Но это телепатия без кода.
0
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
01.08.2013, 22:24  [ТС] #3
Какая часть кода нужна? Код в нескольких файлах... Слишком много текста. x,y,z - имеются в виду координаты размещаемых объектов? Рисую так: сначала сбрасываю матрицу, потом перемещаю систему координат в нужную точку с помощью glTranslatef, рисую объект относительно этой точки, перемещаю систему координат обратно той же функцией. Координаты объектов задаются при запуске приложения, при работе программы остаются неизменными. Исключение-координаты игрока, их использую при перемещении камеры.
0
Dr_Quake
Заблокирован
01.08.2013, 22:29 #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 или чем ты там определяешь финальные координаты камеры?
0
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
02.08.2013, 10:27  [ТС] #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};
ерунда получается: источник вроде бы должен переместиться относительно меня и начать освещать небольшую область, а вокруг меня будет темно. На самом деле он как бы остается надо мной, но интенсивность света падает...
0
nonedark2008
914 / 653 / 135
Регистрация: 28.07.2012
Сообщений: 1,763
02.08.2013, 11:20 #6
PazDim, как вариант попробуй каждый раз перед установкой позиции источника сбрасывать видовую матрицу в единичную, а после установки - возвращать ее обратно.
0
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
02.08.2013, 11:41  [ТС] #7
Я устанавливал источник только один раз, при запуске приложения... Нужно при каждой отрисовке?
0
nonedark2008
914 / 653 / 135
Регистрация: 28.07.2012
Сообщений: 1,763
02.08.2013, 11:46 #8
PazDim, проведи эксперимент.
0
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
02.08.2013, 15:22  [ТС] #9
Спасибо, попробовал. Двигаю всю систему координат(глобальную) при каждой отрисовке по OZ, устанавливаю источник света и возвращаю систему координат обратно. Наблюдаю интересный эффект: источник света действительно находится вдали от меня, но при этом рисуется относительно меня - перемещается вместе со мной, вращается вокруг меня. Это из-за вот этого -
is affected by the current state of the modelview matrix
? Можно как-то размещать источник в глобальной системе координат? Нет, это конечно тоже неплохо - можно будет не особо парясь фонарик сделать... Но хотелось бы в глобальной системе координат рисовать - так как-то привычнее...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 15:22
Привет! Вот еще темы с ответами:

Не получается разобраться с освещением - OpenGL
Добрый день. Не могу разобраться, что делаю не так. У меня есть массив точек, у каждой точки есть цвет, рисую их с помощью их с помощью...

Движение объектов с освещением - OpenGL
Почему при обьявлении света, сферы перестают вращаться вокруг своей оси? #include "stdafx.h" #include <windows.h> #include...

Управление освещением на ATmega8 - AVR
Приветствую. C микроконтроллерами начал общаться недавно, примерно на уровне нажал на кнопку и включился светодиод, или чтото в терминал...

Автомат управления освещением - Программируемая логика
Есть 4 датчика движения. При поступлении сигнала от любого датчика освещение включается на 2 минуты. При повторном поступлении сигнала...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
02.08.2013, 15:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru