Урок 175. OpenGL. Текстуры.

Обсуждение уроков
Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 175. OpenGL. Текстуры.

Сообщение damager82 » 01 мар 2016, 06:00

В этом уроке:
- используем текстуры


Click here to read this article!
Последний раз редактировалось damager82 06 июн 2017, 23:11, всего редактировалось 5 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Kate
Сообщения: 1
Зарегистрирован: 04 мар 2016, 18:55

Re: Урок 175. OpenGL. Текстуры.

Сообщение Kate » 04 мар 2016, 18:59

"В varying переменную v_Texture приходят интерполированные координаты текстуры из вершинного шейдера."

А почему не vec2, а varying?
Это опечатка?

Draz1w
Сообщения: 20
Зарегистрирован: 10 окт 2015, 17:07

Re: Урок 175. OpenGL. Текстуры.

Сообщение Draz1w » 07 мар 2016, 20:00

Kate писал(а): А почему не vec2, а varying?
Это опечатка?
нет не опечатка,
смотрите объявление
переменная объявлена как
varying vec2 v_Texture;

в данном контексте важнее, именно то что она varying - т.е. переменная которая передается из вершинного шейдера во фрагментный с интерполяцией значений.

danek130995
Сообщения: 42
Зарегистрирован: 25 янв 2015, 18:57

Re: Урок 175. OpenGL. Текстуры.

Сообщение danek130995 » 08 мар 2016, 22:16

Спасибо за отличный урок!

Аватара пользователя
eugenk
Сообщения: 16
Зарегистрирован: 18 дек 2015, 16:05

Re: Урок 175. OpenGL. Текстуры.

Сообщение eugenk » 11 мар 2016, 12:57

Народ, прошу прощения за оффтопик, но у меня вопрос, на который пока не нашел толкового ответа. Как сделать промо-ролик приложения, для гуглплея ? У меня игрушка на OpenGL. Поглядел как народ выставляется на гуглплее, почти у всех есть промо-ролики. Как это делается ? Что, каждый фрейм сохраняют экран на карточку, а потом монтируют ? Просветите на этот счет у кого есть такой опыт.

А так респект. Отличные уроки. Читал до этого книжку Харди и Филипса. Здесь по сравнению с книжкой значительно меньше воды и значительно больше внимания уделено не мишуре, а действительно серьёзным и значимым темам.

sergant128
Сообщения: 2
Зарегистрирован: 16 мар 2016, 22:32

Re: Урок 175. OpenGL. Текстуры.

Сообщение sergant128 » 16 мар 2016, 22:36

Приветствую!
Спасибо за уроки, познавательно.
Насколько сильно отличается OpenGL ES 1.0 (на котором написаны примеры) от OpenGL ES 2.0?
ES 1.0 достаточно старый API, было бы интересно посмотреть примеры на 2.0

Draz1w
Сообщения: 20
Зарегистрирован: 10 окт 2015, 17:07

Re: Урок 175. OpenGL. Текстуры.

Сообщение Draz1w » 18 мар 2016, 21:55

sergant128 писал(а):Приветствую!
Спасибо за уроки, познавательно.
Насколько сильно отличается OpenGL ES 1.0 (на котором написаны примеры) от OpenGL ES 2.0?
ES 1.0 достаточно старый API, было бы интересно посмотреть примеры на 2.0
Здесь Уроки по ES 2.0.
1.0 от 2.0 отличаются как небо и земля. В 1.0 не было шейдеров и все программы были зашиты в спецификацию openGL. Можно было просто передавать вершины, нормали и текстуры и делать с ними какие-то фиксированные действия.
С шедерами - полная свобода, трансформируй изменяй на лету как хочешь все массивы данных, можно сделать множество разных эффектов.

Аватара пользователя
eugenk
Сообщения: 16
Зарегистрирован: 18 дек 2015, 16:05

Re: Урок 175. OpenGL. Текстуры.

Сообщение eugenk » 19 мар 2016, 04:54

