OpenGL - Resize: Breiteskalierungsproblem



  • Gleiches Problem wie vorher:

    Objekt kann man skalieren (auch über das resizen der Breite), aber sobald die Breite des Fensters geringer ist als die Höhe, wird das Objekt nicht mehr dargestellt.

    Gruß
    Tim



  • Und wie sieht dein Aufruf von gluPerspective() jetzt aus?



  • Das

    gluPerspective( 45.0f, (double)(this->iWidth/this->iHeight), 1.0f, 100.0f);
    

    wird auch nicht funktionieren

    silent12 schrieb:

    Ach und gluPerspective erwartet aber einen GLdouble-Wert (also einen stan**** Double).
    Also müsste ich doch einfach mittels (double) vor der Division das Ergebnis in Double umwandeln oder ?
    Nur leider funktioniert das auch nicht 😕

    Gruß
    Tim



  • Meine gluPerspective-Funktion sieht einmal so aus:

    gluPerspective( 45.0f, (double)(this->iWidth/this->iHeight), 1.0f, 100.0f);
    

    und einmal so:

    gluPerspective( 45.0f, (double)(iWidth/iHeight), 1.0f, 100.0f);
    

    Ich habe gemerkt, wenn ich die Breite erhöh, indem ich das Fenster mit der Maus in der Breite resize, dann beobachte ich folgendes:

    - ein bisschen größer: Objekt mit einem Schlag ziemlich klein (aber Verhältnis der Seitenlängen stimmt)

    -um einiges größer: Objekt wird wieder größer (Verhältnis stimmt nicht mehr: breitgezogen)

    Warum kann das so nicht funktionieren ?

    Gruß
    Tim



  • @silent12
    Aua.

    gluPerspective( 45.0f, static_cast<double>(iWidth)/iHeight, 1.0f, 100.0f);
    


  • silent12 schrieb:

    Ich habe gemerkt, wenn ich die Breite erhöh, indem ich das Fenster mit der Maus in der Breite resize, dann beobachte ich folgendes:

    - ein bisschen größer: Objekt mit einem Schlag ziemlich klein (aber Verhältnis der Seitenlängen stimmt)

    -um einiges größer: Objekt wird wieder größer (Verhältnis stimmt nicht mehr: breitgezogen)

    Warum kann das so nicht funktionieren ?

    Weil du da zwei Ganzzahlen dividierst und das Ergebnis einer Ganzzahldivision eine Ganzzahl ist...



  • Mit Casten habe ichs davor schon probiert, aber damit klappt es auch nicht...

    Dadurch wird das Objekt nicht skaliert, sondern das Objekt wird einfach wenn ich resize "abgeschnitten".

    Das mit den Ganzzahlen habe ich mir gedacht, aber eine Lösung habe ich nicht gefunden, da es mit dem Casten ja auch nicht klappt...

    Gruß
    Tim



  • Natürlich klappt es mit Casten, wenn man es richtig macht.

    (double)(iWidth/iHeight)
    

    Das hier ist immer noch ein Ganzzahldivision, du castest nur das Ergebnis nach double. Was du willst ist, Dividend und/oder Divisor vor der Division in einen float zu casten, damit es eben eine Gleitkommadivision wird...



  • Um es nocheinmal zusammenzufassen:

    Probiert habe ich bis jetzt:
    gluPerspective( 45.0f, (double)(iWidth/iHeight), 1.0f, 100.0f);
    gluPerspective( 45.0f, (double)(iWidth)/iHeight, 1.0f, 100.0f);//macht für mich keinen Sinn
    gluPerspective( 45.0f, static_cast<double>(iWidth/iHeight), 1.0f, 100.0f);
    

    Ich verzweifel einfach an diesem Problem.
    Habe noch keine großen Kenntnisse von C++ und OpenGL.
    Wenn jemand möchte, kann er sich auch gerne per mail (pfeifletim@gmail.com) melden und dann mal per teamviewer drüber schauen.

    Gruß
    Tim



  • mach das

    gluPerspective( 45.0f, double(iWidth)/iHeight, 1.0f, 100.0f);//macht aber Sinn
    


  • Das Castet dann den ersten Wert und dadurch das Ergebnis gleich mit oder ?
    Nur leider funktioniert das bei mir nicht...kann es sein, dass es an etwas anderem im Code liegt (Code auf Seite 1 vollständig 🙂 )?

    Gruß
    silent12



  • silent12 schrieb:

    gluPerspective( 45.0f, (double)(iWidth)/iHeight, 1.0f, 100.0f);//macht für mich keinen Sinn
    

    warum genau?



  • silent12 schrieb:

    Nur leider funktioniert das bei mir nicht...

    Ich hoffe, dass dir bald endlich mal klar wird, dass "funktioinert nicht" keine Basis ist, auf der wir dir helfen können...



  • Habe den Sinn dahinter jetzt verstanden 🙂 (@//macht für mich keinen Sinn)

    Tut mir leid meinte Natürlich:(@funktioniert nicht)

    Dadurch wird das Objekt nicht skaliert, sondern das Objekt wird einfach wenn ich resize "abgeschnitten".

    Also es wird in den linken Rand "hineingeschoben", ohne seine Größe zu ändern.


Anmelden zum Antworten