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

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

31

22.07.2012, 21:27

Hmm sonst weiß ich spontan auch nicht woran es liegen könnte. Evt. setzt du irgendwo die Projektionsmatrix mit einer gl Funktion? glOrtho() oder sowas? Kannst du P.perspective(...) nutzen (für 3D)?

32

28.07.2012, 14:53

Ich hab mal dran weitergearbeitet und bemerkt, dass ich kein Bild sehe, wenn ich eine MVP Matrix bzw. Shader benutzte, aber ohne sehe ich was.

Hier der Code:

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
#include <TG/tg_gl.h>
#include <TG/Window.hpp>
#include <TG/Matrix.hpp>
#include <TG/Shader.hpp>

int main() {
    tg::Window window("Test", "Test", 800, 600, 0, 0);
    tg_glInit();
    
    GLuint VertexArrayID;
    glGenVertexArrays(1, &VertexArrayID);
    glBindVertexArray(VertexArrayID);
    GLuint programID = tg::LoadShaders("SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader");
    
    GLuint MatrixID = glGetUniformLocation(programID, "MVP");
    
    mat4 P;
    P.perspective(45.f, 4.f / 3.f, 0.1f, 100.f);
    mat4 V;
    V.lookAt(4, 3, 3, 0, 0, 0, 0, 1, 0);
    mat4 M(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
    mat4 MVP = P * V * M;
    
    static const GLfloat g_vertex_buffer_data[] = {
        -1.f, -1.f, 0.f,
        1.f, -1.f, 0.f,
        0.f, 1.f, 0.f,
    };
    
    GLuint vertexbuffer;
    glGenBuffers(1, &vertexbuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
    
    while(window.isOpen()) {
        window.handleMessages();
        glClear(GL_COLOR_BUFFER_BIT);
        glUseProgram(programID);
        glUniformMatrix4fv(MatrixID, 1, GL_FALSE, MVP.getArray());
        
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
        glVertexAttribPointer(
                0,
                3,
                GL_FLOAT,
                GL_FALSE,
                0,
                (void*)0
                );
        
        glDrawArrays(GL_TRIANGLES, 0, 3);
        glDisableVertexAttribArray(0);
        
        window.changeBuffers();
    }
    
    glDeleteBuffers(1, &vertexbuffer);
    glDeleteProgram(programID);
    
    return 0;
}


@DeKugelschieber: Sry, dass ich mich erst jetzt wieder melde. Nein, ich benutzte kein glOrtho oder sonstiges. Und die Antwort auf die andere Frage ist auch nein.

Edit: Mit glm kriege ich ein Bild. Muss nur noch eine Rotationsmatrix machen. Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
glm::mat4 P, V, M, MVP;

P = glm::perspective(45.f, 4.f / 3.f, 0.1f, 100.f);
V = glm::lookAt(
        glm::vec3(0,0,10),
        glm::vec3(0,0,0),
        glm::vec3(0,1,0)
        );
M = glm::mat4(1.f);
MVP = P * V * M;

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Delop« (28.07.2012, 15:26)


33

28.07.2012, 15:57

Ich kann es mit glm::rotate rotieren lassen...endlich.

Noch 2 Fragen:
1) Wenn ich eine Sprite-Klasse habe, ruft jede die Klasse die draw Funktion auf, oder?
2) Wie soll ich die Kamera für 2D positionieren? Damit meine ich wenn die Fensterbreite 800 ist, dass wenn ein Objekt die X-Koordinate 800 hat, genau bei der Fensterbreite liegt.

Edit: Oh...vor großer Freude habe ich nicht bemerkt, dass es sich nicht um den Mittelpunkt dreht...
Noch eine Frage: Wie könnte ich das jetzt hinkriegen? Ich denke ich könnte als Center die Punkte angeben, aber wie kriege ich die raus?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Delop« (28.07.2012, 16:28)


34

28.07.2012, 16:53

Einfach die Weite, Tiefe und Höhe halbieren.
Bumm, Mittelpunkt.

MfG
Check

35

28.07.2012, 16:58

Das weiß ich ja ;). Ich meine es so, wenn es schon mal z.B. um einen beliebigen Punkt (nicht der Mittelpunkt) 10° rotiert wurde, dann sie die Koordinaten der Punkte anders. Und dieses "neuen" Koordinaten brauche ich.

36

28.07.2012, 17:51

Die Punkte einfach mit rotieren? :huh:
Denn die Koordinaten der Punkte an denen du rotierst ändern sich ja nicht, oder hab ich was verpasst?

MfG
Check

37

28.07.2012, 18:08

Wie kann ich eine Matrix zu einem Vektor machen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

38

28.07.2012, 18:09

Was genau meinst du damit?

39

28.07.2012, 18:29

Ich habe wohl falsch nachgedacht. Vergesst, was ich gesagt habe.

Was ist daran falsch?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
glm::vec3 center;
center.x = D.x - B.x;
center.x /= 2;
center.x += B.x;

center.y = B.y - A.y;
center.y /= 2;
center.y += A.y;

center.z = D.z - A.z;
center.z /= 2;
center.z += A.z;
static const GLfloat g_vertex_buffer_data[] = {
    A.x, A.y, A.z, // links unten
    B.x, B.y, B.z, // links oben
    C.x, C.y, C.z, // rechts unten
    D.x, D.y, D.z, // rechts oben
};

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

40

28.07.2012, 19:13

Was genau soll das denn sein? Es lässt sich nämlich prima kürzen (was auch immer das tun soll):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
center.x = D.x + B.x;
center.x /= 2;

center.y = B.y + A.y;
center.y /= 2;

center.z = D.z + A.z;
center.z /= 2;
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige