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

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

13.03.2011, 19:46

MD2 Model will nicht rendern

Hallo,

ich hab jetzt alles zusammen (hoff ich mal) um MD2 Modelle zu laden und zu rendern. Das versuche ich gerade mit dem Ogro von Quake der bei dem Buch dabei war. Und zwar etwas anders, ich habe keine Klasse für den Ogro da ichs erstmal simpel halten will.

Hierzu zwei Funktionen:

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
void loadOgro(){
    ogro = new md2Model("data/shader/model.vert", "data/shader/model.frag");
    ogro->setAnimation(0, 39);
    
    if(ogro->load("data/model/Ogro/tris.md2")){
        cout<<"Model geladen!"<<endl;   
    }
    else{
        cout<<"Fehler beim laden des Models!"<<endl;
    }

    loadTexture("data/model/Ogro/Ogrobase.tga");
}

void renderOgro(){
    glPushMatrix();
        glTranslatef(0, 0, 0);
        glRotatef(-90.0f, 0.0f, -1.0f, 0.0f);
        glBindTexture(GL_TEXTURE_2D, ogroTexture);
        ogro->render();
    glPopMatrix();
}


Das Model + Textur wird auch geladen, allerdings wird nichts gerendert? Habe ich irgendwas vergessen oder falsch verstanden?

Hier mal die Rendermethode vom Loader, sowie "display" und "draw":

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
void md2Model::render(){
    static float modelviewMatrix[16];
    static float projectionMatrix[16];

    // Matrizen auslesen
    glGetFloatv(GL_MODELVIEW_MATRIX, modelviewMatrix);
    glGetFloatv(GL_PROJECTION_MATRIX, modelviewMatrix);

    m_shaderProgram->bindShader(); // Shader aktivieren
    m_shaderProgram->sendUniform4x4("modelview_matrix", modelviewMatrix); // Modelansichtsmatrix senden
    m_shaderProgram->sendUniform4x4("projection_matrix", projectionMatrix); // Projektionsmatrix senden
    m_shaderProgram->sendUniform("texture0", 0);

    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);
    
    glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glBindBuffer(GL_ARRAY_BUFFER, m_texCoordBuffer);
    glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);

    glDrawArrays(GL_TRIANGLES, 0, m_interpolatedFrame.vertices.size());

    glDisableVertexAttribArray(1);
    glDisableVertexAttribArray(0);
};

void draw(){ 
    glLoadIdentity();
    gluLookAt(15, 10, 15,
             5, 0, 5,
             0, 1, 0);

    glClearColor(0.0, 0.0, 0.0, 0);
    
// IST NUR UM ZU SEHEN OB ÜBERHAUPT ETWAS GERENDERT WIRD, ICH WEIß DASS DAS SCHROTT IST
    glColor3f(1.0, 0.0, 0.0);
    glBegin(GL_QUADS);
        glVertex3f(0, 0, 0);
        glVertex3f(10, 0, 0);
        glVertex3f(10, 0, 10);
        glVertex3f(0, 0, 10);
    glEnd();

    renderOgro();
}

void display(){     
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    
    // 3D   
    glEnable(GL_DEPTH_TEST);
    draw(); 
        
    // Buffer tauschen
    glutSwapBuffers();
}

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

14.03.2011, 07:30

Traut sich wohl keiner :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

14.03.2011, 09:46

Werden die Daten korrekt geladen? Werden die Shader korrekt erstellt? Sind die Shader korrekt? Render vielleicht mal ohne Shader um potentielle Fehlerquellen auszuschalten. Stimmen die Matritzen? Was sagt glGetError()?
Da gibts viel zu viele mögliche Fehlerquellen und viel zu wenig Information als das man da irgendwas sagen könnte...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

14.03.2011, 17:01

1. Daten werden geladen (sizeof):

header 68,
skins 20,
md2texcoords 20
triangles 20
texcoords 20,
keyframes 20,
texturenames 20

kann ja wohl nicht richtig sein oder? "load" Methode: http://cnp.marvinblum.de/index.php?id=20

2. Hab ohne gerendert und es wird wenigstens noch die Fläche (die glBegin...) angezeigt, mit garnichts.

3. Matrizen:

Modelview:
1,71561 0 0 0
0 2,14451 0 0
0 0 -1,002 -1
0 0 -2,002 0

Projektion: alles 0

4. glGetError() gibt 0.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

14.03.2011, 17:05

1. Daten werden geladen (sizeof):

header 68,
skins 20,
md2texcoords 20
triangles 20
texcoords 20,
keyframes 20,
texturenames 20

Sry aber ich hab keine Ahnung was uns diese Zahlen jetzt genau sagen sollen...

Projektion: alles 0

Ignoriert der Shader die Projection oder was genau wundert dich jetzt!? Deine ModelView schaut aus als wärs eigentlich die Projection...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

14.03.2011, 17:51

Ok vergiss 1^^

Projektion wurde falsch eingelesen (falsche Variable) ist jetzt aber:

1,7 0 0 0
0 2,1 0 0
0 0 -1 -1
0 0 -2 0

Modelview:

0,7 -0,4 -0,5 0
0 0,8 0,5 0
-0,7 -0,4 0,5 0
0 0 -8 1

ogro.md2 hat:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        struct Vertex{
            float x, y, z;
        };

        struct md2Vertex{
            unsigned char v[3];
            unsigned char lightNormalIndex;
        };

struct KeyFrame{
            float scale[3];
            float translate[3];
            char name[16];
            vector<md2Vertex> verts;
            vector<Vertex> vertices;
        };


199 Frames
71343 verts
399990 vertex
670 Dreiecke (steht im Header)

Kann nicht stimmen oder? Guck dir bitte mal die load Methode an...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

14.03.2011, 19:09

ICH KÖNNT TANGO TANZEN!!! ICH HABS!!!!!!11elf

Werbeanzeige