![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
У меня проблема с освещением в OpenGl, короче так, я задаю источник света:
Потом рисую сферу с помощью gluSphere и плоскость с помощью glBegin(GL_QUADS). Притом сфера освещается нормально, т.е часть её может быть в тени, а чать освещена, всё так как я хотел, но вот с плоскостью проблемы, она всегда либо вся светлая, либо вся в тени. Как сделать так чтобы источник света освещал плоскость так же правильно как и сферу ? -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Mikel |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 882 Регистрация: 30.3.2002 Где: Саратов Репутация: нет Всего: 2 |
А в OpenGL такого нету.
![]() Попробуй библиотеку glScene(может есть для C++) -------------------- ...so remember, it's better to burn out than to fade away |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Есть, просто надо сначала рисовать объект, а потом свет
![]() -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Mikel |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 882 Регистрация: 30.3.2002 Где: Саратов Репутация: нет Всего: 2 |
У меня даже в книге написано, что нету
![]() ![]() -------------------- ...so remember, it's better to burn out than to fade away |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Это есть в стандартном OpenGL, просто сначала надо рисовать объекты,а потом свет с помощью glLight и всё получается ![]() А можно ещё разбить плоскость на треугольники, тогда освещение просто абалденное ![]() -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Mikel |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 882 Регистрация: 30.3.2002 Где: Саратов Репутация: нет Всего: 2 |
OK, попробую.
![]() -------------------- ...so remember, it's better to burn out than to fade away |
|||
|
||||
Art926 |
|
|||
Unregistered |
Да всё гораздо проще!
Просто алгоритм освещения в OpenGL расчитывает освещенность ТОЛЬКО В ВЕРШИНАХ многоугольниуков, притом не через сам угол (между нормалью и лучом), а через скалярное произведение векторов (Cos). Поэтому если ты нарисуешь достаточно большой многоугольник и слишком близко к его середине расположишь свет, то он вообще будет черным! (ведь каждая из вершин будет очень далеко от источника) Способы решения проблемы: 1) Дробить многоугольник - самый немудренный. 2) Вывести и реализовать свой алгоритм освещения (тяжко, но развивает! как у тебя с аналитической геометрией?) 3) Воспользоваться Direct3D - по моему в нем есть альтернативы. |
|||
|
||||
kuzia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 29.1.2004 Репутация: нет Всего: нет |
треогональный способ освещения!
|
|||
|
||||
Sat |
|
|||
Unregistered |
Помогите, люди добрые!
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); GLfloat coords[]={0,0,0,1}; GLfloat sun[]={1,1,0.8f,1}; GLfloat dark[]={0,0,0,1}; glLightfv(GL_LIGHT0,GL_POSITION,coords); glLightfv(GL_LIGHT0,GL_DIFFUSE,sun); glLightModelfv(GL_LIGHT_MODEL_AMBIENT,dark); ... gluLookAt(50,5,5,50,0,0,0,1,0); glTranslatef(50,0,0); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); glTexCoordPointer(2,GL_DOUBLE,0,geoSphere[2]->texcoords); glNormalPointer(GL_DOUBLE,0,geoSphere[2]->normals); glVertexPointer(3,GL_DOUBLE,0,geoSphere[2]->verts); glDrawArrays(GL_TRIANGLES,0,geoSphere[2]->numtris*3); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); Глюк: Куда бы я ни поместил сферу (здесь 50,0,0) видимое 0.5сферие освещается так, будто источник света находится в точке обзора (50,5,5) задаваемой в gluLookAt. При этом если поменять источник света и сферу (сферу - в 0, а свет - в любое другое место), то сфера освещается корректно. SOS me somebody! А то я уже офигел, пытаясь разобраться в чем тут дело!.. |
|||
|
||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
С освещением всё много проще!
Идёте на www.gametutorials.com, там ищите пример работы с multitexturing'ом. И видите, что на один из полигонов накладывается текстура стены и маска освещения. Таким образом создаётся освещение. Эта методика используется в дум3 и не только. -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
Sat |
|
|||
Unregistered |
Мне все прекрасно известно о MT, но бывают моменты, когда НЕОБХОДИМО использовать стандартное освещение. Мой случай - один из таких. |
|||
|
||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Если слишком много думать, то можно стать идиотом.
Не забывайте об этом, кодеры. -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
Sat |
|
|||
Unregistered |
Блин, эти форумы посещает хоть один дееспособный программист? Или все горазды только сыпать третьесортными остротами и СОВЕРШЕННО БЕСПОЛЕЗНЫМИ советами?
![]() ![]() |
|||
|
||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Я те сказал: Не парься. Почем все любят стандартные функции? Уходить от них надо и делать свои. Берёшь алгоритм отсечения фрустумом, всё что в кадре экрана - анализируешь текстуры, какие надо - увеличваешь яркость. Причём тут не обязательно увеличивать только ту часть текстуры, которую видно, моно всю.
-------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
Sat |
|
|||
Unregistered |
Аррр! Я же сказал, что мне НЕОБХОДИМО использовать стандартный метод! Мне ничего не стоит провести все вышеописанные операции вручную, но в моей проге это не только не даст прироста скорости, а наоборот, снизит производительность.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |