• Home
  • Documentation
  • Forum
  • Blog
  • Users
    • Map
    • Userlist
    • Businesses
    • Userpages
    • Connections
  • Contributions
    • All
    • Store
  • Downloads
    • vvvv beta
    • vvvv beta previews
  • Store
Show / Hide Table of Contents

Function Printing

There are various possibilities to alter the vertex positions by mathematical functions.

For the following examples we use a Grid (EX9.Geometry) as input. Set the resolution to about 50x50.

f(x, y) = z

Create a new z coordinate by x and y. Using the MrWiggle example we could write:

float2 Frequency = 10;  
float2 Phase = 0;  
float2 Amplitude = 0.01;  

vs2ps VS(  
    float4 PosO  : POSITION,
    float4 TexCd : TEXCOORD0)
{  
    //declare output struct
    vs2ps Out;
    
    //calculate two waves
    float2 wave = sin(PosO.xy * Frequency + Phase) * Amplitude;
    
    //set z coordinate
    PosO.z = wave.x + wave.y;

    //transform position
    Out.Pos = mul(PosO, tWVP);
    
    //transform texturecoordinates
    Out.TexCd = mul(TexCd, tTex);

    return Out;
}  

using a patch like:
function patch

f(u, v) = xyz

Another common type is to calculate a completely new position from the xy coordinates of the grid. This is often called parametric surfaces, where the xy input parameters are called uv.

for example a cone:

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

can be written as a function:

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;
}  

It might be handy to scale u by two pi to get a full cycle in the range 0..1, as well as have a general offset and scale for the input parameters. The vertex shader could then look like:

1. 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)
{  
    //declare output struct
    vs2ps Out;
    
    //set new position
    PosO.xyz = Cone(PosO.xy);

    //transform position
    Out.Pos = mul(PosO, tWVP);
    
    //transform texturecoordinates
    Out.TexCd = mul(TexCd, tTex);

    return Out;
}  

And the patch: cone patch

Next: Vertex Data
Back: Mr. Wiggle
TOC: ((Tutorial - Of Effects and Shaders|Of Effects and Shaders))

  • Improve this Doc

© 2020 by vvvv group. Imprint | Privacy Policy.
Thanks to DocFX for building this website. Analytics by Plausible.

Back to top