Liebe Leser
Ich Programmiere grade meiner ersten kleinen Vertex Shader.
Er soll einfach nur die Vertizen Transformieren.
Beleuchtung und andere zusätzliche Dinge kommen später.
Der Shader Effekt befindet sich im der Modelldatei. (Im Effecte Chunk des Models)
Wenn ich Das Modell Normal Rendere. Also ohne den Shader zu kompilieren, ist alles normal.
Das Objekt schwebt vor der Kamera.
Wenn ich nun den Shader Kompiliere Verschwindet das Objekt. Es ist nicht mehr da.
Das Shader etwas bewirkt weis ich nun. nur irgendetwas ist falsch.
// Hir die Funktion die die den Shader die Matrizen gibt und das Modell Rendert. Sie Wird in der Renderfunktion Aufgerufen
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
tbResult CPart1::SetShader()
{
// D3D Reverenz
tbDirect3D &D3D = tbDirect3D::Instance();
// Matrizen Initialisieren
m_Prj = gp_Main->mp_Game->m_Projection; // Projektionsmatrix
m_Cam = gp_Main->mp_Game->m_Camera; // KameraMAtrix
m_Trans = tbMatrixTranslation(tbVector3(0.0f,-14.0,0.0f)); // Transformation
m_Rot = tbMatrixRotation(tbVector3(0.0f,0.0f,0.0f)); // Rotation
m_Scl = tbMatrixScaling(tbVector3(1.0f,1.0f,1.0f)); // Scalierung
// WeltMatrix / WeltSicht Matrix
m_World = m_Scl * m_Rot * m_Trans; // Weltmatrix erstellen
m_WorldCam = m_World * m_Cam; // WeltSicht MAtrix erstellen (Weltmatrix * CameraMatrix)
// Matrizen an Shader Senden
mp_Kugel->GetEffects()->pEffect->GetEffect()->SetMatrix("WorldViewMatrix",(D3DXMATRIX*)&m_WorldCam); // WeltSicht Matrix an Shader Senden
mp_Kugel->GetEffects()->pEffect->GetEffect()->SetMatrix("ProjectionMatrix",(D3DXMATRIX*)&m_Prj); // Projektion an Shader Senden
// Das Modell Rendern
mp_Kugel->Render();return TB_OK;
}
|
// Hir der Shader.
|
HLSL-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
DWORD NumTextures = 0;
// Ein Kleiner Vertexshader
float4x4 WorldViewMatrix; // m_World * m_Cam
float4x4 ProjectionMatrix;
// VertexStruktur
struct SVertexShaderOut
{
float4 Position : POSITION;
float2 Texture : TEXCOORD0;
float4 Diffuse : COLOR0;
float3 Normal : NORMAL;
};
// VertexShader
SVertexShaderOut VertexShaderMain(
float4 InPosition : POSITION,
float3 InNormal : NORMAL,
float2 InTexture : TEXCOORD0,
float4 InDiffuse : COLOR0 )
{
SVertexShaderOut Output = (SVertexShaderOut) (0);
//POSITION MIT WELT-SICHT UND PROJEKTION TRANSFORMIEREN
float3 Pos = mul(InPosition,(float4x3)(WorldViewMatrix));Output.Position = mul(float4(Pos,1.0f),ProjectionMatrix);
// TEXTURE
Output.Texture = InTexture;
// Normalvector Transformieren
float3 Normal = mul(InNormal,(float3x3)(WorldViewMatrix));
Output.Normal = Normal;
Output.Diffuse = InDiffuse;
return Output;
}
TECHNIQUE T1
{
PASS P1
{
// Materialeinstellungen
MaterialDiffuse = {0.500f, 0.500f, 0.900f, 1.000f};
MaterialAmbient = {0.200f, 0.200f, 0.200f, 0.000f};
MaterialEmissive = {0.000f, 0.000f, 0.000f, 0.000f};
MaterialSpecular = {0.000f, 0.000f, 0.000f, 0.000f};
MaterialPower = 100.000f;
VertexShader = compile vs_3_0 VertexShaderMain();
}
}
|