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 →