+ All Categories
Home > Documents > Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

Date post: 01-May-2015
Category:
Upload: nicostrato-patti
View: 213 times
Download: 1 times
Share this document with a friend
8
Off-Screen RENDER TO TEXTURE Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi Prodotto matriciale a blocchi n ns s C m x s
Transcript
Page 1: Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

Off-Screen RENDER TO TEXTUREOff-Screen RENDER TO TEXTUREProdotto matriciale a blocchiProdotto matriciale a blocchi

n ns

s

C m x s

Page 2: Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

Prodotto matriciale a blocchiProdotto matriciale a blocchi

Partiziono le matrici A e B con sottomatrici quadrate di ugual dimensione nello specifico con

blocchi di 2x2 elementi

Memorizzo sulla memoria video i singoli sottoblocchi di 2x2 elementi in strutture rgba

blockAblockA blockBblockB

Page 3: Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

i,k k,jx =Ci,j =

blockA.rgba * blockB.rara

blockA.grab * blockB.bgbg

Prodotto matriciale a blocchiProdotto matriciale a blocchi

Prodotto matriciale del generico sottoblocco Ci,j da 2x2 elementi

calcolato con strutture rgba

blockA.rgba

blockB.rgba

i,k

k,j

blockA.rgba * blockB.rara

tex2D (Tex_Ck, gl_FragCoord) +( blockA.rgba * blockB.rara ) +( blockA.grab * blockB.bgbg )

Page 4: Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

Prodotto matriciale a blocchiProdotto matriciale a blocchi

blockAblockA blockBblockB

vec2 texCoordA = vec2( k_parz , gl_FragCoord.y );vec2 texCoordB = vec2( gl_FragCoord.x , k_parz );vec4 blockA = vec4( texture2DRect( textureA , texCoordA ) );vec4 blockB = vec4( texture2DRect( textureB , texCoordB ) );vec4 blockC = vec4( texture2DRect( Tex_Ck , gl_FragCoord) );

XX = colonne = j jYY = righe = i i

Page 5: Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

Prodotto matriciale a blocchiProdotto matriciale a blocchi

uniform sampler2DRect Tex_Ck ;uniform sampler2DRect textureA;uniform sampler2DRect textureB;uniform float k_parz;void main(void) { vec2 texCoordA = vec2( k_parz , gl_FragCoord.y ); vec2 texCoordB = vec2( gl_FragCoord.x , k_parz ); vec4 blockA = vec4( texture2DRect( textureA , texCoordA ) ); vec4 blockB = vec4( texture2DRect( textureB , texCoordB ) ); vec4 blockC = vec4( texture2DRect( Tex_Ck , gl_FragCoord) ); blockC += vec4( (blockA.rgba * blockB.rara) + (blockA.grab * blockB.bgbg) ); gl_FragColor = vec4(blockC);}

OpenGLOpenGL

Shader Multi-Pass

Page 6: Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

Prodotto matriciale a blocchiProdotto matriciale a blocchi

glFramebufferTexture2DEXTglActiveTextureglBindTexture

Off-Screen Render to Texture

Input: Red TextureOutput: Green Texture Input: Green TextureOutput: Red Texture

Tex_Ck

Page 7: Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

VersioneVersionePre-WrappataPre-Wrappata

le texture sono memorizzate per righe di pixel e i pixel in

successione sono memorizzati i canali di colore rgba.

A =

Prodotto matriciale a blocchiProdotto matriciale a blocchi

Page 8: Off-Screen RENDER TO TEXTURE Prodotto matriciale a blocchi nns s C m x s.

Prodotto matriciale a blocchiProdotto matriciale a blocchi

uniform sampler2DRect mat; void main(void) {

vec4 block;int mod_x = int(mod(gl_FragCoord.x, 2));int div_x = int(gl_FragCoord.x / 2);int mult_y = int(gl_FragCoord.y)* 2;float x = 0.5 + div_x;float y = 0.5 + mult_y;vec4 rg_block = texture2DRect( mat, vec2( x , y ) );vec4 ba_block = texture2DRect( mat, vec2( x , y + 1.0 ) );if (mod_x == 0) {

block.rg = rg_block.rg;block.ba = ba_block.rg;

}if (mod_x == 1) {

block.rg = rg_block.ba;block.ba = ba_block.ba;

}gl_FragColor = vec4( block );

}

OpenGLOpenGL

Pre-WrappedPre-Wrapped

ShaderSingle-Pass


Recommended