Du bist nicht angemeldet.

Werbeanzeige

Anonymous

unregistriert

11

26.08.2004, 15:20

naja, wenn mir keiner helfen kann, weis dann jemand ein gutes tutorial zu so nem Tiles-System? Dann bau ich das geanze einfach nochmal neu auf...

12

26.08.2004, 16:04

HI, also ich kenn mich nicht so gut mit der TriBase Engine aus, aber es gibt eine Sache die mich verwirrt an deinem Code, nur ich weiss nicht ob das vielleicht von der TriBase Engine geregelt wird, aber ich denke, dass das dein Problem ist.

Das Problem ist der VertexBuffer!
Du nutzt einen VertexBuffer.
Aber du füllst den VertexBuffer nirgends mit Daten.
In deiner Draw Funktion legst du die Vertizes an, aber dadurch sind sie ja nicht im VertexBuffer.
Das heisst, dass Zeichnen mit DrawPrimitive kann nicht funktionieren, wenn du im VertexBuffer keine Daten hast.

Hoffe dir hilft das weiter!

13

26.08.2004, 16:09

Zweiter versuch :)

Ich hab jetzt nicht so genau geguckt, aber setzte mal den Position.z-Wer deines Tiles auf einen Wert GRÖ?ER als der Wert fnearPlane in deiner TransMatrix.

Cu,

Chrissi

Anonymous

unregistriert

14

26.08.2004, 17:15

So müsste es den Vertex-Buffer doch eigentich mit daten füllen, oder:

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
tbResult CTiles::Init(D3DCOLOR VColor, int x, int y)  
    { 
 
    tbDirect3D::GetDevice()->CreateVertexBuffer(4 * sizeof(STVERTEX), 
                                     0, 
                                     D3DFVF_TLVERTEX, 
                                     D3DPOOL_MANAGED, 
                                     &vertexBuffer, 
                                     NULL); 
 
    tbDirect3D::GetDevice()->SetFVF(D3DFVF_TLVERTEX); 
 
    tbDirect3D::GetDevice()->SetStreamSource(0, vertexBuffer, 0, sizeof(STVERTEX)); 
 
    // Renderstates 

 
 
    LoadTextures(); 
 
 
 
    vertexBuffer->Lock(0, 0, (void**)&vertices, D3DLOCK_NOSYSLOCK); 
 
    vertices[0].Color = VColor; 
    vertices[0].vPosition.x = 1.0f; 
    vertices[0].vPosition.y = 1.0f; 
    vertices[0].vPosition.z = 2.0f; 
    vertices[0].rhw = 1.0f; 
    vertices[0].vTex0.u = 0.0f; 
    vertices[0].vTex0.v = 0.0f; 
 
    vertices[1].Color = VColor; 
    vertices[1].vPosition.x = 1.0f; 
    vertices[1].vPosition.y = -1.0f; 
    vertices[1].vPosition.z = 2.0f; 
    vertices[1].rhw = 1.0f; 
    vertices[1].vTex0.u = 1.0f; 
    vertices[1].vTex0.v = 0.0f; 
 
    vertices[2].Color = VColor; 
    vertices[2].vPosition.x = -1.0f; 
    vertices[2].vPosition.y = 1.0f; 
    vertices[2].vPosition.z = 2.0f; 
    vertices[2].rhw = 1.0f; 
    vertices[2].vTex0.u = 1.0f; 
    vertices[2].vTex0.v = 1.0f; 
 
/*  vertices[3].Color = VColor; 
    vertices[3].vPosition.x = -1.0f; 
    vertices[3].vPosition.y = -1.0f; 
    vertices[3].vPosition.z = 0.0f; 
    vertices[3].rhw = 1.0f; 
    vertices[3].vTex0.u = 0.0f; 
    vertices[3].vTex0.v = 1.0f; 
*/ 
 
    vertexBuffer->Unlock(); 
 
    tbDirect3D::SetTexture(0, m_pTile1); 
 
    return TB_OK; 
};



funktioniert aber leider immer noch nicht. Das mit der z-Position hab ich auch verändert, bringt auch nix.
Hab das ganze jetzt auch mal auf ein Dreieck reduziert, um zu testen ob überhaupt was angezeigt wird.

15

26.08.2004, 17:34

Ja, so müsste er den VertexBuffer füllen. Ok, dann lag es wohl daran nicht, wäre ja auch zu einfach gewesen :ohoh:

Leider weiss ich im Moment auch nicht weiter ???

16

26.08.2004, 18:32

Poste doch mal alles, was du hast. Dann kann man besser den "Fehler" "lokallisieren".

