ich habe gerade freudig meine ersten höherwertigen HLSL - Shader geschrieben und bin dann darauf gekommen, dass man Shader egtl. ganz einfach dazu nutzen könnte, eine Art "Schutzhülle" um ein Raumschiff zu rendern. Dazu müsste man ja die einzelnen Vertexpositionen in Richtung der Normalen "nach außen" schieben und das Modell dann halbtransparent rendern. Das habe ich dann auch gleich versucht, was zu diesem code geführt hat:
Code: Alles auswählen
BumpVertexShaderOutput HullVS(VS_INPUT Input)
{
BumpVertexShaderOutput Output; // Rückgabeveriable definieren
Output.Normal = float4(normalize(mul((float3) Input.Normal, (float3x3) mWorld)), 1.0); // Normalen umrechnen
Output.Tangent = float4(normalize(mul((float3) Input.Tangent, (float3x3) mWorld)), 1.0); // Tangenten (für Bump-Mapping, jetzt unwichtig)
Output.Binormal = float4(normalize(mul((float3) Input.Binormal, (float3x3) mWorld)), 1.0); // Bitangenten (für Bump-Mapping, jetzt unwichtig)
float4 vPos = mul(Input.Position, mWorld); // Position mit Weltmatrix transformieren
vPos += -Output.Normal * 0.1f; // Zentrale Stelle: Hier wird die Position um den Normalenvektor verschoben.... Problem siehe unten
Output.Position = mul(vPos, mViewProjection); // Mit Kamera- und Projektionsmatrix transformieren
Output.TexCoord = Input.TexCoord; // Durchkopieren
Output.WorldSpacePos = mul(Input.Position, mWorld); // Für Specular lighting Position an Pixelshader geben
return Output;
}
die Zeile
Code: Alles auswählen
vPos += -Output.Normal * 0.1f;
Code: Alles auswählen
vPos += Output.Normal * 2.0f;
das führt dann aber zu einem Modell, dass deutlich kleiner ist als das Original (es verschwindet darin und man sieht die Hülle nicht). Das kann ich nicht nachvollziehen
Ich wäre für eine Erklärung sehr dankbar
Gruß
David