sergant128 писал(а): Насколько сильно отличается OpenGL ES 1.0 (на котором написаны примеры) от OpenGL ES 2.0?
ES 1.0 достаточно старый API, было бы интересно посмотреть примеры на 2.0
С OpenGL ES 1 не советую даже начинать. Эта библиотека во-первых устаревшая, сейчас Вы не найдете телефона, поддерживающего только её. Во-вторых, концептуально она гораздо сложнее OpenGL ES 2. Если в ES2 Вам необходимо изучить только шейдеры и их окружение (компиляцию, выбор, передачу через юниформы и атрибуты и т.п.), то ES1 это довольно бессистемное нагромождение разного рода инструментов, которые ещё нужно сообразить как применять. Если Вы хотите сделать что-то совсем простое, ES1 будет конечно проще. Но если хотите действительно интересный и качественный рендеринг с разного рода финтифлюшками, замучаетесь думать как это сделать. А ES2 предлагает для этого регулярный и рациональный путь - шейдеры. Единственно не увлекайтесь и помните, что особо извращенные шейдеры это тоже нагрузка на систему. Что сказывается и на фреймрейте и на времени жизни батарейки. Так что самое трудное в ES2 это умение находить компромиссы. Впрочем на более продвинутом уровне "цифрового секса" Вам тоже хватит. Использование множества текстур разного назначения, многопроходные рендеринги и т.п. Однако чтобы НАЧАТЬ и ПОНЯТЬ, усилий потребуется гораздо меньше, чем для ES1.

Если хотите глянуть более продвинутые примеры ES2 на русском языке, сходите сюда http://andmonahov.blogspot.ru/2012/10/o ... -20-1.html
Вот еще очень интересный цикл статей, мужик пишет свою упрощенную модель OpenGL (с шейдерами) на С++ https://habrahabr.ru/post/248723/ Если что-то в OpenGL не понимаете, то там всё буквально разжевано и в рот положено. Причем в исходниках на С++. Очень рекомендую.

Draz1w
Сообщения: 20
Зарегистрирован: 10 окт 2015, 17:07

Re: Урок 175. OpenGL. Текстуры.

Сообщение Draz1w » 22 мар 2016, 10:24

eugenk писал(а):
sergant128 писал(а): Если хотите глянуть более продвинутые примеры ES2 на русском языке, сходите сюда http://andmonahov.blogspot.ru/2012/10/o ... -20-1.html
Там че-то совсем мало и скучно.
Вот если именно на русском и про openGL то есть 2 классные книги.
OpenGL ES 3.0. Руководство разработчика. - тут вообще все что касается стандарта, все команды, подробно разжевано какие-там переменные что делают + шейдеры normalMapping, Enverovement, и в таком духе с примерами.
http://www.ozon.ru/context/detail/id/32658792/
И вторая
OpenGL 4. Язык шейдеров. Книга рецептов.
http://www.ozon.ru/context/detail/id/31377043/
Там собственно по шейдерам, все подробно разобрано. Модели освещения, карты теней, зеркала и прочее.

Вот их прям рекомендую обе... а уроков пока качественных на русском по openGL нет.
Разве что ветка на 4pda. Но там тоже... полезной информации много, но стиль изложения средний.
http://4pda.ru/forum/index.php?showtopic=418429

Аватара пользователя
eugenk
Сообщения: 16
Зарегистрирован: 18 дек 2015, 16:05

Re: Урок 175. OpenGL. Текстуры.

Сообщение eugenk » 23 мар 2016, 14:28

