2016-10-24 2 views
0

У меня есть две текстуры в three.js, которые я бы хотел сравнить на уровне пикселей. Но я не знаю, как это сделать. Документация Three.js не отвечает на мой вопрос. Действительно, некоторые из классов недокументированы.Как сравнить пиксели в Three.js

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

Редактировать: Мне сказали, что я должен предоставить дополнительную информацию. Вот так.

Одна текстура из образа, который загружается с помощью «LoadTexture»:

 referenceTexture = THREE.ImageUtils.loadTexture('images/tia1.jpg'); //256px*256px image 

ГЭТ другую добавить полигоны на второй сцене, а позже я сделать эту сцену в текстуру:

var bufferScene = new THREE.Scene(); 
var bufferTexture = new THREE.WebGLRenderTarget(window.innerWidth, window.innerHeight, { minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter,format: THREE.RGBAFormat}); 
bufferScene.add(triangle) //This is a bucle in the real code. 
renderer.setSize(256,256); 
requestAnimationFrame(render); 
renderer.render(bufferScene, camera, bufferTexture); 

Заранее спасибо.

+1

Ваш вопрос является слишком общим, чтобы позволить задает вопрос. Это поможет, если у вас есть и минимальный пример кода, что вы пытаетесь сделать. Без имен кода или конкретных API-интерфейсов трудно догадаться, какую часть API-интерфейса Three.js вы спрашиваете. –

ответ

2

Вы можете прикрепить каждую текстуру к цели рендеринга, затем вызвать renderer.readRenderTargetPixels, чтобы получить пиксели для каждой текстуры, а затем сравнить.

ИЛИ

Вы могли бы передать и текстуры в другую цель визуализации с использованием шейдеров, что дифференциалы в 2 текстуры, а затем считывать пиксели из этой цели визуализации с помощью renderer.readRenderTargetPixels

+0

Спасибо. Я думаю, что я собираюсь попробовать первый вариант, потому что шейдеры сложны. Оба подхода одинаково хороши, а второй - быстрее? – WristMan

1

Вы можете нарисовать текстуру на холсте того же размера, что и текстура, и прочитать цвет пикселей из фреймбуфера с помощью gl.readPixels. После этого вы можете сравнить значения в CPU.

Также вы можете выполнять вычитание цветов пикселей в графическом процессоре и визуализацию (а затем readPixels).

+0

Я не могу нарисовать холст, потому что мне нужно показать обе текстуры на экране. – WristMan

Смежные вопросы