2014-02-03 3 views
2

Мне нужно получить цвет текстуры изображения на сетке в заданной точке xyz (щелчок мыши + луч). Как я могу достичь этого в THREE.js?Получите цвет пикселя по координатам xyz

Я знаю, что могу использовать gl.readPixels из простого webgl, но это недействительный вариант для меня.

Спасибо!

+0

Вы хотите, чтобы прочитать цвет столкновения тестирования? Существует нет backbuffer, как это было для openGL. Я мог бы помочь вам с проверкой столкновений, но не для чтения цвета из пикселя текстуры. – mat

+0

Тестовый луч пересечения со всеми треугольниками в сцене, и вы получите точку пересечения. Затем вы можете получить барицентрические координаты из этого треугольника и использовать их для поиска интерполированных UVs для вашей точки пересечения. После того, как у вас есть УЛЬТРАФИОЛЕТОВЫЕ УЛЬТРАФИОЛЕТОВЫ, попробуйте текстуру с помощью gl.readPixels. Это вам подходит? –

+0

Вариант использования прост: получите цвет, на который пользователь нажал. Пользователь должен щелкнуть по сетке с изображением в виде текстуры (мирового мира). И поскольку на сцене есть другие вещи (траектории полета), gl.readPixels принесет незыблемые результаты, если вы нажмете путь, а не фактическую страну. –

ответ

2

Итак, я закончил использование отдельного холста, в котором я загружаю текстуру изображения, переведю координаты three.js в холст и прочитал пиксель. Что-то вроде этого:

// point is a THREE.Vector3 
var getColor = function(point, callback) { 
    var img = new Image(); 
    img.src = 'assets/img/myImage.png'; 
    img.onload = function() { 
    // get the xy coords from the point 
    var xyCoords = convertVector3ToXY(point); 
    // create a canvas to manipulate the image 
    var canvas = document.createElement('canvas'); 
    canvas.width = img.width; 
    canvas.height = img.height; 
    canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height); 
    // get the pixel data and callback 
    var pixelData = canvas.getContext('2d').getImageData(x, y, 1, 1).data; 
    callback(pixelData); 
    } 
}; 

Благодаря

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