Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

51

12.02.2012, 09:59

Sorry wenn ich drängle aber hat keiner eine Idee? Google hat mit auch nichts mehr geliefert :(

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

52

12.02.2012, 10:12

Schau dir den Renderpfad in Pix an, da steht alles was du wissen musst: Shaderkonstanten, Renderstate, etc...
@D13_Dreinig

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

53

12.02.2012, 11:19

Aber wie erkenne ich ob ein Fehler oder sonstiges falsch läuft? Laut Log ist jede Funktion S_OK. Ich verstehe auch nicht alles was da drinne steht ^^ Und wie sehe ich den Renderpfad ein?
Danke

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

54

12.02.2012, 14:59

Das Problem hast du beim Debuggen doch immer. Daher heißt es doch auch "Fehlersuche". Du musst eben prüfen ob dein Renderdurchlauf genau das tut was du erwartest. Es können natürlich viele Dinge falsch sein, also Suchen! Ansonsten ist es schwierig mit dem bisschen Code, den du gepostet hast, einen Fehler zu identifizieren.
@D13_Dreinig

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

55

12.02.2012, 20:04

Also ich habe alles durchgeguckt. Alle Werte stimmen und alles läuft so ab wie es sein soll! Also entweder bin ich zu Blöd oder DirectX mag mich nicht^^
Also den Code den ich gepostet habe ist eigentlich alles was mit der Tür zu tun hat. Aber es muss ja am Shader liegen denn wenn ich alles ohne Shader render dann sehe ich die Tür. ALso ich weiß echt nicht mehr weiter :(

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

56

12.02.2012, 21:34

Wenn alles stimmen würde, dann würdest du ja das erwartete Ergebnis sehen.. Falls es am Shader liegt, dann schau eben dort mal nach. Simplifizier z.B. bestimmte Stellen des Shaders um Bereiche ausschließen zu können.
@D13_Dreinig

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

57

13.02.2012, 09:23

Sorry, aber Du nutzt doch gar keinen Shader. Dein Code ist reichlich wirr, aber nach dem, was ich da sehe, setzt Du per SetTextureStageState eine (lückenhafte) Formel für die Farbverarbeitung im Shader auf, die Du dann bei Effect::SetTechnique wieder überschreibst. Im Endeffekt kann da alles passieren, aber definitiv nichts von dem, was Du uns zeigst. Nimm Dir Pix, springe bis zum DrawCall der Tür vor und prüfe den Mesh, alle RenderStates, alle TextureStageStates und was Du sonst so brauchst und auch den Mesh usw. Im PostTransform siehst Du dann ja, was den VertexShader verlassen hat. Wenn Du da eine Tür siehst, sind die Pixeleinstellungen Dein Problem, sonst die Transform-Einstellungen, Licht-Einstellungen oder Matrizen.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

58

13.02.2012, 17:41

Brauchst nich sorry zu sagen, es timmt ja :) Ich bin einer der alles mögliche testet und dann nach und nach ordentlich macht. Deswegen ergibt der Code auch kein Sinn :P Aber der Shader ist trotzdem in Verwendung :) Und ich glaube sogar das ich bald den fehler habe denn ichhabe alles überprüft und wie gesagt alles S_OK aber bei SetValue vom Shader sind mein Variablen im Shader ganz anderst als sie sein sollen. Da werde ich nochmal gucken :)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

59

13.02.2012, 20:35

So Fehler gefunden, aber nicht erklärbar(im Anhang)
Die Zeilen die Probleme machen sind alles nachdenen ein "// fehler" kommt:

C-/C++-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
    g_pEffect->SetMatrix("worldMatrix", (const D3DXMATRIX*)&World);
    g_pEffect->SetMatrix("worldInverseTransposeMatrix", (const D3DXMATRIX*)&worldInverseTransposeMatrix);
    g_pEffect->SetMatrix("worldViewProjectionMatrix", (const D3DXMATRIX*)&worldViewProjectionMatrix);

    HRESULT hh = g_pEffect->SetValue("cameraPos", m_pCamera->GetCameraPos(), sizeof(Vector3));
    float                        g_sceneAmbient[4] = {0.2f, 0.2f, 0.2f, 1.0f};

    g_pEffect->SetValue("globalAmbient", &g_sceneAmbient, sizeof(g_sceneAmbient));
 
   g_pEffect->SetValue("light.dir", Vector3(0,0,1), sizeof(Vector3(0,0,1)));
   g_pEffect->SetValue("light.pos", m_pCamera->GetCameraPos(), sizeof(m_pCamera->GetCameraPos()));
   float am[3] ={1,1,1};
    g_pEffect->SetValue("light.ambient", am, sizeof(am));   // FEHLER! Egal wie ob mit Vector3 oder nicht immer ein Fehler
    
    g_pEffect->SetValue("light.diffuse", Vector3(1.0f, 1.0f, 1.0f), sizeof(Vector3));//Fehler!
    g_pEffect->SetValue("light.specular", Vector3(1.0f, 1.0f, 1.0f ), sizeof(Vector3));//Fehler!

    g_pEffect->SetFloat("light.spotInnerCone", D3DXToRadian(20.0f));
    g_pEffect->SetFloat("light.spotOuterCone", D3DXToRadian(30.0f));
    g_pEffect->SetFloat("light.radius", 10.0f);

    g_pEffect->SetValue("material.ambient", Vector3( 0.19225f, 0.19225f, 0.19225f), sizeof(Vector3));//Fehler!
    g_pEffect->SetValue("material.diffuse", Vector3(0.50754f, 0.50754f, 0.50754f), sizeof(Vector3));//Fehler!
    g_pEffect->SetValue("material.emissive", Vector3( 0.0f, 0.0f, 0.0f), sizeof(Vector3));//Fehler!
    g_pEffect->SetValue("material.specular", Vector3(0.508273f, 0.508273f, 0.508273f), sizeof(Vector3));//Fehler!
    g_pEffect->SetFloat("material.shininess",  51.2f);

    g_pEffect->SetTexture("colorMapTexture", door->m_pEffects->apTexture[0]);

