Esta publicação é uma continuação de uma série de postagens sobre o WebGL. O primeiro começou com os fundamentos e o anterior foi sobre a geometria rotativa.
Escalar é exatamente como fácil como translação.
Multiplicamos a posição pela escala desejada. Aqui estão as mudanças de nossa amostra anterior.
<script id="vertex-shader-2d" type="x-shader/x-vertex">
attribute vec2 a_position;
uniform vec2 u_resolution;
uniform vec2 u_translation;
uniform vec2 u_rotation;
+uniform vec2 u_scale;
void main() {
+ // Scale the position
+ vec2 scaledPosition = a_position * u_scale;
// Rotate the position
vec2 rotatedPosition = vec2(
* scaledPosition.x * u_rotation.y + scaledPosition.y * u_rotation.x,
* scaledPosition.y * u_rotation.y - scaledPosition.x * u_rotation.x);
// Add in the translation.
vec2 position = rotatedPosition + u_translation;
e adicionamos o JavaScript necessário para definir a escala quando desenhamos.
...
+ var scaleLocation = gl.getUniformLocation(program, "u_scale");
...
+ var scale = [1, 1];
...
// Draw the scene.
function drawScene() {
...
// Set the translation.
gl.uniform2fv(translationLocation, translation);
// Set the rotation.
gl.uniform2fv(rotationLocation, rotation);
+ // Set the scale.
+ gl.uniform2fv(scaleLocation, scale);
// Draw the geometry.
var primitiveType = gl.TRIANGLES;
var offset = 0;
var count = 18; // 6 triangles in the 'F', 3 points per triangle
gl.drawArrays(primitiveType, offset, count);
}
E agora temos escala. Arraste os controles deslizantes.
Uma coisa a notar é que a escala por um valor negativo virou nossa geometria.
Espero que essas últimas 3 postagens tenham sido úteis na compreensão translação, rotação e escala. Em seguida, analisaremos o magia que é matriz que combina todos os 3 dos estes em uma forma muito mais simples e muitas vezes mais útil.