Draz1w писал(а): Там че-то совсем мало и скучно.
Там блог увы по-моему помер :( Блин, ну почему по OpenGL ES на русском ничего нет ! Хоть самому начинай что-то вести. Но как подумаю, что это потребует времени и усилий, желание пропадает. Когда дозрею до мысли сделать свой сайт (хотя он будет в основном не программистский) может и заведу там уголок, посвященный этому делу.
Draz1w писал(а): Вот если именно на русском и про openGL то есть 2 классные книги.
OpenGL ES 3.0. Руководство разработчика. - тут вообще все что касается стандарта, все команды, подробно разжевано какие-там переменные что делают + шейдеры normalMapping, Enverovement, и в таком духе с примерами.
http://www.ozon.ru/context/detail/id/32658792/
И вторая
OpenGL 4. Язык шейдеров. Книга рецептов.
http://www.ozon.ru/context/detail/id/31377043/
Там собственно по шейдерам, все подробно разобрано. Модели освещения, карты теней, зеркала и прочее.
Вот за книжки большое спасибо ! Я что-то в последнее время перестал следить за выходом новых книг. А книжки судя по аннотации и правда шикарные. Вы не в курсе, их можно где-нибудь взять в электронном виде, пусть даже и за деньги ? А то от бумажных книг я чего-то отвык в последнее время.

P.S. Нашел "OpenGL 4. Язык шейдеров. Книга рецептов" на английском на рутрекере. Но там 2013-й год. Не подскажете, оригинал русского издания за какой год ? А то хотелось бы иметь посвежее.

P.P.S. Смотрю по оглавлению, книжка посовременней, чем доступно нам на андроиде. Там например про шейдер тесселяции, доступный только в ES 3.1. Да, сейчас такие аппараты появились, но я пока в своих проектах закладываюсь только на 2.0. Иначе велик риск пролёта мимо рынка. Ладно, надеюсь там и о совместимой технике будет что почитать.

AlwaysDream
Сообщения: 1
Зарегистрирован: 19 авг 2016, 14:45

Re: Урок 175. OpenGL. Текстуры.

Сообщение AlwaysDream » 23 авг 2016, 08:18

Спасибо за прекрасные уроки!
Вопрос:
в методе private void bindData()
Класса OpenGLRenderer
есть строки
// помещаем текстуру в target 2D юнита 0
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);

// юнит текстуры
glUniform1i(uTextureUnitLocation, 0);
Если их убрать, всё прекрасно работает.
Как это объяснить?

Может это связано с тем, что мы эти операции делаем в классе
TextureUtils, который вызываем ранее в
private void prepareData() ?

chego
Сообщения: 3
Зарегистрирован: 18 фев 2017, 04:02

Re: Урок 175. OpenGL. Текстуры.

Сообщение chego » 19 фев 2017, 18:08

бл.., ах.еть, до чего изложено приятно просто пи..ец.
правда читать таким как я тупым по 10 раз приходится.
но когда получается такой прИход , прям по венам.
все получилось спасибо.
Чувааак ты прям мой кумир. (-_-)

walterwest
Сообщения: 4
Зарегистрирован: 13 мар 2014, 06:28

Re: Урок 175. OpenGL. Текстуры.

Сообщение walterwest » 27 мар 2017, 03:47

Спасибо за уроки!

А как загрузить несколько текстур в один шейдер? Концы урока сказано как посмотреть кол-во доступных юнитов, но как использовать эту информацию не понятно.

Попробовал в TextureUtils выбирать разные активные юниты:
if (tex == 0){
glActiveTexture(GL_TEXTURE0);
}
else {
glActiveTexture(GL_TEXTURE1);
}

И в OpenGLRender, в метод bind:

// помещаем текстуру в target 2D юнита 0
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);
glUniform1i(uTextureUnitLocation, 0);

// помещаем текстуру в target 2D юнита 1
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
glUniform1i(uTextureUnitLocation2, 1);

ну и создал uTextureUnitLocation2 и texture2.

Судя по результату шейдер работает но не корректно, может нужно учесть что-то еще?

SevenXP
Сообщения: 113
Зарегистрирован: 21 июл 2013, 18:20

Re: Урок 175. OpenGL. Текстуры.

Сообщение SevenXP » 10 апр 2017, 17:08

Подскажите,
Проработал все уроки. Но столкнулся с 1-ной проблемкой.
У меня есть 2-матрицы. Камера(mViewMatrix), Проекция (frustumM mProjectionMatrix)
Matrix.multiplyMM(mMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
glUniformMatrix4fv(uMatrixLocation, 1, false, mMatrix, 0);

К примеру у меня есть линия
-1,0,-2
1,0,-2
Как узнать, какая у нее длина в пикселях.
У меня есть 2-ва трех угольника. и мне очень надо узнать размер в пикселях, чему он равен ширина и высота.
Хочу создать текстуру под него, что бы текст не скейлился.

Ответить