"Texturen" über Bilder zeichnen?
Übersicht

![]() |
M0rgensternBetreff: "Texturen" über Bilder zeichnen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute.
Ich habe mal ne Frage zu einer bestimmten Sache. Angenommen, ich habe eine Grafik, die komplett weiß ist und der Rest des Bildes ist Tranzparent. Also, dass im Prinzip nur die Form vorgegeben ist. Jetzt habe ich andere Grafiken, sagen wir einfach mal in Kreisform, die dann eine bestimmte Farbe haben. Geld/Blau gestreift, Lila/Grün gepunktet etc. Ist es möglich, diese farbigen Grafiken auf die "Grundfigur" anzupassen? Da ich keinen Code dazu habe oder so und das nur eine rein theoretische Frage ist, habe ich mir dazu mal ein Beispiel ausgedacht: Sagen wir ich hab eine "Grundgrafik", die also komplett in weiß ist, in Form einer Autokarosserie. Nun soll es unterschiedliche "Lackierungen" dazu geben. Diese Lackierungen sind in einer etwa gleichgroßen kreisförmigen oder viereckigen Bilddatei gespeichert. Ist es nun möglich das Auto mit einer jeweils ausgewählten Lackierung zeichnen zu lassen? Ich hoffe, dass mein Anliegen verständlich formuliert wurde. Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Komplett weiße Bilder kann man im ganzen mit SetColor einfärben. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja klar.
Im ganzen, das war mir klar. Aber wenn diese bestimmte Muster haben sollen. Wie oben genanntes Beispiel: Das Auto soll schwarz sein, und einen grünen Streifen haben. Und die zugehörige Grafik, die eben schwarz mit einem grünen Streifen ist, gibt es, als rundes bzw viereckiges Bild. Und das Auto als komplett weißes. Das erste BIld soll jetzt in der richtigen Form sozusagen als "Textur" auf diese Grundform gemalt werden. Lg, M0rgenstern |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das könnte man mit "Multitexturing" machen.
In OpenGL muss man für diesen Effekt den "Modulate"-Modus für das Kombinieren der Texturen nutzen. Mit GLMax2D ist das ganze aber weniger oder nur eingeschränkt vereinbar. Man muss nämlich die Texturkoordinaten für jede Textur einzeln setzen und die Bilder müssen gleich groß sein. (Oder funktioniert "glTexCoord" für jede Textur?) Aber prinzipiell ist es auf alle Fälle möglich. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm...
Ich muss ehrlich sagen, dass ich mich mit Multitexture etc noch nicht so auskenne? Wie müsste ich das ganze denn anlegen? Also, wie müssten die Grafiken sein und welche Befehle brauche ich im Endeffekt dafür? Lg, M0rgenstern |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es wären OpenGL-Funktionen notwendig:
glActiveTexture, glBindTexture, glTexEnv und ein paar weitere OpenGL-"Allerweltsfunktionen" Ein Block, der die nötigen Einstellungen macht, würde in etwa so aussehen: BlitzMax: [AUSKLAPPEN] glActiveTexture GL_TEXTURE0+1 'Die zweite Textureinheit ist jetzt ausgewählt... So müsste dieser Zeichenmodus wieder deaktiviert werden: BlitzMax: [AUSKLAPPEN] glActiveTexture GL_TEXTURE0+1 'Die zweite Textureinheit ist jetzt ausgewählt... (Der Code ist ungetestet und ihm fehlen Sicherheitsabfragen.) Dein Bild genau richtig. Schattierungen in diesem Bild werden übrigens auch von der Lackierung übernommen. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du, sorry, aber das versteh ich nicht so ganz.
Könntest du mir das vielleicht ein wenig genauer erklären? Wie gesagt, habe damit noch nie gearbeitet. Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
...es läuft darauf hinaus, dass du dir dein eigenes Grafikmodul baust, oder zumindest das Standardmäßige abänderst.
Vielleicht solltest du nach einem fertigen schauen (und kannst im Quellcode freilich etwas ab schauen wenn du es selbst versuchen willst). Edit: Du kannst ja im brl.mod\glmax2d.mod Ordner den Quellcode anschauen, läuft ja über OpenGL. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um das wirklich richtig zu verstehen, muss man OpenGL zumindest ansatzweise kennen.
Der Hauptpunkt beim Multitexturing ist die Tatsache, dass man mehrere Texturen miteinander kombinieren kann. Die dazu notwendigen Einstellungen regelt mein Code. Aus der Tatsache, dass ich dir zum weiteren Erklären erst einmal OpenGL allgemein erklären müsste, wäre es wahrscheinlich günstiger, wenn du einfach Bilder erstellst und deren Pixmap bearbeitest. So viele große Autos und häufige Lackierungswechsel wird es ja nicht geben. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, eigentlich sollte die "Skin" nur einmal wählbar sein.
Jetzt tötet mich bitte nicht, aber mit Pixmap habe ich auch noch nie gearbeitet. Hatte noch nie so wirklich was mit Bildbearbeitung zu tun gehabt. Lg, M0rgenstern |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kennst du noch Lockbuffer?
In diese Richtung läuft das. Unterm Strich nimmst du die Alphabits der Alphamap, kombinierst sie mit den Farbbits der Colormap mit "|" und speicherst das Ergebnis im neuen Bild. An die Pixmap eines Bildes kommst du mit "LockImage". Einen Pixel kannst du mit "WritePixel" ändern und mit "ReadPixel" auslesen. Die Informationen und die Hilfe sollten ausreichen. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn deine Auto-Grundform immer die Selbe ist, kannst du die Teile als Einzelne Bilder ja übereinander Zeichnen oder zu einem Bild zusammenfügen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Meinst Du sowas, wie in "Beispiel 2" ?
https://www.blitzforum.de/foru...hp?t=33529 |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, genau sowas meine ich.
Danke Sehr. Lg, M0rgenstern |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann mir vielleicht jemand erklären, wie ich das mit dem ReadPixel etc machen müsste?
Ich kapier dass nicht so ganz. Wenn ich ReadPixel mache, dann muss ich ja die x und y koordinaten eingeben. Das Problem ist halt, dass die "Skin" größer ist als die Grafik auf der gezeichnet werden soll. Wenn ich die Ergebnisse aus Readpixel in nem Array speichern würde, so wäre das Array größer als die Grundgrafik auf die gezeichnet werden soll. Ich hab mit sowas ledier nocht nei gearbeitet. Lg, M0rgenstern |
||
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn der skin z.b. 200 pixel breit ist, die grafik aber nur 100 pixel breit, dann würd ich einfach ausrechnen (100/200) sodass dann jeder 2. Schritt übersprungen wird. | ||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn die Pixel 1 zu 1 vermischt werden sollen:
BlitzMax: [AUSKLAPPEN] For Local destX:Int=0 Until destPixmap.width Ansonsten wäre das einfachste, eine temporäre Pixmap zu skalieren und dann auszulesen. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich hab das ganze jetzt mal folgendermaßen versucht:
BlitzMax: [AUSKLAPPEN] Graphics 1024, 768 Aber damit bekomme ich nur einen weißen Kreis. Den Code von dir habe ich auch getestet, mpmxyz, aber da gab es das Problem, dass im Prinzip nur ein winziger Ausschnitt der Textur genutzt wurde. Im Grunde soll aber die Textur runterskaliert werden. Lg, M0rgenstern |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um das hier mal flott zu gestalten hab ich mal eben diese Funktion aus den Rippen geschnitten.
Sie benutzt die Transparenz-Komponente der Maske und die Farb-Komponenten der Flagge und macht daraus eine neue Pixmap. Die Flagge wird auf jeden Fall auf die Größe der Maske verkleinert oder vergrößert. Ich weiß, dass man nicht einfach fertige codes hier reinwerfen sollte, aber ihr redet irgendwie alle um den heißen Brei herum und er verstehts trotzdem nicht so recht. Mal davon ab ist das nicht die schnellste Art so etwas zu gestalten. Auf keinen Fall ist es Realtime tauglich! M0rgenstern, tu mir den Gefallen und kopier das nicht einfach nur dumm, sondern lern auch mal was daraus! BlitzMax: [AUSKLAPPEN] Function PixmapMask:TPixmap (source:TPixmap, mask:TPixmap) Kleines Beispiel gibts auch noch dazu: BlitzMax: [AUSKLAPPEN] Graphics (640,480,0) Zusammensetzen wird er es schon noch selbst können... :> So long! |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey d-bug.
Vielen Dank. Weiß nicht, obs hilft, hatte noch keine Zeit mich an dieses Problem zu setzen. Hänger momentan an der Wegfindung für die Geister. Ist momentan dann doch wichtiger. Ich hoffe, dass ich dann morgen oder übermorgen an deinen Code kann. Vielen Dank nochmal. Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group