Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шейдеры в opengl 
:(
    Опции темы
nathmorp
Дата 30.11.2013, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 30.11.2013

Репутация: нет
Всего: нет



Привет всем!!! я новичок в компьютерной графике. Пытаюсь выполнить одно задание с использованием шейдеров. Необходимо создать квадрат из плоских примитивов, также управлять его движением с клавиатуры----с этим проблем небыло, но вот вторая часть вызвала не понимание...нужно чтобы цвет квадрата из примитивов был более светлым к центру, а к краям более темным: необходимо использовать шейдеры.... и тут есть непонимание...как именно использовать...может текстуру или освешение... но при освешении при удалении от источника света отражение на квадрате тоже будет меняться мне этого не нужно... Посоветуйте от чего мне нужно отталкиваться. Буду признательна за любой совет.Нат smile 
PM MAIL   Вверх
Amp
Дата 30.11.2013, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



Передаешь в шейдер координаты центра квадрата и размер его стороны (проще сразу в оконных координатах). Во фрагментном шейдере вычисляешь расстояние от этого центра до позиции текущего фрагмента (distance). Делишь это расстояние на половину размера квадрата, т.е. приводишь к диапазону от 0.0 до 1.0 (не забывая про clamp, чтобы не было > 1.0 в углах). Далее вычисляешь цвет фрагмента на основе двух цветов (центра и грая) с помощью функции mix и пишешь его  в gl_FragColor. Будет в итоге радиальный градиент. Цвета центра и края можешь либо сразу передавать в шейдер, либо считать их на основе gl_Color (делая темнее и светлее).
PM MAIL   Вверх
nathmorp
Дата 1.12.2013, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 30.11.2013

Репутация: нет
Всего: нет



привет, наверно я где-то недопоняла...но пока не получается.  Подскажите пожалуйста на что нужно обратить внимание
Код

const GLchar* FshaderSrc[] = {
     "uniform vec3 center;"
     "uniform float len;"
     "varying vec3 vertex_pos;"
        "float dist;"  
        "void main(){"

        "dist = distance(center,vertex_pos);"
        "float l=len/2.0;"
        "float t =clamp(dist/l, 0.0, 1.0);"
        "gl_FragColor = vec4(mix((1.0,1.0,1.0),(0.0,0.0,0.0), t )); "

        "}" 



PM MAIL   Вверх
Amp
Дата 1.12.2013, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



center имеет смысл делать vec2, так как z координата не нужна, вместо vertex_pos бери gl_FragCoord.xy. Теперь главное - вся свистопляска происходит в оконных координатах, поэтому center и len тоже должны быть в них же. Следует также учесть, что на значения center и len будет влиять modelview-матрица, поэтому для простоты проекцию лучше делать ортографической в координатах окна.
PM MAIL   Вверх
tzirechnoy
Дата 4.12.2013, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Мне, например, неясно -- зачем здесь использовать шэйдэры, учитывая, что в такой постановке задача делается одной текстурой 2x2.
PM MAIL   Вверх
Bitter
Дата 4.12.2013, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 1
Всего: 27



tzirechnoy, ну задание такое, видимо для изучения шейдеров. А как их еще изучить если не писать простые примеры?
PM MAIL ICQ Skype   Вверх
tzirechnoy
Дата 7.12.2013, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Тут два момента. Во-первых, мне неочевидно, что в задаче надо именно на шэйдэрах -- а не топикстартер это придумал, поскольку слово какое-то похожэе на требования.

Во-вторых, изучать их, разумеется, надо на простых примерах, в которых нужны шэйдэры. Ну, вторую текстуру натянуть или например осветить не по Фонгу.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0675 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.