Создание анаглифа 3D изображения на холсте HTML5 - PullRequest
7 голосов
/ 27 ноября 2010

Я создаю простой 3D-движок с использованием объекта HTML5 canvas.Это работает хорошо, но я хотел бы реализовать обработку красного / синего анаглифа, чтобы действительно можно было видеть 3D с помощью красных / синих очков.В данный момент у меня 3D-объект визуализируется дважды, во второй раз с положения камеры рядом с первым положением камеры.

Проблема, с которой я сталкиваюсь, состоит в том, как объединить два объекта, чтобы получить правильныйцвет для анаглифа.Теперь я использую globalAlpha = 0.5 и отрисовываю первое красным, а второе синим.Это, однако, не полностью работает, так как пиксели, на которые воздействует только красный объект, должны оставаться красными, но они становятся цветом между черным и красным, поскольку мой фоновый цвет черный.

При взгляде на 3D-анаглифСоздавая приложение, я заметил, что красный и синий пиксели вместе рассчитываются следующим образом:

 255  0  0
 0    0  255
------------- +
 255  0  255

Однако на холсте HTML5 все пиксели рассчитываются с использованием альфы, поэтому, если цвет фона черный, красный пиксель становится темно-краснымпока он должен оставаться красным.По сути, мне нужно, чтобы пиксели красного объекта влияли только на красный компонент каждого пикселя, а пиксели синего объекта влияли только на синий компонент каждого пикселя.

Я мог бы работать на основе каждого пикселяно возможно ли это, а не снижение производительности?Я рендеринг 20 кадров в секунду, поэтому я думаю, что это не будет иметь никакого практического применения.Любые предложения будут оценены.

Я надеюсь, что это изображение проясняет все:

Example

1 Ответ

5 голосов
/ 27 ноября 2010

Существует свойство globalCompositeOperation контекста холста, которое можно изменить, чтобы повлиять на это поведение. В частности, установка его на «светлее» добавит цвета любых операций рисования к исходному изображению. Это также будет уважать альфа-значение. Если это сложная сцена, вам, возможно, придется нарисовать сцену дважды, каждый на скрытом холсте, а затем скопировать их каждый в видимый холст с составной операцией, установленной на «светлее».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...