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

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

61

20.01.2012, 21:30

Gut dann danke an dich. Du machst deinem Namen übrigens alle Ehre. ;)
Dann werde ich das dabei belassen, habe auf jedenfall etwas dabei gelernt. Wenn ich zu FBO's komme belästige ich euch gerne wieder.
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

62

22.01.2012, 20:38

Ich habe noch einmal eine allgemeine Frage zu dem Viewport kram.
Ich habe diesen Code Ausschnitt:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
this.bind_anyway();

glBegin(GL_QUADS);
    // top left
    glTexCoord2f(0, 0);
    glVertex2f(0, 0);
    // top right
    glTexCoord2f(1, 0);
    glVertex2f(this._width, 0);//glVertex2f(vp_w, 0);
    // bottom right
    glTexCoord2f(1, 1);
    glVertex2f(this._width, this._height);//glVertex2f(vp_w, vp_h);
    // bottom left
    glTexCoord2f(0, 1);
    glVertex2f(0, this._height);//glVertex2f(0, vp_h);
glEnd();

glViewport(0, 0, this._width, this._height);


Und bekomme diese Ausgabe:

(Link)


Ich frage mich einfach: wieso wird das da unten angezeigt? Nachdem mir BlueCobold einige Seiten zuvor sagte, dass ich einfach nur die Textur Koordinaten beim kopieren falsch gesetzt habe, habe ich heute nochmal nachgedacht und mal die Koordinaten ausprobiert, an die das rot eingekreiste Bildchen steht und schon hatte ich mein korrektes Bild. Statt 25 musste ich nun etwa 285 angeben (als y Koordinate).
Doch: wieso? Wie errechne ich diese Koordinaten und/oder wie verschiebe ich das Bild bspw. an die Position 0|0? Ich habe bereits die Funktion glRasterPos gefunden, doch die bewirkt wohl doch nicht das, was ich zunächst dachte.

Ich weiß dass das wohl sehr elementare Fragen über OpenGL sind und ich wohl nochmal alles von Anfang an genauer durchgehen sollte, aber es wäre schön wenn mir jmd. trotzdem antworten könnte. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

63

22.01.2012, 20:49

Ich glaub du hast nicht ganz verstanden was der Viewport ist. Die Viewport Transformation mapped normalisierte Gerätekoordinaten (in denen ist (-1.0,-1.0) links unten und (1.0, 1.0) rechts oben) auf Pixelkoordinaten. Du hast nun offenbar eine orthogonale Projektionsmatrix gesetzt, die dir z.B. 0 nach links (-1.0) und 800 nach rechts (1.0) mapped, damit du schön intuitiv mit "Pixelkoordinaten" arbeiten kannst. Wenn du nun aber deinen Viewport änderst, dann muss du natürlich diese Projektionsmatrix auch an den neuen Viewport anpassen, weil sonst ist 400 immer noch "in der Mitte", aber "in der Mitte" ist jetzt nichtmehr in der Mitte vom Fenster, weil eben der Viewport nichtmehr dem Fenster entspricht.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

64

22.01.2012, 20:51

Ich hab's befürchtet. Wie mache ich das am klügsten?
Ja, mein Wissen darüber ist wohl wirklich begrenzt. Das wird auch vorerst mein letztes Experiment sein, bevor mein Buch durchgelesen ist.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

65

22.01.2012, 20:53

Ich bin mir nach Deinen letzten zwei Posts nicht mehr sicher, ob Du das Grundverständnis der Basis-Funktionen schon verstanden hast oder diese lieber nochmal durcharbeiten solltest. Du scheinst ein Thema angeschnitten zu haben (Copy), was für Dein aktuelles Wissen deutlich zu weit gegriffen ist.
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]

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

66

22.01.2012, 20:57

Ich bin mir nach Deinen letzten zwei Posts nicht mehr sicher, ob Du das Grundverständnis der Basis-Funktionen schon verstanden hast oder diese lieber nochmal durcharbeiten solltest. Du scheinst ein Thema angeschnitten zu haben (Copy), was für Dein aktuelles Wissen deutlich zu weit gegriffen ist.

Da gebe ich dir Recht. Die Frage heute war auch eher aus Interesse, werde, bis ich aufgeholt habe, auch nichts mehr verändern/versuchen. Hab' OpenGL etwas unterschätzt.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

67

22.01.2012, 20:57

Ich hab's befürchtet. Wie mache ich das am klügsten?

Mir ist generell unklar wieso du überhaupt den Viewport setzen musst. Map doch einfach nur den entsprechenden Ausschnitt der Textur auf dein Quad!?
Ansonsten musst du eben deine Projektionsmatrix bzw. deine Koordinaten anpassen.
Außerdem gibts noch den Scissor Test (glScissor()), der tut genau das was du wohl mit dem Viewport erreichen wolltest. Würd ich aber nur verwenden wenns wirklich nötig ist, was in deinem Fall wohl nicht zutrifft.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

68

22.01.2012, 21:06

Ich möchte gar nicht mehr groß was machen, die Frage war nur rein aus Interesse gestellt. Danke soweit an euch zwei, ich werde mich jetzt erstmal in dem Buch verkriechen. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige