Vertexshader
← Programmable Pipeline | ● | Pixelshader →
Vertex Shader = Programmierbare Vertex Operationen
In = Position, Color, Normal, Texture Coordinates
Out = transformierte Position, Color, Texture Coordinates
Im einfachsten Fall ist als einzige Vertex Operation die perspektivische Projektion durchzuführen.
Der einfachste Shader liest des In-Register der untransformierten Vertex-Position, berechnet die Modelview und perspektivische Transformation, und schreibt das Ergebnis in das Out-Register der transformierten Position.
Beispiel der perspektivischen Projektion:
ARB Vertex Program (bis ca. 2005):
PARAM mat[4]={state.matrix.mvp};
TEMP vtx,col,pos;
### fetch actual vertex
MOV vtx,vertex.position;
MOV col,vertex.color;
### transform vertex with combined modelview
DP4 pos.x,mat[0],vtx;
DP4 pos.y,mat[1],vtx;
DP4 pos.z,mat[2],vtx;
DP4 pos.w,mat[3],vtx;
### write resulting vertex
MOV result.position,pos;
MOV result.color,col;
NVIDIA CG Shader (ab ca. 2004):
{
float4 position : POSITION;
float4 color : COLOR0;
};
struct v2fconn
{
float4 HPos : POSITION;
float4 Col0 : COLOR0;
};
v2fconn main(indata IN, uniform float4x4 ModelViewProj)
{
v2fconn OUT;
OUT.HPos = mul(ModelViewProj, IN.position);
OUT.Col0.xyz = IN.color.xyz;
return OUT;
}
GLSL Vertex Shader (ab ca. 2006):
void main()
{
vec4 position;
vec4 color;
// fetch actual vertex
position=gl_Vertex;
color=gl_Color;
// transform vertex with combined modelview
gl_Position=gl_ModelViewProjectionMatrix*position;
// pass vertex color
gl_FrontColor=color;
}
← Programmable Pipeline | ● | Pixelshader →