![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Все сделано
Это сообщение отредактировал(а) Tanyaata - 19.4.2009, 13:36 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 5 Всего: 128 |
теней от чего?
-------------------- There are always someone smarter than you... |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:45 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
Модератор: Сообщение скрыто. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:45 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 5 Всего: 128 |
-------------------- There are always someone smarter than you... |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:44 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:43 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:42 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
![]() Добавлено через 10 минут а можно узнать где вы взяли теорию по написанию алгоритма. что за алгоритм используется и в каких книгах он написан. Программа использует только GDI-это что такое? сама еще начала разбираться с OpenGL. можно и этот код на нем, если Вам не сложно. Мне обе пригодятся. начну разбираться пока с вашим первым вариантом. Еще раз огромное спасибо |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:40 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
мне бы точно узнать книжки. мне по мимо программы надо оформить теорию. и еще можно ли изменить программу, чтобы она рисовала, только тень от каркаса куба.
|
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:39 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:38 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Рисование тени от каркаса мне нужно без OpenGL. Алгоритм написан в книжке Никулина "Компьютерная графика", но там слишком все общее. мне это для диплома нужно. тема у меня Свет в компьютерной графике. Тени, я ничего подобрать не могу. литературы мало, все написано словами, нет нигде четкого алгоритма. причем нужно пользоваться только стандартным интерфейсом, без других технологий.
![]() вот такие у меня проблемы. Добавлено через 56 секунд Везде написано, для построения теней модифицируйте алгоритмы удаления невидимых линий и граней Добавлено через 2 минуты и 58 секунд Программу запустить удалось, работает. Добавлено через 4 минуты и 59 секунд первый ваш алгоритм напоминает описанный алгоритм z-буфера для удаления невидимых граней |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:36 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:36 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Сначала мне надо построение тени отрезка(как на рис. 1.64), так как эта основа построений, потом развить это на каркас:
- построить тень от каркаса куба- на произвольной поверхности(рисуется плоскость и на ней тень), а источник света точечный и должен двигаться. ну а на конец, я поставлю вашу первую программу, то есть построение тени от 3-мерного объекта. Добавлено через 3 минуты и 51 секунду а можно узнать из какого вы города? |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:35 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:35 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Еще я почитала книгу Роджерс - алгоритмические основы комп. графики. там тоже говорится о модификации алгоритмов удаления невидимых граней для теней. там даже пример есть разобранный.
Добавлено через 49 секунд а я не сильно Вас загружаю???? |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:34 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Тени
Если положения наблюдателя и источника света совпадают, то теней не видно, но они появляются, когда наблюдатель перемещается в любую другую точку. Изображение с построенными тенями выглядит гораздо реалистичнее, и, кроме того, тени очень важны для моделирования. Например, особо интересующий нас участок может оказаться невидимым из-за того, что он попадает в тень. В прикладных областях — строительстве, разработке космических аппаратов и др. — тени влияют на расчет падающей солнечной энергии, обогрев и кондиционирование воздуха. Наблюдения показывают, что тень состоит из двух частей: полутени и полной тени. Полная тень — это центральная, темная, резко очерченная часть, а полутень — окружающая ее более светлая часть. В машинной графике обычно рассматриваются точечные источники, создающие только полную тень. Распределенные источники света конечного размера создают как тень, так и полутень: в полной тени свет вообще отсутствует, а полутень освещается частью распределенного источника. Из-за больших вычислительных затрат, как правило, рассматривается только полная тень, образуемая точечным источником света. Сложность и, следовательно, стоимость вычислений зависят и от положения источника. Легче всего, когда источник находится в бесконечности, и тени определяются с помощью ортогонального проецирования. Сложнее, если источник расположен на конечном расстоянии, но вне поля зрения; здесь необходима перспективная проекция. Самый трудный случай, когда источник находится в поле зрения. Тогда надо делить пространство на секторы и искать тени отдельно для каждого сектора. Для того чтобы построить тени, нужно по существу дважды удалить невидимые поверхности: для положения каждого источника и для положения наблюдателя или точки наблюдения, то есть это двухшаговый процесс. Рассмотрим сцену на рис. 28.1. Один источник находится в бесконечности сверху: спереди слева от параллелепипеда. Точка наблюдения лежит спереди: сверху справа от объекта. В данном случае тени образуются двояко: это собственная тень и проекционная. Собственная тень получается тогда, когда сам объект препятствует пропаданию света на некоторые его грани, например на правую грань параллелепипеда. При этом алгоритм построения теней аналогичен алгоритму удаления нелицевых граней: грани, затененные собственной тенью, являются нелицевыми, если точку наблюдения совместить с источником света. ![]() сли один объект препятствует попаданию света на другой, то получается проекционная тень, например тень на горизонтальной плоскости на рис. 28.1b. Чтобы найти такие тени, нужно построить проекции всех нелицевых граней на сцену. Центр проекции находится в источнике света. Точки пересечения проецируемой грани со всеми другими плоскостями образуют многоугольники, которые помечаются как теневые многоугольники и заносятся в структуру данных. Для того чтобы не вносить в нее слишком много многоугольников, можно проецировать контур каждого объекта, а не отдельные грани. После добавления теней к структуре данных, строится вид сцены из заданной точки наблюдения. Отметим, что для создания разных видов не нужно вычислять тени заново, так как они зависят только от положения источника и не зависят от положения наблюдателя. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:34 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
я поняла, для построения теней необходимо 2 этапа:
- удалить нелицевые грани, когда точку наблюдения совмещают с источником света - собственные тени. - для построения проекционных теней необходимо просто построить проекцию всех нелицевых граней. Центр проекции находится в источнике света. для удаления невидимых граней можно использовать Алгоритм Роджерса, он более понятный. чем все остальные Добавлено через 2 минуты и 1 секунду Пример. Рассмотрим параллелепипед на рис. 28.1a. Он задан точками P1(1, 0, 3.5), P2(2, 0, 3.5), P3(2, 0, 5), P4(1, 0, 5), P5(1, 3, 3.5), P6(2, 3, 3.5), P7(2, 3, 5), P8(1, 3, 5). Параллелепипед стоит на плоскости, заданной точками B1(0, 0, 0), B2(6, 0, 0), B3(6, 0, 6), B4(0, 0, 6). Источник света расположен в бесконечности на прямой, проходящей через P2 и P8. Точка наблюдения находится в бесконечности на положительной полуоси z после поворота сцены сначала на -45o вокруг оси y и затем на 35o вокруг оси x. Для того чтобы найти собственные тени, необходимо определить нелицевые грани относительно положения источника. Составим матрицу объема параллелепипеда, где R, L, B, T, H, Y обозначают правую, левую, нижнюю, верхнюю, ближнюю и дальнюю грани, если смотреть на преобразованный объект из бесконечности с положительной полуоси z. Вектор от источника к объекту в однородных координатах: [E] = P2 - P8 = [1, -3, -1.5, 0]. Скалярное произведение вектора направления к источнику и нелицевых плоскостей дает: Знак минус означает, что при наблюдении из положения источника правая, нижняя и дальняя грани являются нелицевыми и, следовательно, находятся в в собственной тени. Существует несколько способов нахождения проекционных теней. Один из них заключается в том, чтобы перенести и повернуть параллелепипед вместе с плоскостью его основания до совмещения вектора направления на источник с осью z. Источник находится в бесконечности, поэтому ортогональная проекция видимых граней на преобразованную плоскостьоснования дает проекционную грань. Значение z получается подстановкой x- и y-координат вершин преобразованного параллелепипеда в уравнение преобразованной плоскости основания. Затем координаты проекционных теней проводятся к первоначальной ориентации. Для совмещения вектора падающего из бесконечности вдоль прямой P8P2 света с осью x необходимо: * перенести P2 в начало координат; * выполнить поворот на 33.69o вокруг оси y, чтобы P4 совпала с осью z; * выполнить поворот на 59.04o вокруг оси y, чтобы P8 совпала с осью z. Объединенное преобразование: Преобразуя плоскость основания и параллелепипед, получим Уравнение npeoбразованной плоскости основания найдем методом Ньюэлла: z = -0.6 y. Подставляя x- и y-координаты вершин преобразованного параллелепипеда в уравнение плоскости, определим z, что дает проекцию тени на плоскость основания: Штрих обозначает вершину проекционной тени. Из положения источника видны только передняя, левая и верхняя грани; они и порождают проекционные тени: передняя: P3P4P8P7 - P3'P4'P8'P7' левая: P1P4P8P5 - P1'P4'P8'P5' верхняя: P7P8P5P6 - P7'P8'P5'P6' Отметим, что ни одна видимая грань не содержит точку P2; поэтому ее проекция P2' не входит в видимые проекционные тени. Обратным преобразованием, то есть [T]-1, построенные проекционные тени переводятся в исходную ориентацию: Проекциями теней на плоскость основания будут S3S4S8S7, S1S4S8S5, S7S8S5S6, S4S8S7, S1S4S8S5, S7S8S5S6, а общим контуром — S1S5S6S7S3S4. Добавлено через 4 минуты и 59 секунд пример - тут пример Добавлено через 8 минут и 10 секунд Спасибо Вам большое, что не оставили меня в беде, что советуете и помогаете. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:33 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Моему руководителю важно, чтобы все было по алгоритму, но с программой можете не торопиться, думаю к апрелю можно и написать. А четкого плана она не дает, говорит все сами пишите.
|
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:33 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
а какой Вы алгоритм используете для удаления невидимых граней
|
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:32 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Читаю-читаю и не понимаю, в чём возникает проблема при рисовании теней? В проекции или в создании "мягких" границ?
Проекция считается относительно легко. Берётся точка источника света, точка на плоскости и нормаль плоскости. И через функцию MakeShadowMatrix() из юнита VectorGeometry проекта GLScene получаем матрицу проекции света. Далее каждый полигон проецируется на плоскость с помощью этой матрицы. Можно даже перемножить матрицу на матрицу проекции на экран и проецировать тень прямо в экранные координаты. С мягкими тенями всё чуть сложнее. Они рисуются обычно либо в несколько проходов, либо для каждого полигона в отдельности. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:30 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Обрезку можно тоже сделать в экраной области. Допустим отрисовать плоскость на которую проецируем тень и использовать её как маску для тени. Клиппинг по границе экрана в большинстве случаев уже сделан, остаётся только обрезать тень по маске плоскости.
На языке Delphi написать проблем вообще нет, если можешь объяснить алгоритм по-русски )). Меня больше интересуют мягкие тени и способы их быстрого рисования. Может есть какие идеи по этому поводу? |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
А в алгоритме не нужны мягкие тени. и еще вопрос, а какое затенение вы используете на самом объекте?
|
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
[/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:29 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
у меня больше времени уходит на придумку алгоритма
Возможно ты что-то большее знаешь об условиях задачи, в первом посте об использовании масок не сказано ни чего. Причём первое бысторе клипирование можно сделать по прямоугольнику маски (отсеить все полигоны за пределами плоскости), а второе клипирование сделать попиксельно уже по маске (или как ты называешь его "трафарет") А насчёт мягких теней идей нет или здесь только проекционные тени обсуждаются? |
||||
|
|||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:29 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Вот пример теней по описанному мной выше алгоритму (присоединён)
Код показать не могу, его слишком много и он большей частью к тени не относится. Проблема кода #1 нет самозатенения кроме как освещённости по фонгу, #2 алгоритм относительно медленный. Присоединённый файл ( Кол-во скачиваний: 17 ) ![]() |
|||
|
||||
Tanyaata |
|
||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
нет, как вы закрашиваете(затеняете) видимые границы куба. у них же тоже цвет меняется в зависимости от источника света? есть плоское затенение, затенение по Фону и затенение по Гуро Добавлено через 26 секунд мягких теней мне не надо. в программе Добавлено через 10 минут и 24 секунды все-таки вы используете OpenGL??? Добавлено через 12 минут и 54 секунды
я не заметила этого, не получается, когда нажимаю и кнопок не увидела |
||||
|
|||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:28 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Я понял, что мы говорим о совершенно разных вещах. Я говорю о тени, а вы говорите об освещении.
Чупакабро, Твою загогулину можно и по фонгу в реальном времени осветить, ничего сильно не ляжет, главное сделать правильный цикл закраски по строкам. Tanyaata, Всё рисуется без всякого ускорения, никакого OpenGL/Direct3D не используется Если нужно просто освещение, то примеров тысячи. Нужно просто нормаль стороны перемножить на направление источника света и взять из результата длину по Z. всё это делается с нуля за 10 минут |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Ой, простите, открыла первую вашу программу. поэтому и ничего не увидела. А можно узнать какие параграфы вы читаете в Никулине, чтобы начать в теории разбираться
Добавлено через 51 секунду
Мы говорим и о тени и об освещении |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:27 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
начала я его читать, да уж, своеобразный человек и автор. Факты так изложил, что обычные вещи кажутся непонятными и сложными
|
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
А куда все пропали?
|
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:27 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:26 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Спасибо за это большое, думаю я разберусь в программе, конечно с вашей помощью
Добавлено через 2 минуты и 45 секунд Что т пока не понятно мне все...все красное и никуда не движется, и нет источника освещения |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:26 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:25 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:25 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
pasha08 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 11.8.2008 Где: Тула Репутация: нет Всего: нет |
шутник
![]() |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
я это не поняла. И на данной стадии рисуется пока квадрат, а не куб А так давайте разбираться. Думаю я пойму все Добавлено через 57 секунд По крайней мере очень надеюсь на это ![]() |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:24 Присоединённый файл ( Кол-во скачиваний: 20 ) ![]() --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
вот поэтому и думала, что квадрат.)))
|
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Смотрел на результат и плакал. Не понимаю почему у тебя всё так сложно? Алгоритм должен быть примерно таким: 1. задаёшь источник и плоскость приёмник (это у тебя сделано) 2. Делаешь матрицу проекции источника на плоскость (примеров полно) 3. здесь два варианта либо проецируешь тень прямо на экран, либо создаёшь буфер тени по размеру плоскости 4. Каждый элемент куба проецируешь с помощи матрицы тени на плоскость приёмник, (а затем, в случае проекции на экран, проецируешь на экран) 5. При отрисовке в буфер лишнее само отвалится, при отрисовке на экран можно сделать маску поверхности приёмника и ограничивать тень по экрану и по маске. Код уж сам допишешь. Думаю, что никакого осбенного клипирования и пересечения делать не нужно. Ну а сам код - каша. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:23 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Откуда вы взяли этот алгоритм? Добавлено через 3 минуты и 47 секунд Чупакабро, а вы не читали другие книги по удалению невидимых граней и проецированию? Может там доступнее написано. Рекомендую Роджерс, Адамс "алгоритмические основы комп. графики". Может эта книга вам поможет. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:22 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Я всё прекрасно понял по поводу твоего алгоритма. Только вот нигде в теме не сказано, что он должен быть именно таким. Более того, я уверен, что этот алгоритм носит чисто теоретический характер и к реалиям жизни отношения не имеет. Все алгоритмы, которые я видел в конечном итоге отталкиваются от конечного разрешения экрана/приёмника тени/детализации буфера тени. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Конечно, не все равно как. мне нужна теория, по которой написан алгоритм, в каких-то книгах. Просто у Никулина все написано по шагам. а у остальных слова, но более понятным языком))))
|
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
по Роджерсу конечно все намного понятнее, может реализовать алгоритм из него(Алгоритм Робертса и алгоритм Z- буфера). Хотя Ваша первая программа тоже тени правильно рисует, может описать алгоритм Z-буфера и алгоритм Робертса. и сравнить Ваш первый алгоритм с Z-буфером(получим модификацию этого алгоритма).И, кстати, алгоритм Z-буфера определяет только невидимые грани, а потом нужно еще и их проекцию строить. А если время останется и Никулина можно доделать. Хотя может это уже и перебор будет...Я конечно дико извиняюсь, что не сказала, что мне не принципиально Никулин, просто я вам его книгу предложила и книгу Роджерса.
Добавлено через 3 минуты Давайте определимся за выходные, что проще сделать.Какой алгоритм легче написать. просто в вашей программе я так понимаю, объект задается треугольниками, а не точками вершин и ребрами Добавлено через 4 минуты и 55 секунд да и в книге роджерса, есть раздел, который называется Тени |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Ну что проще сделать?
Добавлено через 9 минут и 10 секунд почитала, на все ответила)))) |
|||
|
||||
Dimonka2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
На чём только не пишут. 3D Max, Maya и C4D явно на C++ написаны. А Блендер уж тем более на нём.
Это обратная трассировка лучей, а можно делать прямую трассировку: Для каждого экранного пикселя определять какие полигоны на нём расположены и для тех полигонов в точке пересечения рассчитывать их освещённость. Причём если у тебя нет антиалейзинга (а у тебя его нет), то тебе достаточно сделать буфер полигонов для простоты (в каждой точке экрана записывать номер полигона). Но всё равно это не наш метод. ![]() |
||||
|
|||||
Hooch |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 6.3.2006 Где: г. Омск Репутация: нет Всего: нет |
Что-то я не могу разобраться самостоятельно -- может быть, вы поможете?
Работаю с GLScene. Есть произвольный объект -- GLFreeForm, есть точка -- источник света. Есть плоскость -- совпадает с плоскостью XZ (т.е. ее позиция по Y равна нулю и нормаль смотрит вверх). Объект всегда находится полностью над плоскостью. Необходимо просчитать и нарисовать тень. В идеале, конечно -- мягкую. Но пусть для начала будет четкая. Я решил для тени взять GLPolygon из того соображения, что на него можно натянуть какую-нибудь текстуру с полупрозрачностью и таким образом организовать мягкость тени. Я перебираю все вершины GLFreeForm, вычисляю проекцию каждой вершины на плоскость (исходя из положения источника света), добавляю получившееся значение в полигон -- и такая фигня, знаете, получается ![]() Буду очень благодарен, если вы подскажете мне хотя бы чуть-чуть. Может быть, есть другой вариант решения задачи, помимо использования полигона для тени. Тоже буду рад, если подскажете. Но изначальная задача такова, что тень должна рисоваться и при отсутствии аппаратного ускорения на машине (т.е. всякие шейдерные тени отпадают). |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
я не видел программы, но зебра может получаться из-за включенного z-буфера. если это так, то надо выключить его, нарисовать плоскость, нарисовать тень, включить z-буфер
--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |