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

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

1

15.06.2003, 12:23

Problem mit Würfel (2)

Diesmal gehts ums Zeichnen. Ich zeig mal wieder Code:

Quellcode

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
// Hier erstmal das Speicher der Vertizes, es läuft alles ohne Fehler ab:
tbResult CPlatte::CreateVertizes()
{
  SVertexPlatte* Vertizes = new SVertexPlatte[8];
  Vertizes[0].vPos = tbVector3(0.0f, 0.0f, 0.0f);     // vorne unten links
  Vertizes[0].vTex = tbVector2(0.0f, 1.0f);         
  Vertizes[1].vPos = tbVector3(1.0f, 0.0f, 0.0f);     //  vorne unten rechts
  Vertizes[1].vTex = tbVector2(1.0f, 1.0f);
  Vertizes[2].vPos = tbVector3(0.0f, 1.0f, 0.0f);    // vorne oben links
  Vertizes[2].vTex = tbVector2(0.0f, 0.0f);
  Vertizes[3].vPos = tbVector3(1.0f, 1.0f, 0.0f);    // vorne oben rechts
  Vertizes[3].vTex = tbVector2(1.0f, 1.0f);     
  Vertizes[4].vPos = tbVector3(0.0f, 0.0f, 1.0f);    // hinten unten links
  Vertizes[4].vTex = tbVector2(0.0f, 1.0f);         
  Vertizes[5].vPos = tbVector3(1.0f, 0.0f, 1.0f);    // hinten unten rechts
  Vertizes[5].vTex = tbVector2(1.0f, 1.0f);         
  Vertizes[6].vPos = tbVector3(0.0f, 1.0f, 1.0f);   // hinten oben links
  Vertizes[6].vTex = tbVector2(0.0f, 0.0f); 
  Vertizes[7].vPos = tbVector3(1.0f, 1.0f, 1.0f);   // hinten oben rechts
  Vertizes[7].vTex = tbVector2(1.0f, 0.0f);         

  if(m_Vertizes->AddVertices(8, Vertizes))  // Daten spiechern
  TB_ERROR("Vertexbuffer konnte nicht mit Daten gefüllt werden!", TB_ERROR)
  else TB_INFO("VertexBuffer erfolgreich mit Daten gefüllt!");

  if(m_Vertizes->Update())  // Daten in Buffer kopieren
    TB_ERROR("Vertexbuffer-Update fehlgschlagen!", TB_ERROR);
  delete [] Vertizes;   // Array wird nicht mehr gebraucht, also löschen

  short int Indizes[36] = { 2, 3, 0,  3, 1, 0,      // Vorderseite
              7, 6, 4,  7, 5, 4,        // Hinterseite
              3, 7, 1,  7, 5, 1,        // rechte Seite
              6, 2, 4,  2, 0, 4,        // linke Seite
              0, 1, 4,  1, 5, 4,                    // untere Seite
              6, 7, 2,  7, 3, 2 };                  // obere Seite
  
if(m_Indizes->SetIndices(0, 36, Indizes))
  TB_ERROR("SetIndizes ist Fehlgeschlagen!", TB_ERROR)
else TB_INFO("IndexBuffer erfolgreich mit Daten gefüllt!");
    
return TB_OK; // Alles in Ordnung...

}

// Diese Funktion wird auf aufgerufen beim Rendern:
tbResult CTsichTennis::Render(float fNumSecPassed)
{
  tbDirect3D::Clear(NULL, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 
  D3DCOLOR_XRGB(255,0,0), 1.0f, 0 );
  tbDirect3D::BeginScene();
  m_Platte->Render(fPassedSecs);
  tbDirect3D::EndScene();
  tbDirect3D::Present();
}
// dAnn hier die Render-Funktion:

tbResult CPlatte::Render(float fSecs)
{
  tbMatrix    mTranslation = tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f));
  tbDirect3D::SetFVF(VERTEX_PLATTE_FVF); // FVF=D3DFVF_XYZ | D3DFVF_TEX1
  tbDirect3D::SetTexture(0, m_Textur);        // m_Textur ist erfolgreich geladen worden
  tbDirect3D::SetTransform(D3DTS_WORLD, mTranslation);

// m_Vertizes ist erfolgreih erstelltes tbVertexBuffer-Objekt
  HRESULT r = tbDirect3D::GetDevice()->SetStreamSource(0, 
                                                                                      m_Vertizes->GetVB(),  0, sizeof(SVertexPlatte));

if(FAILED(r))
  TB_ERROR_DIRECTX("SetSTreamSource", r, TB_STOP);

// m_Indizes ist erfolgreich erstelltes tbIndexBuffer-Objekt
  r = tbDirect3D::GetDevice()->SetIndices(m_Indizes->GetIB());

  if(FAILED(r))
    TB_ERROR_DIRECTX("SetIndizes", r, TB_STOP);

  r = tbDirect3D::GetDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 
0, 0, 36, 0, 8);

if(FAILED(r))
  TB_ERROR_DIRECTX("DrawIndexePrimitive", r, TB_STOP);
    
return TB_OK;  // Auch hier ist alles oK
}

Ist diesmal n bisschen mehr Code geworden, hoffe ihr könnt mir helfen...
Ich sehe nur ein rotes Fenster, keinen Würfel oder so.

Gruß, Maxi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

15.06.2003, 12:39

Hast Du die Projektionsmatrix gesetzt?

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

3

15.06.2003, 14:00

ich dachte, die wird automatisch von der Engine gesetzt? Ich dachte, aber ich probiers mal schnell aus.

Ne, geht nciht. Ich habs so initialisiert:
in der Klasse CTsichtennis:
tbMatrix m_mProjection;

und dann in der Init-Funktion von CTischtennis:
m_mProjection = tbMatrixProjection(TB_PI / 4, tbDirect3D::GetAspect(), 0.1f, 300.0f);
tbDirect3D::SetTransform(D3DTS_PROJECTION, m_mProjection);


aber ich sehe trotzdem nur einen roten Bisldchirm.

Gruß, Maxi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

15.06.2003, 14:03

Die Projektionsmatrix wird nicht automatisch gesetzt! Wo steht das?
Und wo setzt Du das Vertexformat der Platten-Vertizes?

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

5

15.06.2003, 14:13

In der Renderfunktin von CPlatte setze ich das FVF.

tbDirect3D::SetFVF(VERTEX_PLATTE_FVF); // VERTEX_PLATTE_FVF=D3DFVF_XYZ | D3DFVF_TEX1

und efinieren tu ich es in Platte.h:

Quellcode

1
2
3
4
5
6
7
8
#define PLATTE_VERTEX_FVF (D3DFVF_XYZ | D3DFVF_TEX1)

// die Struktur SVertexPlatte sieht so aus:
struct SVertexPlatte
{
    tbVector3 vPos;
    tbVector2 vTex;
};



Wo ist denn der Fehler?
Ich weiß echt nmicht mehr weiter...

Gruß, Maxi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

15.06.2003, 14:16

Du hast vergessen, m_Indizes->Update(); aufzurufen! Beim Vertex-Buffer hast Du es, aber beim Index-Buffer nicht.

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

7

15.06.2003, 14:22

Oh mann, wie kann ich das nur vergessen haben...
Aber danke, jetzt funktioniert es einwandfrei.
Ich kann mir den Würfel angucken :) .

Danke Danke, DAnke, jetzt geht es sehr gut.

Gruß, Maxi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

15.06.2003, 14:26

Kein Problem!
Bis gleich dann, wenn das nächste Problem auftaucht! :)

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

9

15.06.2003, 14:32

hihi, du sitzt jetzt bestimmt gespannt vor dem PC und drückst alle fünf Sekunden F5 :) .

Ne, brauchste nicht, ich werde mal versuchen jetzt alleien durchzukommen, so schwer kann das ja nicht sein...

Gruß, Maxi

Werbeanzeige