» Tutorial Effects - Funcion Printing
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Tutorial Effects - Funcion Printing

English | Italian | Mandarin | Japanese

TOC: Of Effects and Shaders
Back: Mr. Wiggle
Next: Vertex Data


Hay variadas posibilidades para alterar la posición de los vértices por medio de funciones matemáticas.

Para los siguientes ejemplos usaremos Grid (EX9.Geometry) como input. Ajusta la resolución cerca de 50x50.

f(x, y) = z

Crear una nueva coordenada z por medio de x e y.
Si usamos el ejemplo the MrWiggle example podemos escribir:

float2 Frequency = 10;
float2 Phase = 0;
float2 Amplitude = 0.01;
 
vs2ps VS(
    float4 PosO  : POSITION,
    float4 TexCd : TEXCOORD0)
{
    //declara la estructura de salida
    vs2ps Out;
 
    //calcula dos ondas
    float2 wave = sin(PosO.xy * Frequency + Phase) * Amplitude;
 
    //ajusta la coordenada z
    PosO.z = wave.x + wave.y;
 
    //transforma la posición
    Out.Pos = mul(PosO, tWVP);
 
    //transforma las coordenadas de textura
    Out.TexCd = mul(TexCd, tTex);
 
    return Out;
}

El patch así :

function patch

f(u, v) = xyz

Otro modo común es calcular una posición completamente nueva a partir de las coordenadas xy de la grilla. Suele llamarse superficie paramétrica aquella cuyos parámetros de entrada xy son llamados uv.

Por ejemplo un cono:

x = v*cos(u)
y = v*sin(u)
z = v

puede ser escrito como función:

float3 Cone(float2 uv)
{
    float u = uv.x;
    float v = uv.y;
 
    float3 newPos;
    newPos.x = v * cos(u);
    newPos.y = v * sin(u);
    newPos.z = v;
 
    return newPos;
}

Podría ser útil escalar u por dos Pi para obtener un ciclo completo en el rango 0 .. 1, así como tener un desplazamiento general y de escala para los parámetros de entrada.. El vertex shader quedaría algo así:

#define twopi 6.28318531
 
float2 Scale = 1;
float2 Offset = 0;
 
float3 Cone(float2 uv)
{
 
     uv *= Scale;
     uv += Offset;
 
    float u = uv.x * twopi;
    float v = uv.y;
 
    float3 newPos;
    newPos.x = v * cos(u);
    newPos.y = v * sin(u);
    newPos.z = v;
 
    return newPos;
}
 
vs2ps VS(
    float4 PosO  : POSITION,
    float4 TexCd : TEXCOORD0)
{
    //declara la estructura de salida
    vs2ps Out;
 
    //ajusta la nueva posición
    PosO.xyz = Cone(PosO.xy);
 
    //transforma la posición
    Out.Pos = mul(PosO, tWVP);
 
    //transforma las coordenadas de textura
    Out.TexCd = mul(TexCd, tTex);
 
    return Out;
}

Y el patch:

cone patch

Next: Vertex Data
Back: Mr. Wiggle
TOC: Of Effects and Shaders

anonymous user login

Shoutbox

~23h ago

joreg: But first: This Friday in Berlin: Join our full day "Getting started with Generative Design Algorithms" workshop https://nodeforum.org/announcements/workshop-getting-started-with-generative-design/

~1d ago

joreg: In #Linz for #ArsElectronica? Join us for a free 2 days #vvvv workshop sponsored by businesses/responsive-spaces-gmbh Apply here: 2-day-gamma-vvvvorkshop-at-responsive-spaces-in-linz

~3d ago

joreg: Need your custom dose of #vvvv training? Join us at our studio in #berlin: vvvv-training-at-the-source

~8d ago

~13d ago

~13d ago

domj: Dev stream: Painting with light with a Vive controller, developing using VL and Schéma. Start at 17:00 https://www.twitch.tv/dominikjancik

~14d ago

joreg: July as it happened: vvvvhat-happened-in-july-2019 #vvvv

~15d ago

levi: @mrboni thanks mrboner. solved it by turning all the lights to strobe mode so framerate drops were actually a relief :P . love

~16d ago

joreg: reminder: this thursday, just before the patching circle, there is a free 2h intro to #vvvv gamma: free-vvvv-intro-workshops-this-summer-in-berlin