У меня есть фрагмент шейдеров, как так:Как отредактировать значения RGBA текстуры в WebGL?
<script id="shader-fs" type="x-shader/x-fragment">
precision mediump float;
uniform sampler2D uSampler;
varying vec2 vTextureCoord;
void main() {
gl_FragColor = texture2D(uSampler, vTextureCoord).rgba;
}
</script>
и здесь есть код JavaScript, который обрабатывает текстуры:
function handleLoadedTexture(texture) {
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.bindTexture(gl.TEXTURE_2D, null);
}
function initTexture(source) {
var newTexture = gl.createTexture();
newTexture.image = new Image();
objectTextures.push(newTexture);
var index = objectTextures.length - 1;
objectTextures[objectTextures.length - 1].image.onload = function() {
handleLoadedTexture(objectTextures[index])
}
objectTextures[objectTextures.length - 1].image.src = source;
}
параметр «источник» является только URL к изображению, «например. png "может быть источником. Я пытаюсь изменить цвет текстуры на другой. Можно ли просто переназначить каждый пиксель в текстуре до определенного цвета? Можно ли также оттенять текстуру? Могу ли я добавить еще один параметр в функцию initTexture, называемый «цвет», и это будет массив из 4 значений (RGBA) или 3, если альфа-канал невозможно отредактировать, а затем использовать этот массив каким-то образом, чтобы изменить цвет текстуры до одного сплошного цвета или оттенка?
objectTextures - это просто массив, содержащий все созданные WebGLTextures.
Просто для тестирования я устанавливаю yourColor и colorLocation как глобальные переменные. Назначенный colorLocation, как вы показали в разделе initShader, где программа выполняет другие getAttributeLocation и getUniformLocation, изменила программу на ее исправление и установила в функции drawScene функцию vertexAttrib4v (colorLocation, yourColor). Я получаю «WebGL: INVALID_VALUE: vertexAttrib4fv: индекс за пределами диапазона». Что я делаю не так? – Mythenatical
Nevermind, я установил colorLocation, чтобы атрибут «aColors» не «aColor», и он работает! Спасибо! – Mythenatical
рад, что я могу помочь вам, @Mythenatical – Winchestro