Wieso verzerrt Polyvector das verwendete Sprite ?

Previous topic - Next topic

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Trabant 500

Es ist natürlich kein Fehler von GLBasic, aber dennoch ist es ein Anzeigefehler. Und diesen könnte man ja beheben.
Vielleicht äußert sich Gernot ja mal dazu !?  :whistle:
IF was <> passt
   was = passt
ENDIF

S.O.P.M.

Man müsste halt die softwaretechnischen Hintergründe kennen und verstehen, um nachvollziehen zu können, warum es zu einer solchen Darstellung kommt. Wenn ich z. B. "orthogonale Projektionsmatrix" lese, kann ich damit herzlich wenig anfangen. Auch danach zu googlen macht mir nicht verständlicher, was da mathematisch passiert.

Vermutlich ist es eine Funktion des OpenGL-Treibers, die nunmal aus diversen Gründen so und nicht anders arbeitet. Modifizieren ist nicht, wie Schranz0r schon meinte. Deshalb müsste GLBasic das wirklich einfach umgehen und einen eigenen, in Assembler geschriebenen Algorithmus verwenden. Aber klar, wer hat schon Bock, sich diesen Krampf anzutun...
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Schranz0r

Genau das S.O.P.M !

Es ist auch kein Anzeigefehler Trabant 500, es ist einfach so, es muss ja einen Grund geben, wieso das bei OpenGL und DX gleich ist! Die machen das ja nicht zum Spass so ;)

Wie gesagt nur weils dir so nicht passt, wirds keiner abändern...
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Ist kein Fehler und bleigt deshalb so wie's ist. Deine "Vorstellung" ist nur anders, als der Treiber arbeitet. Der Treiber interpoliert die Pixel linear, und das ist gut so (wenn man ROTOZOOMSPRITE mit POLYVECTOR macht muss das so sein). Wenn man jetzt aber 3D machen will mit 2D Befehlen, mus sman halt eine "Tiefe" einbauen.
Die Pixel werden jetzt nicht mehr linear interpoliert, sondern exponentiell. Darum muss man eben mit bestimmter feinhait das Netz unterteilen um den Effekt zu erhalten.

Kannst Du so eine Funktion für Deine Zwecke machen, oder muss ich das bauen?

Trabant 500

@Kitty Hello
So eine Funktion stellt für mich kein Problem dar. Nur mal schauen wie schnell die dann sein wird. Wenn es von vornherein in Assembler wäre (wovon ich keine Ahnung habe), wäre es mit Sicherheit schneller und das fände mit Sicherheit nicht nur ich eine tolle Ergänzung. =D
Im Prinzip weiß ich schon was Du meinst, aber wieso gibt es dann bei diesem Befehl die Möglichkeit ein Nicht-Rechteck zu erstellen, wenn es doch dann verzerrt aussieht ? :blink:
IF was <> passt
   was = passt
ENDIF

Kitty Hello

der POLYVECTOR übergibt die Vektoren so wie gegeben an die Grafikkarte. Und die verzerrt das Bild linear. Du willst aber exponential, und diese Information weiß die Karte nicht. Das kann man nicht Pauschalisieren, das ist von Viereck zu Viereck verschieden. Oder ein fünfeck - das weißt Du, weil Dein Gehirn auf einmal ein 3D Objekt "sieht" und dann weiß welche Kante wie skaliert werden muss. Der PC kann das nicht wissen.
Wenn Du's in GLBasic vernünftig machst, wird's so schnell sein als wenn ich's intern mache. GLBasic ist kompiliert.