Pull to refresh

Comments 24

мне интересно, почему такая отличная и не новая технология настолько невостребованна? есть какие-то серьезные проекты на нем?
Google Maps, рендереры Open Street Maps, FinalMesh.
Сложно сказать, но есть несколько предположений:
  1. Сайты, за редкими исключениями, скорее про интерфейсы, а интерфейсы это про 2D
  2. Довольно большой порог вхождения в технологию
  3. Многие компании до сих пор поддерживают IE8 из-за 0.5% пользователей, чего уж тут говорить про 17%, у которых нет WebGL
Не соглашусь, технология распространяется и интерес пользователей к ней всё время растёт. Сужу по крайней мере по тому количеству людей, которые интересуются движком Blend4Web в этом году по сравнению с тем, что было в прошлом. Просто в отличие от продуктов типа Flash или трёхмерных движков, никто особо не занимается раскруткой бренда WebGL.
Можно добавить сюда популярный 2D-движок pixi.js, который использует WebGL, но скатывается к canvas если что. Таких примеров наверно достаточно ещё.
Потому что JS. Даже не js в мир браузеров. Там отвратительная поддержка стандарта настолько надёжно чтобы один и тот же код с вызовами апи работал одинаково. Потому что до сих пор ни одно демо которое я видел не работает и на компе в разных браузерах и на мобиле.
WebGL до сих пор не совсем стабилен и часто крешиться. Да и хорошо обоснованная разработка на нем только год как актальна — с выходом новых версий iOS и IE.
К чему этот странный абзац?
Если вы думаете, что WebGL рисует 3D, вы ошибаетесь. WebGL ничего не знает о 3D, это скорее низкоуровневый 2D API, и всё что он умеет делать, это рисовать треугольники. Но он умеет рисовать их очень много и очень быстро.
Вы же, например, сами используете ниже векторы из трёх компонент. Я к тому, что API предполагает 3D.
Там по умолчанию 4D вектора — (x,y,z,w). Но на выходе из вершинного шейдера данные уже в 2D координатах + не совсем с ними связанный(сжатый) Z. Фактически 2D.
При этом в шейдер можно передавать что угодно — 1D, 2D, 3D, 20D. Главное что бы он такие данные переварил.
Но на выходе из вершинного шейдера данные уже в 2D координатах + не совсем с ними связанный(сжатый) Z. Фактически 2D.
Этот этап в графическом pipeline называется растеризация, он очевидно нужен чтобы вывести картинку на двухмерный экран монитора, но до этого-то происходили операции вполне себе в трёхмерном пространстве.

По вашей логике OpenGL тоже 2D API? Для меня «низкоуровневый 2D API» это обращение к пикселям на экране, а OpenGL (WebGL) уровнем выше и позволяет работать с трёхмерными объектами. Так что я придерживаюсь википедии:
Open Graphics Library (OpenGL) is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics.
WebGL (Web Graphics Library) is a JavaScript API for rendering interactive 3D computer graphics and 2D graphics within any compatible web browser without the use of plug-ins
Делить на 2D и 3D можно было старый OpenGL, который с fixed pipeline. Сейчас это понятие достаточно эфемерно.
VS — программа для каждого элемента данных переданных в конвейер. PS — программа для каждого пикселя блока собранного из каких-то элементов по конвейеру выше.

Двуногое животное без перьев, а не 3D API для рендеринга. На нем и физику считают, в крайнем случае партиклы…

Если вы думаете, что WebGL рисует 3D, вы ошибаетесь. WebGL ничего не знает о 3D, это скорее низкоуровневый 2D API, и всё что он умеет делать, это рисовать треугольники. Но он умеет рисовать их очень много и очень быстро.

да неужто? а как же three.js или playcanv.as? они наверное сами 3д дорисовывают, от нечего делать)
Нужна линия? Без проблем, всего лишь несколько последовательно соединенных треугольников.


Вот как раз линии растеризуются не с помощью треугольников. И точки тоже, для этого есть режимы GL_LINES и GL_POINTS.
В WebGL(и GL ES) с нормальной растеризицией некоторых базовых примитивов есть проблемы. Приходятся доставать из шкафа бубен.
У меня что-то с GL_LINES никогда проблем не было (ну кроме как толщина не везде работает). А вот GL_POINTS да, зачастую не работают.
Да вобщем-то GL_LINES и GL_POINTS не особо то и нужны, разве что для дебага.
Основные претензии не к самому GL_LINE, но к качеству картинки и возможных настройках.
насколько я знаю в gl есть ограничение на толщину линии. причем везде разное)
UFO just landed and posted this here
При вызове фрагментого шейдера для конкретной точки, значения varying переменных линейно интерполируются между вершинами треугольника, которому принадлежит данная точка.
На мой взгляд, вы тут немного вводите в заблуждение читателей. В вашем конкретном примере с плоским треугольником — да, так и есть, линейно. Но в общем случае, они интерполируются не линейно, даже в вашем следующем примере с кубиком, там уже нету линейной интерполяции.

Большинство руководств или статей перепрыгивают сразу на использование какой-нибудь библиотеки.
Если цель не поиграться, а сделать продукт, то это весьма правильное решение.

Если вы думаете, что WebGL рисует 3D, вы ошибаетесь. WebGL ничего не знает о 3D, это скорее низкоуровневый 2D API, и всё что он умеет делать, это рисовать треугольники.
Посыл правильный, но вы немного перегнули палку :).

Как по мне, если интерес представляет именно работа с графическим АПИ, то WebGL в принципе тот-же OpenGL ES 2.0, и является урезанной десктопной версией. Рассматривать WebGL как самостоятельную сущность, о которой нет документации и статей, это перегиб. Они просто не нужны, так как есть огромное число разных туториалов по OpenGL ES и OpenGL 4.*.

В контексте Web'а, как по мне интереснее рассмотреть немного более практические примеры с использованием графических библиотек. Ведь, писать все с нуля, не имеет смысла. Точно так же как никто не пишет игры на чистом OpenGL, так же и WebGL не для этого.

Статья хорошая, для людей, интересующихся этой темой, думаю создаст правильное представление о WebGL.
Спасибо за замечания!

Изучение и работа с WebGL действительно сильно облегчается за счёт большого количества документации и примеров к OpenGL.

В контексте Web'а, как по мне интереснее рассмотреть немного более практические примеры с использованием графических библиотек. Ведь, писать все с нуля, не имеет смысла. Точно так же как никто не пишет игры на чистом OpenGL, так же и WebGL не для этого.
Использование готовых решений сильно зависит от проекта и требований к нему. Например, мы перешли с библиотеки и работаем с собственной обёрткой над WebGL. Заточенность инструмента под наши задачи дала ряд преимуществ: гибкость, быстродействие, небольшой размер.
Проект не open source, да? Если open source, было бы очень интересно попробовать.
Читаю сейчас книгу Коичи Мацуда и Роджера Ли, кто интересуется, рекомендовал бы для чтения
Sign up to leave a comment.