![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
nathmorp |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 30.11.2013 Репутация: нет Всего: нет |
Привет всем!!! я новичок в компьютерной графике. Пытаюсь выполнить одно задание с использованием шейдеров. Необходимо создать квадрат из плоских примитивов, также управлять его движением с клавиатуры----с этим проблем небыло, но вот вторая часть вызвала не понимание...нужно чтобы цвет квадрата из примитивов был более светлым к центру, а к краям более темным: необходимо использовать шейдеры.... и тут есть непонимание...как именно использовать...может текстуру или освешение... но при освешении при удалении от источника света отражение на квадрате тоже будет меняться мне этого не нужно... Посоветуйте от чего мне нужно отталкиваться. Буду признательна за любой совет.Нат
![]() |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 2 Всего: 17 |
Передаешь в шейдер координаты центра квадрата и размер его стороны (проще сразу в оконных координатах). Во фрагментном шейдере вычисляешь расстояние от этого центра до позиции текущего фрагмента (distance). Делишь это расстояние на половину размера квадрата, т.е. приводишь к диапазону от 0.0 до 1.0 (не забывая про clamp, чтобы не было > 1.0 в углах). Далее вычисляешь цвет фрагмента на основе двух цветов (центра и грая) с помощью функции mix и пишешь его в gl_FragColor. Будет в итоге радиальный градиент. Цвета центра и края можешь либо сразу передавать в шейдер, либо считать их на основе gl_Color (делая темнее и светлее).
|
|||
|
||||
nathmorp |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 30.11.2013 Репутация: нет Всего: нет |
привет, наверно я где-то недопоняла...но пока не получается. Подскажите пожалуйста на что нужно обратить внимание
|
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 2 Всего: 17 |
center имеет смысл делать vec2, так как z координата не нужна, вместо vertex_pos бери gl_FragCoord.xy. Теперь главное - вся свистопляска происходит в оконных координатах, поэтому center и len тоже должны быть в них же. Следует также учесть, что на значения center и len будет влиять modelview-матрица, поэтому для простоты проекцию лучше делать ортографической в координатах окна.
|
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Мне, например, неясно -- зачем здесь использовать шэйдэры, учитывая, что в такой постановке задача делается одной текстурой 2x2.
|
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 1 Всего: 27 |
tzirechnoy, ну задание такое, видимо для изучения шейдеров. А как их еще изучить если не писать простые примеры?
|
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Тут два момента. Во-первых, мне неочевидно, что в задаче надо именно на шэйдэрах -- а не топикстартер это придумал, поскольку слово какое-то похожэе на требования.
Во-вторых, изучать их, разумеется, надо на простых примерах, в которых нужны шэйдэры. Ну, вторую текстуру натянуть или например осветить не по Фонгу. |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |