Three.js: определяемая пользователем плоскость отсечения

Созданный на 13 окт. 2011  ·  5Комментарии  ·  Источник: mrdoob/three.js

Я хочу использовать определяемые пользователем плоскости отсечения.
В openGL я бы использовал:

glClipPlane(GL_CLIP_PLANE0, planeEq);
glEnable(GL_CLIP_PLANE0);

Как я могу сделать то же самое с webGL?

Question

Самый полезный комментарий

Привет, большое спасибо, ребята !!

Ваши предложения заставили меня пересмотреть проблему, и я заметил, что не было «общего» запаздывания, а только мерцание при изменении плоскости ближнего отсечения (положение зеркала по сравнению с положением зеркальной камеры).

Итак, вы почти добрались до

Результат: больше никаких задержек: http://jsfiddle.net/slayvin/PT32b/2/ : smiley:

Возможно, мы могли бы абстрагировать это в отдельный объект.

Да, я думал об этом. Было бы здорово иметь new THREE.mirror() который все обрабатывает. Попробую что-нибудь закодировать ...

Все 5 Комментарий

Вы должны иметь возможность получить контекст WebGL с помощью renderer.context .
Оттуда все зависит от вас и спецификации WebGL :)

Недавно я столкнулся с той же проблемой при реализации отражающих плоских поверхностей (также известных как «зеркала»: smile :) в three.js.
Насколько мне известно, вы не можете иметь определяемые пользователем плоскости отсечения с помощью WebGL, по крайней мере, с помощью описанного вами «простого» метода openGL.
Уловка состоит в том, чтобы использовать метод «Oblique View Frustum», который объясняется в этой статье: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
Цель этого метода - заменить плоскость ближнего отсека усеченного зеркала камеры плоскостью, определяемой отражающей поверхностью.
Есть даже исходный код (правда, на C ++): http://www.terathon.com/code/oblique.html

Я успешно перенес этот метод в three.js, и вот пример сцены, чтобы показать это вживую: http://jsfiddle.net/slayvin/PT32b/

Единственная оставшаяся проблема заключается в том, что renderTarget визуализируется за фрейм, и я не знаю почему! Это вызывает некоторое мерцание, когда камера движется слишком быстро и когда зеркало проходит сквозь другие объекты.

Есть идеи, как это исправить? Нужно ли мне реализовать своего рода метод мультибуферизации, или это просто потому, что я не обновляю матрицу камеры после изменения усеченной пирамиды? Если да, то как я могу это сделать?

Ммм ... Я попытался установить scene.autoUpdate на false и вызвать scene.updateMatrixWorld() вручную, чтобы убедиться, что все рендереры имеют одинаковый материал, но, похоже, ничего не решает ... Ни один вызов mirror.updateMatrix() перед извлечением вращения оттуда ...

Хотя довольно круто! Возможно, мы могли бы абстрагировать это в отдельный объект.

Сладкий.

Я также попытался убедиться, что соответствующие матрицы актуальны. Если вас беспокоят задержки, вам необходимо обновить их, прежде чем использовать. К сожалению, при быстром масштабировании это не имело значения ...

mirror.updateMatrixWorld();

camera.updateMatrixWorld();

camera.matrixWorldInverse.getInverse( camera.matrixWorld );

Привет, большое спасибо, ребята !!

Ваши предложения заставили меня пересмотреть проблему, и я заметил, что не было «общего» запаздывания, а только мерцание при изменении плоскости ближнего отсечения (положение зеркала по сравнению с положением зеркальной камеры).

Итак, вы почти добрались до

Результат: больше никаких задержек: http://jsfiddle.net/slayvin/PT32b/2/ : smiley:

Возможно, мы могли бы абстрагировать это в отдельный объект.

Да, я думал об этом. Было бы здорово иметь new THREE.mirror() который все обрабатывает. Попробую что-нибудь закодировать ...

Была ли эта страница полезной?
0 / 5 - 0 рейтинги