#javascript #three.js #webgl
#javascript #three.js #webgl
Вопрос:
У меня есть две текстуры в three.js это я хотел бы сравнить на уровне пикселей. Но я понятия не имею, как это сделать. Three.js документация не отвечает на мой вопрос. Действительно, некоторые классы недокументированы.
Чтобы быть кратким, я хочу вычислить, насколько отличаются два изображения (для вычисления значения пригодности в моем генетическом алгоритме).
Редактировать: мне сказали, что я должен предоставить больше информации. Поехали.
Одна текстура взята из изображения, которое загружается с помощью «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 трудно угадать, какая часть Three.js API, о котором вы спрашиваете.
Ответ №1:
Вы можете прикрепить каждую текстуру к цели рендеринга, затем вызвать renderer.readRenderTargetPixels
, чтобы получить пиксели для каждой текстуры, а затем сравнить.
или
Вы могли бы отобразить обе текстуры для другой цели рендеринга, используя шейдер, который различает две текстуры, а затем считывать пиксели из этой цели рендеринга, используя renderer.readRenderTargetPixels
Комментарии:
1. Спасибо. Я думаю, что попробую первый вариант, потому что шейдеры сложны. Оба подхода одинаково хороши или второй будет быстрее?
Ответ №2:
Вы могли бы нарисовать текстуру на холсте того же размера, что и текстура, и прочитать цвет пикселей из фреймбуфера с помощью gl.readPixels. После этого вы могли бы сравнивать значения в CPU.
Также вы могли бы выполнить вычитание цветов пикселей на графическом процессоре и отобразить разницу (а затем прочитать пиксели).
Комментарии:
1. Я не могу нарисовать холст, потому что мне нужно показать обе текстуры на экране.