Я могу легко масштабировать текстуру в этом fiddle, но не смог правильно панорамировать.Как скопировать текстуру программно с помощью gl_Position
Вот Фрагмент кода шейдеров:
var vertexShader = createVertexShader([
'attribute vec3 attrVertexPos;',
'attribute vec2 attrTextureCoord;',
'varying highp vec2 vTextureCoord;',
'uniform float zoomFactor;',
'uniform vec2 panCoord;',
'void main(void) {',
'\tgl_Position = vec4(attrVertexPos.xy + panCoord.xy, 0, zoomFactor);',
'\tvTextureCoord = attrTextureCoord;',
'}'
].join('\n'));
//create and compile Fragment Shader
var fragmentShader = createFragmentShader([
'#ifdef GL_FRAGMENT_PRECISION_HIGH',
'precision highp float;',
'#else',
'precision mediump float;',
'#endif',
'varying highp vec2 vTextureCoord;',
'uniform sampler2D uImage;',
'void main(void) {',
'\tgl_FragColor = texture2D(uImage, vTextureCoord);',
'}'
].join('\n'));
код Javascript:
document.getElementById('canvas').onmousedown = function(e) {
if(startX === undefined) {
startX = e.clientX;
startY = e.clientY;
} else {
startX = lastX;
startY = lastY;
}
isMouseDown = true;
};
document.getElementById('canvas').onmouseup = function() {
isMouseDown = false;
previousTranslation[0] = xVal/100*zoomFactor;
previousTranslation[1] = yVal/100*zoomFactor;
};
document.getElementById('canvas').onmouseout = function() {
isMouseDown = false;
};
document.getElementById('canvas').onmousemove = function(e) {
if (isMouseDown) {
xVal = (lastX-startX)/canvas.width*100;
yVal = (startY-lastY)/canvas.height*100;
console.log(xVal/100*2.0 + ',' +yVal/100*2.0);
gl.uniform2fv(pan, new Float32Array([previousTranslation[0] + xVal/100*zoomFactor, previousTranslation[1] + yVal/100*zoomFactor]));
}
};
Я думаю, что есть что-то, что может быть сделано на яваскрипте стороны, как шейдер выглядит отлично. Какие-либо предложения?
Какая ошибка возникает из-за ошибки? – BDL
просто исправил это, была небольшая ошибка, где вместо float я использовал vec4 для u_CosB и u_SinB, но, как и ожидалось, текстура для меня не панорамируется. Какие-либо предложения? – subhfyu546754
Сложно сказать, так как вы не предоставляете никакой информации о том, что такое u_CosB и т. Д. Новый вопрос с MVCE был бы хорошей идеей. – BDL