Computergrafik

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):

struct indata
{
        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

Options: