Изучение WebGL и three.js [закрыто]


147

Я новичок и начинаю изучать трехмерную компьютерную графику в веб-браузерах. Меня интересует создание 3D-игр в браузере. Для всех, кто изучил и WebGL, и three.js ...

  1. Требуется ли знание WebGL для использования three.js?

  2. Каковы преимущества использования three.js по сравнению с WebGL?


11
Используйте Three.js. Период. Это именно то, что Уэст говорит ниже. Хотя теоретически это просто, писать WebGL с нуля - это боль. Почти каждое приложение WebGL должно / хотеть делать так много вещей. Эти вещи можно отвлечь от вас. Кроме того, Three.js превратился в замечательную библиотеку. Если вы проверите Google Trends или количество вопросов SO здесь, вы увидите, что он намного опередил конкурентов.
theblang

4
@GeorgeStocker На самом деле, ответы на этот вопрос еще не были основаны главным образом на мнение, но на фактах, ссылок и специальных знаний. Это был ценный пост для сообщества there.js, и часть (2) вопроса, безусловно, приемлема. Как бы вы порекомендовали переформулировать его, чтобы он был приемлемым для вас, то есть без изменения смысла / цели вопроса?
WestLangley

@WestLangley Я не слышал ничего, кроме мнений в ответах; не говоря уже о том, что «Плюсы и минусы использования любой [библиотеки]» слишком широки для Stack Overflow.
Джордж Стокер

2
@GeorgeStocker Ваш ответ сам по себе является мнением, и я категорически не согласен с ним. Как бы вы порекомендовали переформулировать сообщение, чтобы оно было приемлемо для вас?
WestLangley

1
Возможно, вопросы можно было бы перефразировать, чтобы спросить, как изучение WebGL полезно для использования Three.js. Ответ на этот вопрос будет подтвержден фактами, ссылками и опытом.
zz85

Ответы:


209

Поскольку у вас большие амбиции, вам нужно потратить время на изучение основ. Дело не в том, что вы изучаете в первую очередь - вы можете изучать их одновременно, если хотите. (Это то, что я сделал.)

Это означает, что вам необходимо понимать:

  1. Концепции WebGL
  2. Three.js
  3. Основные математические концепции

Three.js. Three.js отлично абстрагируется от многих деталей WebGL, поэтому лично я бы предложил использовать Three.js для вашего проекта. Но помните, что Three.js находится в альфа- версии, и он часто меняется, поэтому вы должны быть к этому готовы. Большинство людей изучают Three.js, изучая примеры. Избегайте устаревших книг и учебных пособий и избегайте примеров из сети, которые ссылаются на старые версии библиотеки.

WebGL. Если вы используете Three.js, вам не нужно знать, как программировать на WebGL, вам просто нужно понимать концепции WebGL. Это означает, что вам просто нужно уметь читать чужой код WebGL и понимать, что вы читаете. Это намного проще, чем можно было бы ожидать, чтобы самому написать программу WebGL с нуля. Вы можете достаточно хорошо изучить концепции WebGL, используя любое из учебных пособий в сети, например учебное пособие для новичков на WebGLFundamentals.org и Learning WebGL .

Математика. Опять же, вам, по крайней мере, нужно понимать концепции. Три хороших книги:

  1. Учебник по 3D-математике для разработки графики и игр от Флетчера Данна и Яна Парберри

  2. Основы математики для игр и интерактивных приложений: Руководство программиста Джеймса М. Ван Верта и Ларса М. Бишопа

  3. Математика для программирования 3D-игр и компьютерной графики Эрика Ленджела

Надеюсь, это будет вам полезно. Удачи.


Какой лучший сайт, чтобы узнать о концепциях WebGL от начала до конца на простом английском. Или, по крайней мере, всякий раз, когда автор использует какое-то «слово», он / она делает это после того, как однажды описал его, так что опирайтесь на него.
Мухаммад Умер

1
См. Ссылку на учебник по изучению WebGL в теле сообщения.
WestLangley

23

Есть очень хороший онлайн-курс - Интерактивная 3D-графика по адресу https://www.udacity.com/course/cs291 на THREE.js. Этот курс включает также задания для получения практического опыта. Он охватывает все основные концепции Three.js и компьютерной графики.


15

Мои личные мысли следующие:

  • Если у вас достаточно времени, вы можете изучить и то, и другое, но учтите, что уровень WebGL намного ниже, чем у Three.js.
  • Для первого 3D-проекта эксперты предлагают использовать такую ​​библиотеку, как Three.js, чтобы привыкнуть к терминам и общей 3D-модели.

3
Я согласен с этим. На данный момент, похоже, неплохо было бы иметь и то, и другое в вашем наборе инструментов. Я бы начал с изучения Three.JS, затем сделал несколько шейдеров с GLSL и все время пытался узнать больше о WebGL.
Кори Гросс,

