» 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

~12h ago

~3d ago

joreg: Two #vvvv workshops this week in #berlin: Friday: Physical Computing, Saturday: Computer Vision. Tickets: upcoming-full-day-vvvv-gamma-workshops-in-berlin

~3d ago

joreg: @cznickesz also feel free to join our chat for such questions: chat

~3d ago

cznickesz: @joreg: Yeah, I´ll give it a try! Thx

~3d ago

joreg: @cznickesz: we're hoping this week. but depends on feedback. please test your project and let us know if it works.

~3d ago

cznickesz: @joreg: I should stop asking my questions so cryptic ;-) So right away: is final Beta39 hours, days or weeks away?

~3d ago

joreg: @cznickesz: the idea of an RC is exactly to make sure your projects will work with it. your last chance to report problems with b39.

~3d ago

cznickesz: So how "RC" is the "RC3"? I have to update an old project soon and I´m wondering if I should wait and directly update to Beta39

~4d ago

joreg: @takuma, the "one frame" issue was fixed in RC3 for beta39, see: beta39-release-candidate

~4d ago

Takuma: @joreg thank!! Ill try this. Are there a way to send video texture from vvvv to vl? fromimage node in vl somehow only sends 1 frame