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

1

03.08.2008, 16:20

Bildschirm bleibt nach dem rendern schwarz!

Hi Leute,
ich wollte mir ein kleines 3D Spiel mit der TriBase schreiben, in dem man mit einem Raumschiff auf Zeit fliegen muss. Nun habe ich vieles schon fertig, aber nach dem rendern bleibt einfach der Bildschierm schwarz. :( Aber alles wird richtig geladen, dass kann ich an dem Logfile erkennen. Und der Debuger sagt auch nichts. Für das Schiff habe ich mir eine eigene Klasse geschrieben, fast so wie die bei Galactica. Hier die Render-Funktion fürs Schiff:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
tbResult CShip::Render(float fTime) 
{ 
 // Matrix abfragen und einsetzten: 

 Update(); 
 tbDirect3D::Instance().SetTransform(D3DTS_WORLD, m_mMatrix);
 // Model rendern: 

 m_pModel->Render();

 return TB_OK;
}

und hier die vom Game:

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
tbResult CGame::Render(float fTime) 
{  
 tbMatrix mProjection; 
 tbMatrix mCamera; 
 D3DLIGHT9 light;
 tbVector3 cameralook; 
 tbVector3 camerapos; 
 tbVector3 cameraup;

 tbDirect3D& D3D = tbDirect3D::Instance(); 
 D3D->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, tbColor(0.0f), 1.0f, 0); 
 D3D->BeginScene();  

 mProjection = tbMatrixProjection(TB_DEG_TO_RAD(70.0f), D3D.GetAspect(), 0.1f, 50.0f); 
 D3D->SetTransform(D3DTS_PROJECTION, (D3DMATRIX *) &mProjection); 

 camerapos = m_pShip->RelToAbsPos(tbVector3(0.0f, 0.0f, -m_pShip->m_pModel->GetBoundingSphereRadius() * 2.5f));
 cameralook = camerapos - m_pShip->m_vZAxis; 
 cameraup = m_pShip->m_vYAxis; 

 mCamera = tbMatrixCamera(camerapos, cameralook, cameraup); 
 D3D.SetTransform(D3DTS_VIEW, mCamera);

 ZeroMemory(&light, sizeof(D3DLIGHT9)); 
 light.Type = D3DLIGHT_DIRECTIONAL; 
 light.Diffuse = tbColor(1.0f, 1.0f, 1.0f); 
 light.Specular = tbColor(1.0f, 1.0f, 1.0f); 
 light.Direction = cameralook - camerapos;
 D3D->SetLight(0, &light); 
 D3D->LightEnable(0, true);

 m_pShip->Render(fTime);

 m_pSkybox->Render(camerapos);

 D3D->EndScene();  

 D3D->Present(NULL, NULL, NULL, NULL);

 return TB_OK;
}

Ich habe schon in allen Spieleprogrammierer büchern geschaut, die Forensuche befragt, aber nichts ist dabei raus gekommen. Ich hoffe mir kann jemand helfen. Vielen dank auch schon mal für Hilfe im voraus.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

03.08.2008, 16:30

Bildschirm! ohne ie!
Ist das Raumschiff vielleicht einfach nicht im Sichtbereich der Kamera?

3

04.08.2008, 14:43

Oh, danke Tippfehler!
Aber ich habe doch die Kamera genau hinter das Raumschiff gestellt.

C-/C++-Quelltext

1
2
3
4
5
6
 camerapos = m_pShip->RelToAbsPos(tbVector3(0.0f, 0.0f, -m_pShip->m_pModel->GetBoundingSphereRadius() * 2.5f));
 cameralook = camerapos - m_pShip->m_vZAxis; 
 cameraup = m_pShip->m_vYAxis; 

 mCamera = tbMatrixCamera(camerapos, cameralook, cameraup); 
 D3D.SetTransform(D3DTS_VIEW, mCamera);

4

04.08.2008, 14:45

So wie ich das sehe nimmst du schwarzes Licht

Zitat

light.Diffuse = tbColor(1.0f, 1.0f, 1.0f);
light.Specular = tbColor(1.0f, 1.0f, 1.0f);

5

04.08.2008, 15:15

Ich habe nun andere Werte genommen:

Quellcode

1
2
3
 light.Diffuse = tbColor(1.0f, 0.75f, 0.1f); 
 light.Specular = tbColor(0.5f, 0.5f, 0.5f); 
 light.Ambient = tbColor(0.25f, 0.25f, 0.25f);

Aber es geht immer noch nicht. Und ich habe auch noch das versucht:

Quellcode

1
 D3D.SetRS(D3DRS_AMBIENT, tbColor(0.1f, 0.25f, 0.1f));

Und es ging auch nicht. :(

6

04.08.2008, 15:18

Bist du dir auch sicher dass der Fehler in dem Teil des Quellcodes liegt?

7

04.08.2008, 15:44

Es muss an der Render-Funktion liegen, weil sonst alles fehlerfrei geladen wird, und mit einem anderem Model funktioniert es auch nicht.

8

04.08.2008, 15:49

Hmm ich erkenn irgendwie keinen Fehler da. :(

9

04.08.2008, 16:02

Ich auch nicht!
Dass das erste richtige 3D-Spiel auch gleich eine Pleite werden muss :(

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

04.08.2008, 16:04

Naja. Schau mal, ob du irgendwie ein einfaches Dreieck gerendert bekommst, indem du einfach alles aufs nötigste reduziert, wenn das klappt, füllst du einfach wieder alles auf schön Schritt für Schritt und dann wirst du sehen, an was das es lag.

Werbeanzeige