12

Какое бы направление вы ни выбрали, я предлагаю вам изучить / отточить свои навыки линейной алгебры . Затем изучите или отточите свое понимание размеров MVP (проекция вида модели) . Three.JS может абстрагироваться от этого, но я думаю, что важно хорошо понимать эти концепции, прежде чем серьезно относиться к любой 3D-разработке.

Я написал вводную статью о MVP, когда впервые изучал 3D-программирование с помощью OpenGL. Я понял, что до тех пор, пока я не смог объяснить, что это за матрицы преобразования и как они соотносятся с различными измерениями / пространствами, я вообще не знал никакого 3D-программирования, хотя я мог отображать объекты на экране.

Поскольку ваша цель - создавать игры, я думаю, вам будет полезно сначала изучить необработанный WebGL, даже если вы в конечном итоге воспользуетесь фреймворком вроде Three.js, который поможет вам писать код позже.


неработающая ссылка, не могли бы вы исправить? Мне интересно прочитать этот пост.
Cyfrost


10

«WebGL - это 2D API, а не 3D API»

http://webglfundamentals.org/webgl/lessons/webgl-2d-vs-3d-library.html

В этой статье описаны фундаментальные различия между библиотеками WebGL и 3d, такими как three.js.
Это сделало мой выбор между WebGL или Three.js без труда.


Цитата не из основного текста связанной страницы. Однако я частично принимаю аргументы, изложенные на связанной странице. Не о том, чтобы быть 2D API, а о том, чтобы быть API растеризации (который подходит для 2D и 3D графики).
Elias

6

Я когда-то работал с Unity3D, а также с Papervision3D, поэтому хорошо понимал, как работать с трехмерным пространством. Three.js - это способ сделать первый шаг в изучении работы с проектами WebGL. Api очень хорош, он очень мощный, и если вы используете другую 3D-технологию, вы быстро начнете работать.

Я провел много времени с примерами Threejs.org - их множество, и они очень хороши, чтобы вывести вас из игры и двигаться в правильном направлении. Документы достаточно приличные, особенно если вы сравниваете их с другими API-интерфейсами webGL 3D.

Вы также можете рассмотреть возможность получения бесплатной версии Unity3D и бесплатного экспортера collada (который был бесплатным, когда я его получил) из их магазина приложений (Окно> Магазин приложений). Мне было достаточно легко настроить мою сцену в Unity и экспортировать ее в Collada для использования с Three.js.

Кроме того, я разместил этот класс, который я использую с Three.js, под названием neo ( http://rockonflash.com/webGL/three/neo.js ). Просто добавьте его в свой проект, затем вызовите Neo.JackIntoThree (), и он добавит методы / свойства в Object3D для использования в вашем проекте. Такие вещи, как DrawAllAxis (), неоценимы при отладке вашей сцены и т. Д.

Тем не менее, Three.js - отличный способ - он достаточно гибкий, чтобы позволить вам писать свои собственные шейдеры / объекты и т. Д., И достаточно мощный прямо из коробки, чтобы помочь вам в достижении ваших целей.


4

Я взял three.js, но также перешел на GLSL и много экспериментировал с three.js shaderMaterial. Один из способов решения этой проблемы - three.js по-прежнему абстрагирует для вас большую часть материала, но также дает вам очень чистый низкоуровневый доступ ко всем возможностям рендеринга (проекции, анимации).

Таким образом, вы сможете следовать даже чему-то вроде этого замечательного учебника по open-gl . Вам не нужно настраивать матрицы, типизированные массивы, потому что три уже настраивают их для вас, обновляя их при необходимости. А вот шейдер можно написать с нуля - простая цветопередача будет состоять из двух строк GLSL. Существует также подключаемый модуль постобработки для three.js, который настраивает все буферы, полноэкранные квадраты и прочее, необходимое для создания эффектов, но шейдер может быть очень простым для начала.

Поскольку программируемые шейдеры являются сутью современной 3D-графики, я надеюсь, что мой ответ не упускает из виду суть :) Рано или поздно любой, кто это делает, должен хотя бы понимать, что творится под капотом, такова природа зверя. Кроме того, вероятно, важно понимание 4-го измерения в однородном пространстве.

Эта книга хороша для WebGL.


2

Я только немного изучил и то, и другое, и я чувствую, что понимаю основы webgl, я думаю, что введения в webgl будет достаточно, а затем перейти к трем js. Это будет довольно просто, если вы поймете основные концепции WebGL. Полезные ссылки:

  1. Лучшее вступление, которое я прочитал: http://dev.opera.com/articles/view/an-introduction-to-webgl/
  2. Подробные руководства: http://www.johannes-raida.de/tutorials.htm
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.