PS: Weißt du, dass Snorky vor Monaten ein Inoffizielles Update für die Tribase rausgebracht hat, was u.a. auch einen 2d-Sprite-renderer beinhaltet. Guck mal auf der TB-Update-Seite

Anonymous

unregistriert

17

27.08.2004, 16:17

danke für den tip mit der Engine, guck ich mir gleich mal an!
Hie ist dann mal noch der restliche Code meiner CTiles Klasse:

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
//--------------------------------------------------------------------- 

// Exit... 

 
tbResult CTiles::Exit() 
    { 
    tbDirect3D::GetDevice()->SetStreamSource (0, NULL, 0, 0); 
 
    //Release vertex buffer 

    if (vertexBuffer) 
         vertexBuffer->Release (); 
 
    UnloadTextures(); 
 
    return TB_OK; 
}; 
 
 
//--------------------------------------------------------------------- 

// Textur laden 

 
tbResult CTiles::LoadTextures()  
    { 
 
    m_pTile1 = tbTextureManager::LoadTexture("Tile1.jpg"); 
 
    return TB_OK; 
}; 
 
//--------------------------------------------------------------------- 

// Textur entladen 

 
tbResult CTiles::UnloadTextures() 
    { 
    tbDirect3D::GetDevice()->SetTexture(0, NULL); 
    TB_SAFE_RELEASE(m_pTile1); 
 
    return TB_OK; 
}; 
 
//--------------------------------------------------------------------- 

// Zeichnen 

 
tbResult CTiles::Draw() 
    { 
 
 
 
 
    tbDirect3D::GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,   // Dreiecksliste 

                     1,             // 1 Dreieck 

                     vertices,          // Vertexdaten 

                    sizeof(STVERTEX));      
 
    return TB_OK;

18

27.08.2004, 17:11

Hab mir jetzt des TriBase-Update nochmal genau angeguckt, und ich muss sagen des sieht gar net schlecht aus. Allerdings wärs net schlecht da mal n Beispielprogramm zu haben. Also nur so die Funktiosaufrufe zum sehen wie das ganze fuktioniert, ich kenn mich halt mit ini-Dateien net so gut aus.
Wär net wenn mir da jemand was schickt oder postet.
mfg

edit: hat sich inzwischen erledigt

19

28.08.2004, 20:38

Hat sich leider doch nicht erledigt :(
Hab schon wieder n neues Problem:

Quellcode

1
2
3
4
5
6
7
8
9
Linker-Vorgang läuft... 
Tiles.obj : error LNK2001: Nichtaufgeloestes externes Symbol "__declspec(dllimport) public: enum tbResult  __thiscall tb2DSprite::End(void)" (__imp_?End@tb2DSprite@@QAE?AW4tbResult@@XZ) 
Tiles.obj : error LNK2001: Nichtaufgeloestes externes Symbol "__declspec(dllimport) public: enum tbResult  __thiscall tb2DSprite::DrawSprite(class tbVector2,unsigned long,unsigned long,class tbColor const &,class tbVector2,float)" (__imp_?DrawSprite 
@tb2DSprite@@QAE?AW4tbResult@@VtbVector2@@KKABVtbColor@@0M@Z) 
Tiles.obj : error LNK2001: Nichtaufgeloestes externes Symbol "__declspec(dllimport) public: enum tbResult  __thiscall tb2DSprite::Begin(void)" (__imp_?Begin@tb2DSprite@@QAE?AW4tbResult@@XZ) 
Debug/Oeger.exe : fatal error LNK1120: 3 unaufgeloeste externe Verweise 
Fehler beim Ausführen von link.exe. 
 
Oeger.exe - 4 Fehler, 0 Warnung(en)


Die Fehler bekomm ich wenn ich folgenden Code compilier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
tbResult CTiles::Draw() 
    { 
 
    Tile1->Begin(); 
 
    Tile1->DrawSprite(tbVector2(0, 0), 0, TB_SF_ALIGN_HLEFT | TB_SF_ALIGN_VTOP, tbColor(1.0f, 1.0f, 1.0f, 0.5f)); 
 
    Tile1->End(); 
 
    return TB_OK; 
};


Hab davor natürlich noch "Tile1" initialisiert:

C-/C++-Quelltext

1
tb2DSprite* Tile1 = NULL;


Gibts da noch irgendwas dass man bei dem Engine-update beachten muss, dass es funktioniert?
mfg simon

Lurnas

Frischling

Beiträge: 78

Beruf: Schüler

  • Private Nachricht senden

20

28.08.2004, 23:04

was hast du alles gelinkt?

Werbeanzeige