JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=6ee44146d8adb152db0efd702eca72e2Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Beleuchtung funktioniert nicht

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 20.04.2003, 10:33    Titel: Beleuchtung funktioniert nicht Antworten mit Zitat

Hi,

Egal ob ich die Beleutchtung an oder ausschalte, die Primitiven werden immer und ohne Schatten gezeichnet.
Der Code:

Das FVF und die Vertexstruktur:
Code:

#define D3D_CUSTOMVERTEX (D3DFVF_XYZ  | D3DFVF_NORMAL | D3DFVF_TEX1)

struct Vertex
{
   float x, y, z;
   float nx, ny, nz;         
   float tu, tv;
};


Die Funktion in der eine Oberfläche aus zwei Dreiecken erzeugt wird:
Code:

Vertex SurfaceVertieces[] =
   {
      {x1, y2, z1, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f},
      {x1 ,y1, z1, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f},
      {x2, y1, z2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f},      
      {x2, y1, z2, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f},
      {x2, y2, z2, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f},
      {x1, y2, z1, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f}      

   BYTE* VertexBufferStart;

   D3D->lpD3DDevice->CreateVertexBuffer(sizeof(SurfaceVertieces),
                                               D3DUSAGE_WRITEONLY,
                                           D3D_CUSTOMVERTEX,
                                         D3DPOOL_MANAGED,
                                         &VertexBuffer)

   VertexBuffer->Lock(0,0,&VertexBufferStart,0);
   memcpy(VertexBufferStart,SurfaceVertieces,sizeof(SurfaceVertieces));   
   
   VertexBuffer->Unlock();

   D3D->lpD3DDevice->SetVertexShader(D3D_CUSTOMVERTEX);

   D3DXCreateTextureFromFileEx(D3D->lpD3DDevice, texturefile, 0,0,0,0,D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, ColorKey, NULL, NULL, &Texture);
   
   D3D->lpD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
   D3D->lpD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);


Die Draw Funktion:
Code:

   D3D->lpD3DDevice->SetTexture(0, Texture);   
   D3D->lpD3DDevice->SetStreamSource(0, VertexBuffer, sizeof(Vertex));
   D3D->lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);


Wo liegt der Fehler?

Mortl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 20.04.2003, 11:09    Titel: Antworten mit Zitat

Hast du die Lichter auch mit
Code:
D3DDevice->SetRenderState(D3DRS_LIGHTING,TRUE);

eingeschaltet? Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 20.04.2003, 11:25    Titel: Antworten mit Zitat

Das ist ja das Problem, egal ob ich
Code:

D3DDevice->SetRenderState(D3DRS_LIGHTING,TRUE);

oder
Code:

D3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);


schreibe, es wir immer und ohne Schattierung gezeichnet.

Mortl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 20.04.2003, 12:45    Titel: Antworten mit Zitat

Und hast du
Code:
lpD3DDevice->LightEnable(0,TRUE);

geschrieben???
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 21.04.2003, 09:14    Titel: Antworten mit Zitat

Das stimmt auch alles, denn Modelle aus X-Files werden Beleuchtet, nur diese dummen Primitive nicht.

Mortl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 21.04.2003, 09:42    Titel: Antworten mit Zitat

Hast du ein Material vergeben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 21.04.2003, 14:37    Titel: Antworten mit Zitat

In welche Richtung scheint denn dein Licht?
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 21.04.2003, 17:18    Titel: Antworten mit Zitat

Uff, Materialien sind nicht drin Laughing, der Code steht in meinem Programm so wie du ihn hier siehst.
Wie macht man des mit den Materialien bei Primitiven?

Mortl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 21.04.2003, 17:22    Titel: Antworten mit Zitat

Zeig dochmal dein Code indem du das Licht erzeugst! Ansonsten darf man auch nicht vergessen, dem Licht eine Nummer zugeben:
Code:
lpD3DDevice->SetLight (0, &light)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mortl2
Junior JLI'ler



Anmeldedatum: 18.09.2002
Beiträge: 88
Wohnort: Straubing/Bayern
Medaillen: Keine

BeitragVerfasst am: 22.04.2003, 07:31    Titel: Antworten mit Zitat

Hier der Code für die Funktion die z. B ein Punktlicht erzeugt:
Code:

ZeroMemory(&light[index], sizeof(D3DLIGHT8));
light[index].Type = D3DLIGHT_POINT;
light[index].Diffuse.r = Diffuse_r;
light[index].Diffuse.g = Diffuse_g;
light[index].Diffuse.b = Diffuse_b;
light[index].Range = Range;
light[index].Position = Pos;
light[index].Attenuation0 = 1.0f;

In einer Klasse kann man bis zu 100 Lichter verwalten. Mit dem Parameter Index kann man wählen welches Licht man verwenden will.
Die Werte Diffuse_r, Diffuse_g, Diffuse_b, Range und Pos werden auch als Parameter der Funktion übergeben.
Dann gib es noch eine Funktion mit der Mann den Status eines Lichts verändern kann:
Code:

D3D->lpD3DDevice->SetLight(index, &light[index]);
D3D->lpD3DDevice->LightEnable(index, Status);
D3D->lpD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
D3D->lpD3DDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);

"Status" wird als boolische Variable der Funktion übergeben.
Wie gesagt, X-Files werden beleuchtet.

Mortl
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum