Bu fiddle numaralı belgede kolayca dokuyu yakınlaştırabilirim, ancak düzgün bir şekilde taranamıyor.Bir doku programatik olarak gl_Position kullanarak nasıl kaydırılır
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 kodu:
İşte shader için kod pasajı vardocument.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]));
}
};
Ben gölgelendirici iyi görünüyor olarak javascript tarafında yapılabilir bir şey olduğunu düşünüyorum. Baska öneri?
Hangi hata var? – BDL
sadece düzeltildi, float yerine küçük bir hataydı, u_CosB ve u_SinB için vec4 kullandım, ancak beklendiği gibi, doku benim için kaydırma yapmıyor. Baska öneri? – subhfyu546754
U_CosB vb. Hakkında herhangi bir bilgi vermediğiniz için söylemek zor. MVCE ile yeni bir soru iyi bir fikir olurdu. – BDL