|
JLI Spieleprogrammierung
|
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
|
Verfasst am: 20.04.2003, 10:33 Titel: Beleuchtung funktioniert nicht |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.04.2003, 11:09 Titel: |
|
|
Hast du die Lichter auch mit
Code: | D3DDevice->SetRenderState(D3DRS_LIGHTING,TRUE); |
eingeschaltet? _________________ 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 |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 20.04.2003, 11:25 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.04.2003, 12:45 Titel: |
|
|
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 |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 21.04.2003, 09:14 Titel: |
|
|
Das stimmt auch alles, denn Modelle aus X-Files werden Beleuchtet, nur diese dummen Primitive nicht.
Mortl |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 21.04.2003, 09:42 Titel: |
|
|
Hast du ein Material vergeben? |
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 21.04.2003, 14:37 Titel: |
|
|
In welche Richtung scheint denn dein Licht? _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 21.04.2003, 17:18 Titel: |
|
|
Uff, Materialien sind nicht drin , der Code steht in meinem Programm so wie du ihn hier siehst.
Wie macht man des mit den Materialien bei Primitiven?
Mortl |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 21.04.2003, 17:22 Titel: |
|
|
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 |
|
|
mortl2 Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88 Wohnort: Straubing/Bayern Medaillen: Keine
|
Verfasst am: 22.04.2003, 07:31 Titel: |
|
|
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 |
|
|
|
|
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
|