Ich kann mir den Fehler echt nicht erklären :S
Hier nochmal der Shader:

C-/C++-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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
struct Light
{
    float3 dir;                     // world space direction
    float3 pos;                     // world space position
    float4 ambient;
    float4 diffuse;
    float4 specular;
    float spotInnerCone;            // spot light inner cone (theta) angle
    float spotOuterCone;            // spot light outer cone (phi) angle
    float radius;                   // applies to point and spot lights only
};

struct Material
{
    float4 ambient;
    float4 diffuse;
    float4 emissive;
    float4 specular;
    float shininess;
};

//-----------------------------------------------------------------------------
// Globals.
//-----------------------------------------------------------------------------

float4x4 worldMatrix;
float4x4 worldInverseTransposeMatrix;
float4x4 worldViewProjectionMatrix;

float3 cameraPos;
float4 globalAmbient;

Light light;
Material material;

//-----------------------------------------------------------------------------
// Textures.
//-----------------------------------------------------------------------------

texture colorMapTexture;

sampler2D colorMap = sampler_state
{
    Texture = <colorMapTexture>;
    MagFilter = Linear;
    MinFilter = Anisotropic;
    MipFilter = Linear;
    MaxAnisotropy = 16;
};

//-----------------------------------------------------------------------------
// Vertex Shaders.
//-----------------------------------------------------------------------------

struct VS_INPUT
{
    float3 position : POSITION;
    float2 texCoord : TEXCOORD0;
    float3 normal : NORMAL;
};

struct VS_OUTPUT_DIR
{
    float4 position : POSITION;
    float2 texCoord : TEXCOORD0;
    float3 halfVector : TEXCOORD1;
    float3 lightDir : TEXCOORD2;
    float3 normal : TEXCOORD3;
    float4 diffuse : COLOR0;
    float4 specular : COLOR1;
};

struct VS_OUTPUT_POINT
{
    float4 position : POSITION;
    float2 texCoord : TEXCOORD0;
    float3 viewDir : TEXCOORD1;
    float3 lightDir : TEXCOORD2;
    float3 normal : TEXCOORD3;
    float4 diffuse : COLOR0;
    float4 specular : COLOR1;
};

struct VS_OUTPUT_SPOT
{
    float4 position : POSITION;
    float2 texCoord : TEXCOORD0;
    float3 viewDir : TEXCOORD1;
    float3 lightDir : TEXCOORD2;
    float3 spotDir : TEXCOORD3;
    float3 normal : TEXCOORD4;
    float4 diffuse : COLOR0;
    float4 specular : COLOR1;
};

VS_OUTPUT_DIR VS_DirLighting(VS_INPUT IN)
{
    VS_OUTPUT_DIR OUT;

    float3 worldPos = mul(float4(IN.position, 1.0f), worldMatrix).xyz;
    float3 viewDir = cameraPos - worldPos;
        
    OUT.position = mul(float4(IN.position, 1.0f), worldViewProjectionMatrix);
    OUT.texCoord = IN.texCoord;
    OUT.lightDir = -light.dir;
    OUT.halfVector = normalize(normalize(OUT.lightDir) + normalize(viewDir));
    OUT.normal = mul(IN.normal, (float3x3)worldInverseTransposeMatrix);
    OUT.diffuse = material.diffuse * light.diffuse;
    OUT.specular = material.specular * light.specular;
        
    return OUT;
}

VS_OUTPUT_POINT VS_PointLighting(VS_INPUT IN)
{
    VS_OUTPUT_POINT OUT;

    float3 worldPos = mul(float4(IN.position, 1.0f), worldMatrix).xyz;
    
    OUT.position = mul(float4(IN.position, 1.0f), worldViewProjectionMatrix);
    OUT.texCoord = IN.texCoord;
    OUT.viewDir = cameraPos - worldPos;
    OUT.lightDir = (light.pos - worldPos) / light.radius;
    OUT.normal = mul(IN.normal, (float3x3)worldInverseTransposeMatrix);
    OUT.diffuse = material.diffuse * light.diffuse;
    OUT.specular = material.specular * light.specular;
    
    return OUT;
}

VS_OUTPUT_SPOT VS_SpotLighting(VS_INPUT IN)
{
    VS_OUTPUT_SPOT OUT;
    
    float3 worldPos = mul(float4(IN.position, 1.0f), worldMatrix).xyz;
           
    OUT.position = mul(float4(IN.position, 1.0f), worldViewProjectionMatrix);
    OUT.texCoord = IN.texCoord;
    OUT.viewDir = cameraPos - worldPos;
    OUT.lightDir = (light.pos - worldPos) / light.radius;
    OUT.spotDir = light.dir;
    OUT.normal = mul(IN.normal, (float3x3)worldInverseTransposeMatrix);
    OUT.diffuse = material.diffuse * light.diffuse;
    OUT.specular = material.specular * light.specular;
       
    return OUT;
}

//-----------------------------------------------------------------------------
// Pixel Shaders.
//-----------------------------------------------------------------------------

float4 PS_DirLighting(VS_OUTPUT_DIR IN) : COLOR
{
    float3 n = normalize(IN.normal);
    float3 h = normalize(IN.halfVector);
    float3 l = normalize(IN.lightDir);
    
    float nDotL = saturate(dot(n, l));
    float nDotH = saturate(dot(n, h));
    float power = (nDotL == 0.0f) ? 0.0f : pow(nDotH, material.shininess);   

    float4 color = (material.ambient * (globalAmbient + light.ambient)) +
                   (IN.diffuse * nDotL) + (IN.specular * power);

    return color * tex2D(colorMap, IN.texCoord);
}

float4 PS_PointLighting(VS_OUTPUT_POINT IN) : COLOR
{
    float atten = saturate(1.0f - dot(IN.lightDir, IN.lightDir));

    float3 n = normalize(IN.normal);
    float3 l = normalize(IN.lightDir);
    float3 v = normalize(IN.viewDir);
    float3 h = normalize(l + v);
    
    float nDotL = saturate(dot(n, l));
    float nDotH = saturate(dot(n, h));
    float power = (nDotL == 0.0f) ? 0.0f : pow(nDotH, material.shininess);
    
    float4 color = (material.ambient * (globalAmbient + (atten * light.ambient))) +
                   (IN.diffuse * nDotL * atten) + (IN.specular * power * atten);
                   
    return color * tex2D(colorMap, IN.texCoord);
}

float4 PS_SpotLighting(VS_OUTPUT_SPOT IN) : COLOR
{
    float atten = saturate(1.0f - dot(IN.lightDir, IN.lightDir));
    
    float3 l = normalize(IN.lightDir);
    float2 cosAngles = cos(float2(light.spotOuterCone, light.spotInnerCone) * 0.5f);
    float spotDot = dot(-l, normalize(IN.spotDir));
    float spotEffect = smoothstep(cosAngles[0], cosAngles[1], spotDot);
    
    atten *= spotEffect;
                                
    float3 n = normalize(IN.normal);
    float3 v = normalize(IN.viewDir);
    float3 h = normalize(l + v);
    
    float nDotL = saturate(dot(n, l));
    float nDotH = saturate(dot(n, h));
    float power = (nDotL == 0.0f) ? 0.0f : pow(nDotH, material.shininess);
    
    float4 color = (material.ambient * (globalAmbient + (atten * light.ambient))) +
                   (IN.diffuse * nDotL * atten) + (IN.specular * power * atten);
    
    return color * tex2D(colorMap, IN.texCoord);
}

//-----------------------------------------------------------------------------
// Techniques.
//-----------------------------------------------------------------------------

technique PerPixelDirectionalLighting
{
    pass
    {
        VertexShader = compile vs_2_0 VS_DirLighting();
        PixelShader = compile ps_2_0 PS_DirLighting();
    }
}

technique PerPixelPointLighting
{
    pass
    {
        VertexShader = compile vs_2_0 VS_PointLighting();
        PixelShader = compile ps_2_0 PS_PointLighting();
    }
}

technique PerPixelSpotLighting
{
    pass
    {
        VertexShader = compile vs_2_0 VS_SpotLighting();
        PixelShader = compile ps_2_0 PS_SpotLighting();
    }
}

Danke im Voraus
»FSA« hat folgendes Bild angehängt:
  • Aufzeichnen.JPG

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

60

13.02.2012, 23:38

Was geben diese SetValue() Aufrufe den zurück? Man beachte dass es sich bei den entsprechenden Parametern um float4 handelt ;)

Werbeanzeige

Ähnliche Themen