Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
35 / 35 / 26
Регистрация: 27.05.2012
Сообщений: 204
1

Динамическое создание материалов

22.07.2015, 09:22. Показов 625. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Не буду томить...
Есть функция создающая материал:
Входные данные:
Javascript
1
2
3
4
5
gl.createMaterial("testMaterial",
[
    {type:"diffuse",input:[0.5,0,0.8,1.0],id:0},
    {input:0,alpha:1,type:"out"}
]);
Выходные- список использовавшихся функций(здесь- это только "diffuse") и итоговая функция( "resultColor=diffuse(inputColor)")
Также эта функция возвращает имя материала.
Элемент имеет доступ к материалу.
При создании шейдерной программы, все использовавшиеся функции( исключая повторяющиеся) всех материалов помещаются в код шейдера.
Мне не понятно, как составить итоговый цвет. То есть, как программа должна понять, что за материал использует элемент?
Пример вершинного шейдера:
C
1
2
3
4
5
6
7
8
9
uniform vec4 diffuseColor_Uniform0; 
vec4 MatFuncDiffuse(vec4 diffuseColor)
{return vec4(diffuseColor.rgb*max(dot(nlp,vWorldNormal),0.4),1.0);}
 
void main(){
vec4 resultColor;
resultColor=???
gl_FragColor=vec4(resultColor.rgb,resultColor.a);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2015, 09:22
Ответы с готовыми решениями:

Вредоносное создание материалов
Моя система: Drupal 7 С некоторого времени на сайте стали автоматически появляться материала с...

Создание материалов - не включается редактор
Помогите!Не понимаю раньше материалы создавались без проблем,а сейчас захожу-а области для...

динамическое создание
напишите приложение в котором, при щелчке по форме мышью, появляется панель с заголовком,...

Динамическое создание формы
Всем привет, есть малый вопрос насчет передачи параметров.Пишу уже свои функции. Сейчас пишу...

6
657 / 238 / 46
Регистрация: 24.01.2013
Сообщений: 727
22.07.2015, 10:05 2
http://steps3d.narod.ru/tutori... orial.html
0
35 / 35 / 26
Регистрация: 27.05.2012
Сообщений: 204
22.07.2015, 10:10  [ТС] 3
_Develop, Вопрос заключается не в правильности создания освещения, а в создании алгоритма создания динамического материала(динамически создаваемого)
0
657 / 238 / 46
Регистрация: 24.01.2013
Сообщений: 727
22.07.2015, 10:33 4
Ты сначала определись с понятием материала. Если это только другой цвет амбиент/диффузе/спекуляр или другая текстура то это будет один шейдер с параметрами. А если различается допустим техника освещения, например Фонг или там Кук-Торренс, то это уже два шейдера. Нужный программа должна забиндить перед отрисовкой по информации из материала. Хотя можешь все пихать в один большой шейдер и передавать юниформ для выбора техники, но это будет полная жесть, как по производительности так и по легкости восприятия кода шейдера.
0
35 / 35 / 26
Регистрация: 27.05.2012
Сообщений: 204
22.07.2015, 10:45  [ТС] 5
_Develop, Вот например- есть 10 объектов, у каждого абсолютно разные материалы( например как в Blender-cycles). При отрисовке я должен использовать шейдер этого материала, и получается, мне нужно создовать отдельную шейдерную программу?
0
657 / 238 / 46
Регистрация: 24.01.2013
Сообщений: 727
22.07.2015, 11:03 6
OpenGL никого ни в чем не ограничивает, как сделает программист так и будет.
Есть два подхода, запихнуть все в один шейдер, тогда условие выбора техники нужно проверять в шейдере, и это условие будет проверяться для каждого пикселя всех объектов!!! Это ударит по скорости, потому что пикселей много. Во втором случае создаем несколько отдельных шейдеров и условие выбора техники проверяем в программе только один раз перед отрисовкой объекта. Есть разница, делать проверку тысячу раз или только один раз?
Но тут тоже есть своя негативная сторона, если шейдеров слишком много их придется слишком часто переключать. Это тоже бьет по скорости отрисовки сцены.

Еще есть фактор удобства программирования. Вообщем универсального решения здесь не существует.
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
22.07.2015, 15:16 7
Цитата Сообщение от mazahist Посмотреть сообщение
_Develop, Вот например- есть 10 объектов, у каждого абсолютно разные материалы( например как в Blender-cycles). При отрисовке я должен использовать шейдер этого материала, и получается, мне нужно создовать отдельную шейдерную программу?
В шейдер можно передавать различные параметры от простых значений, до дескрипторов текстур. Программа может быть одна, но с разными параметрами.
0
22.07.2015, 15:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2015, 15:16
Помогаю со студенческими работами здесь

Динамическое создание компонентов
unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Динамическое создание компонентов
Добрый вечер. Вопрос в следующем: Имеется форма на ней некоторая кнопка , при нажатии на...

динамическое создание компонентов
Всем привет, вопрос состоит в следующем, нужно просто создать несколько компонентов Panel и указать...

Динамическое создание элементов
Доброго времени суток, форумчане! Есть такая проблемка: нужно динамически создавать новую форму, в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru