2013-01-22 48 views
1

將紋理映射到WebGL中的HTML畫布的最簡單方法是什麼?我可以看到設置了正交投影並渲染了紋理四邊形,但有沒有更清晰的方法?WebGL將紋理映射到畫布

回答

1

什麼意思是「紋理紋理到HTML5畫布」?你的意思是畫一個紋理1x1像素的畫布?不需要正投影。最簡單的事情就是製作一個四邊形和四邊形的單元,或者在像素座標系中繪製一個四邊形並繪製。

這裏的像素座標四着色器

attribute vec2 a_position; 
attribute vec2 a_texCoord; 

uniform vec2 u_resolution; 

varying vec2 v_texCoord; 

void main() { 
    // convert the rectangle from pixels to 0.0 to 1.0 
    vec2 zeroToOne = a_position/u_resolution; 

    // convert from 0->1 to 0->2 
    vec2 zeroToTwo = zeroToOne * 2.0; 

    // convert from 0->2 to -1->+1 (clipspace) 
    vec2 clipSpace = zeroToTwo - 1.0; 

    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); 

    v_texCoord = a_texCoord; 
} 

這個例子就是從這裏開始。 (http://games.greggman.com/game/webgl-image-processing/)

規模的單元的四版本偏移將是

attribute vec2 a_position; 
attribute vec2 a_texCoord; 

uniform vec2 u_offset; 
uniform vec2 u_scale; 

varying vec2 v_texCoord; 

void main() { 
    gl_Position = vec4(a_position * u_scale + u_offset, 0, 1); 

    v_texCoord = a_texCoord; 
} 

最後,在任一情況下可以簡化代碼通過使用3x3矩陣運算

attribute vec2 a_position; 

uniform mat3 u_matrix; 

void main() { 
    // Multiply the position by the matrix. 
    gl_Position = vec4((u_matrix * vec3(a_position, 1)).xy, 0, 1); 
} 

然後只設置矩陣。您可以使用單位四元組(添加比例矩陣來放大像素)或使用像素。

[ 
    2/canvasWidth, 0, 0, 
    0, -2/canvasHeight, 0, 
    -1, 1, 1 
] 

矩陣將從像素clipspace轉換。矩陣

[ 
    imageWidth, 0, 0, 
    0, imageHeight, 0, 
    0, 0, 1 
] 

將從單位四元組轉換爲圖像大小。

走進所有的矩陣數學似乎有太多的這個答案,但如果你有興趣,你可以在這裏找到它見http://games.greggman.com/game/webgl-2d-matrices/

+0

,豈不是更好地使一個大屏幕四核再複製一個精靈紋理在xy屏幕位置的四邊形?我不知道答案,只是好奇:) – d13