Frage zu Texturen ohne jegliche Hilfsmittel (DX oder OGL)
-
Hallo zusammen,
Wie aus meinem vorigen Posting zu entnehmen ist, habe ich ein Programm erstellt in dem ein Objekt frei bewegt werden kann.
Nun würde ich es gern noch etwas "schmücken". Wenn es nur eine Farbe ist, ist das auch kein Problem, aber ein Bild darauf (wie eine Textur) würde mir etwas mehr gefallen.
Weiß jemand wie man dabei vorgeht? Ich möchte keinen Code zum abschreiben sonder mich interessiert nur der Vorgang an sich.
Die einzigste Methode die mir einfällt ist die Bitmap zeilenweise auszulesen und auf die Höhe und Breite des Objekts umzurechnen.
z.B. Bitmap ist 50x50 Pixel
Objekt dreht sich um 45 Grad und ist jetzt 25x50 Pixel.
Nun könnte ich jede zweite Bildzeile auslesen und in das Objekt zeichnen inkl. dem schrägen Versatz.
Für kleine Objekte mag das noch gehen aber große werden bestimmt sehr langsam auf dem Bildschirm erscheinen.Ich würde es halt gern selbst versuchen weiß aber nicht ob das überhaupt der richtige Weg ist.
Falls jemand eine Idee hat oder es schonmal selbst versucht hat bitte einfach mal melden. Auch wenn der Weg noch so umständlich scheint. Zum zeichnen kann ich leider nur die Windows GDI verwenden. Ich weiß das es nicht das schnellste dafür ist
Nochwas anderes...
Ist OpenGL hardwarebeschleunigt wie DirectX? Ich habe ein paar Demos aus dem Netz die sind so schnell das man nichts sehen kann, nur wenn man das Bild anhält sieht man die Objekte mit Texturen und so...Danke und Gruß, Nicky
-
Ja, OpenGL ist (meistens) hardwarebeschleunigt.
Was das Texture-Mapping angeht: normalerweise macht man das genau umgekehrt. D.h. man geht von dem Pixel am Bildschirm aus den man "einfärben" möchte, und rechnet dann zurück auf den Punkt in der Textur.
Dann liest man an der entsprechenden Stelle der Textur die Farbe aus, und schreibt die an den Punkt am Bildschirm von dem man ausgegangen ist.
-
Statt ein Viereck solltest du 2 Dreicke nehmen.
Texturmapping für ein Dreieck geht so, dass du die 3 3D-Eckpunkte in 2D-Bildschirmkoordinaten umrechnest. Nun läufst du in horizontal verlaufenden Linien von oben nach unten das Dreieck ab, indem du auf den Umrandungslinien entlangläuft.Schau dir mal an, wie Gouraud-Shadding geht. Mithilfe dieses Verfahrens kanst du anstatt Farbwerte Texturkoordinaten über den Dreieck interpolieren. Mit den interpolierten Texturkoordinaten für jedes Pixel, was in den Dreieck liegt, must du nur noch den entsprechenden Farbwert aus der Textur lesen.