OpenGL - Resize: Breiteskalierungsproblem
-
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 nichtGruß
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.