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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

11.09.2011, 00:44

D.h. du rufst glEnable(GL_TEXTURE_2D) auf? Hast du vielleicht vergessen, einen Texturfilter zu setzen?

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

22

11.09.2011, 00:51

Ja das rufe ich in der setup bereits auf. Das mit dem Texturfilter, eig. stell ich das beim erstellen der Textur bereits ein und da die anderen Vergleichs Texturen reibungslos gezeichnet werden, mach ich mir darum eig keine Sorgen. Versuche ich das ganze manuell zu rendern á la:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        tex3.bind();

        glBegin(GL_QUADS);
            // top left
            glTexCoord2f(texbuffer[0].tx, texbuffer[0].ty);
            glVertex2f(texbuffer[0].x, texbuffer[0].y);
            // top right
            glTexCoord2f(texbuffer[1].tx, texbuffer[1].ty);
            glVertex2f(texbuffer[1].x, texbuffer[1].y);
            // bottom right
            glTexCoord2f(texbuffer[2].tx, texbuffer[2].ty);
            glVertex2f(texbuffer[2].x, texbuffer[2].y);
            // bottom left
            glTexCoord2f(texbuffer[3].tx, texbuffer[3].ty);
            glVertex2f(texbuffer[3].x, texbuffer[3].y);
        glEnd();


funktioniert es ja auch.
Muss wohl einfach weiter probieren :)

edit:

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
Vertex[] buffer;
buffer ~= Vertex(100, 100);
buffer ~= Vertex(200, 100);
buffer ~= Vertex(200, 200);
buffer ~= Vertex(100, 200);

Vertex[] texbuffer;
texbuffer ~= Vertex(0, 0);
texbuffer ~= Vertex(0.2, 0);
texbuffer ~= Vertex(0.2, 0.2);
texbuffer ~= Vertex(0, 0.2);

// ...

glDisable(GL_TEXTURE_2D);

glColor3f(0, 0, 0);

if (!set) {
    writeln("set buffer data!");
    set = true;

    glBindBuffer(GL_ARRAY_BUFFER, vboId);

    glBufferData(GL_ARRAY_BUFFER, Vertex.sizeof * buffer.length, buffer.ptr, GL_STATIC_DRAW);
    //glBufferData(GL_ARRAY_BUFFER, Vertex.sizeof * texbuffer.length, texbuffer.ptr, GL_STATIC_DRAW);
} else {
    glBindBuffer(GL_ARRAY_BUFFER, vboId);

    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, null);

    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glTexCoordPointer(3, GL_FLOAT, 0, null);

    tex3.bind();

    //glInterleavedArrays(GL_V3F, Vertex.sizeof, null);
    glDrawArrays(GL_QUADS, 0, buffer.length);
}

glEnable(GL_TEXTURE_2D);


Das zeichnet mir mein schwarzes Quadrat. Aktiviere ich den zweiten Buffer bzw. das einlesend des zweiten Buffers in Zeile 26 und mache das glDisable(GL_TEXTURE_2D); in Zeile 15 weg, sehe ich kein Quadrat mehr (logisch) und ebenso keinen Textur Ausschnitt. Auch die Aktivierung von Interleaved und Änderung des Parameters in GL_T2F_V3F ändert nichts. Irgendwas mach ich falsch o.O
Hat jemand zufälligerweise etwas ähnliches bereits getan und kann mir mal den Code zeigen? Ist ja zum Mäuse melken ^^
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Architekt« (11.09.2011, 11:28)


Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

23

11.09.2011, 15:35

So langsam zweifle ich daran, dass es so überhaupt möglich ist :whistling:
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

24

11.09.2011, 18:49

Now it works :thumbup:

Für alle die eventuell das gleiche Problem haben:

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
63
64
65
66
Vertex[] buffer;
buffer ~= Vertex(100, 100);
buffer ~= Vertex(200, 100);
buffer ~= Vertex(200, 200);
buffer ~= Vertex(100, 200);

Vertex[] texbuffer;
texbuffer ~= Vertex(0, 0);
texbuffer ~= Vertex(0.2, 0);
texbuffer ~= Vertex(0.2, 0.2);
texbuffer ~= Vertex(0, 0.2);

// ...

GLuint vBuf, tBuf;
glGenBuffers(1, &vBuf);
glGenBuffers(1, &tBuf);

//..

if (!set) {
    writeln("set buffer data!");
    set = true;

    glBindBuffer(GL_ARRAY_BUFFER, vBuf);

    glBufferData(GL_ARRAY_BUFFER, buffer.length * Vertex.sizeof, null, GL_STATIC_DRAW);
    auto vPtr = cast(Vertex*) glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
    for (uint i = 0; i < buffer.length; ++i) {
        vPtr[i].x = buffer[i].x;
        vPtr[i].y = buffer[i].y;
        vPtr[i].z = buffer[i].z;
    }

    glUnmapBuffer(GL_ARRAY_BUFFER);

    glVertexPointer(3, GL_FLOAT, 0, null);

    //glBindBuffer(GL_ARRAY_BUFFER, 0);

    glBindBuffer(GL_ARRAY_BUFFER, tBuf);

    glBufferData(GL_ARRAY_BUFFER, texbuffer.length * Vertex.sizeof, null, GL_STATIC_DRAW);
    auto tcPtr = cast(Vertex*) glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
    for (uint i = 0; i < texbuffer.length; ++i) {
        tcPtr[i].x = texbuffer[i].x;
        tcPtr[i].y = texbuffer[i].y;
        //tcPtr[i].z = texbuffer[i].z;
    }

    glUnmapBuffer(GL_ARRAY_BUFFER);

    glTexCoordPointer(3, GL_FLOAT, 0, null);

    glBindBuffer(GL_ARRAY_BUFFER, 0); // unbind
} else {
    tex3.bind();

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    glDrawArrays(GL_QUADS, 0, 4);  //  Ausgabe

    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);;
}
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

DarioFrodo

Treue Seele

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

25

11.09.2011, 21:11

Ich arbeite auch grade mit OpenGL VB.. und habe da grade 2 sehr schöne Seiten im Browser die mir sehr viele Informationen liefern..
Falls es dich interessiert:
VBO (english)
NeHe Tutorial (deutsch)
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

26

11.09.2011, 21:47

Den zweiten Link kannte ich wirklich noch nicht, gracias.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige