PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shader für dummies - was ist das überhaupt


cos
2003-10-02, 02:31:56
hiho

eines vorweg - ich hab praktisch kein plan von programmieren und behersche grad mal ein print hello world oder so in basic.

kann mir mal einer erklären was diese "shader" sind bei die sind ja spätestens seit dx9 chips in aller munde?

tb
2003-10-03, 01:43:23
Ich probiers mal, es gibt zwei Arten von "Shadern":

DirectX -> Vertex Shader (OpenGL -> Vertex Program)
- bekommen die Vertexdaten (Eckpunkte, als z.B. 3 pro Dreieck)
- Programme für den VS können nur die Eckpunkte verändern(transformieren, etc.), jedoch keine erzeugen oder löschen (bisher)


DirectX -> Pixel Shader (OpenGL -> Fragment Program)
- bekommen die Pixeldaten, sprich Bildpunkte
- Programme für die PS können ebensowenig Bildpunkte erzeugen, jedoch löschen, da ändert sich dann halt nichts auf dem Bildschirm


Hier mal ein DX9 HLSL Beispiel:


// -------------------------------------------------------------
// Output channels
// -------------------------------------------------------------
struct VS_OUTPUT
{
float4 Pos : POSITION; // Eckpunkte
float2 Tex : TEXCOORD1; // Texturekoordinaten
};

// -------------------------------------------------------------
// vertex shader function (input channels)
// -------------------------------------------------------------
VS_OUTPUT VS(float4 Pos : POSITION, float2 Tex : TEXCOORD0)
{
VS_OUTPUT Out = (VS_OUTPUT)0;
// Projektion durch
//(Worldmatrix*Viewmatrix*Projektionsmatrix)
Out.Pos = mul( Pos, matWorldViewProj );
// Texturekoordinaten durchreichen zum PS
Out.Tex = Tex;

return Out;
}

// -------------------------------------------------------------
// Input channels
// -------------------------------------------------------------

struct PS_INPUT
{
float2 Tex : TEXCOORD0;
};

// -------------------------------------------------------------
// Pixel Shader (input channels) output channel
// -------------------------------------------------------------
float4 PS( PS_INPUT IN ) : COLOR
{
// Texture holen
float4 Color = tex2D(BaseMap, IN.Tex);
// ausgeben
return Color;
}


Thomas