Image2Texture

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Phlox

Betreff: Image2Texture

BeitragSo, Jun 14, 2009 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,...

hab ein kleines Problem: Ich will ein Bild 1:1 auf einen Sprite übertragen und nutze folgende Funktion:

Code: [AUSKLAPPEN]
Function pres_ConvertImageToTexture(hand)
   Local tex=CreateTexture(ImageWidth(hand),ImageHeight(hand))
   CopyRect 0,0,ImageWidth(hand),ImageHeight(hand),0,0,ImageBuffer(hand),TextureBuffer(tex)
   Return tex
End Function


Nun, mein Problem ist, dass das irgendwie nicht funktioniert...einige Sprites zeigen nur einen Ausschnitt oder
das ganze Bild zu klein..was soll ich tun?

Goodjee

BeitragSo, Jun 14, 2009 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
die bilder müssen eine breite/höhe von 2^n haben
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Nicdel

BeitragSo, Jun 14, 2009 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Haben die Bilder eine Kantenlänge von 2^x und sind quadratisch?
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Phlox

BeitragSo, Jun 14, 2009 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, leider nicht...geht das sonst ÜBERHAUPT nicht?

Chrise

BeitragSo, Jun 14, 2009 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm doch notfalls resize Image her und skaliere dann das Sprite auf das Seitenverhältnis des Originalbildes Razz
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

ZaP

BeitragSo, Jun 14, 2009 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst auch einfach eine Textur mit 2er Potenzgröße erstellen (quadratisch) und das Bild darauf zentriert zeichnen. Beim Sprite drückst du das ganze mit Textureflag 4 drauf, dann wird der schwarze Überhang des zentrierten Bildes nicht mitgezeichnet.
Starfare: Worklog, Website (download)
 

Phlox

BeitragSo, Jun 14, 2009 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok...was geht jetzt nicht?

Code: [AUSKLAPPEN]
Function pres_ConvertImageToTexture(hand)
   TFormFilter 0
   Local tex=CreateTexture(512,512,4)
   CopyRect 0,0,ImageWidth(hand),ImageHeight(hand),256-(ImageWidth(hand)/2),256-(ImageHeight(hand)/2),ImageBuffer(hand),TextureBuffer(tex)
   Return tex
End Function

Goodjee

BeitragSo, Jun 14, 2009 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
sag du es uns? ne kleine fehlerbeschreibung wäre nett Very Happy
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Phlox

BeitragSo, Jun 14, 2009 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok...sry

So sieht es aus:
user posted image

So sollte es aussehen (Fotomongtage..xD)
user posted image

Goodjee

BeitragSo, Jun 14, 2009 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
das der hintergrund immer noch schwarz ist glaube ich ein fehler von b3d, das hatte ich auch schonmal und lies sich mit folgendem code lösen:

BlitzBasic: [AUSKLAPPEN]

LockBuffer(TextureBuffer(tex))
For x = 0 To 127
For y = 0 To 127
rgb = ReadPixelFast(x, y) And $00FFFFFF
If rgb <> 0 Then
WritePixelFast x, y, $FF000000 Or rgb
Else
WritePixelFast x, y, rgb
EndIf
Next
Next
UnlockBuffer()


den weißen kasten kann ich mir allerdings nicht erklären
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Phlox

BeitragSo, Jun 14, 2009 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hm...soll ich mal kompilieren und hochladen?
Source is über 770 Zeilen lang...

Goodjee

BeitragSo, Jun 14, 2009 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Function pres_ConvertImageToTexture(hand)
Local tex=CreateTexture(128,128,4)


CopyRect 0,0,ImageWidth(hand),ImageHeight(hand),64-(ImageWidth(hand)/2),64-(ImageHeight(hand)/2),ImageBuffer(hand),TextureBuffer(tex)
SetBuffer(TextureBuffer(tex))
LockBuffer()
For x = 0 To 127
For y = 0 To 127
rgb = ReadPixelFast(x, y) And $00FFFFFF
If rgb <> 0 Then
WritePixelFast x, y, $FF000000 Or rgb
Else
WritePixelFast x, y, rgb
EndIf
Next
Next
UnlockBuffer()
SetBuffer BackBuffer()
Return tex
End Function



läuft bei mir Smile
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Phlox

BeitragSo, Jun 14, 2009 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, danke, hast mein Programm gerettet!

Hier hast n Keks:
user posted image

Goodjee

BeitragSo, Jun 14, 2009 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
da fehlt ja schon ne ecke Shocked
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Phlox

BeitragSo, Jun 14, 2009 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja...folgende Personen hatten den schon:
Tim (nicht hier im Forum)
Ich (Phlox)
Und jetzt:
Goodjee

ToeB

BeitragSo, Jun 14, 2009 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber wenn du LockBuffer / UnlockBuffer benutz, brauchst du SetBuffer nicht merh, kann also weggelassen werden, stört hier eigl. nur Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

ComNik

BeitragSo, Jun 14, 2009 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry derbes Offtopic aber was is denn das für ne schicke IDE <.<

Danke @unter mir Wink
WIP: Vorx.Engine
  • Zuletzt bearbeitet von ComNik am So, Jun 14, 2009 21:29, insgesamt einmal bearbeitet

Eingeproggt

BeitragSo, Jun 14, 2009 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
@Toeb: Wieso? In einer verschachtelten Schleife hunderte und tausende Male auf den Buffer zuzugreifen is doch schlechter als ihn einmal zu setzen.

@ComNik: "IDEal". Absolut zu empfehlen Cool

EDIT: Ups, Nicknamen verwechselt Confused
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ToeB

BeitragSo, Jun 14, 2009 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@Eingeproggt : Wer lesen kann ist Klar im vorteil Very Happy . Zeigt sich hier auch wieder. Ich sagte das das hier keinen sinn macht :
Code: [AUSKLAPPEN]
SetBuffer TextureBuffer(tex)
LockBuffer()
...
UnlockBuffer()
SetBuffer BackBuffer()


Das könnte so viel besser aussehen und ist villeich auch schneller, müsste man ausprobieren :
Code: [AUSKLAPPEN]
buffer = TextureBuffer(tex)
LockBuffer(buffer)
...
writePixelFast(xx,yy,$FFF...,Buffer)
...
UnlockBuffer Buffer


So hat man z.B. nicht das problem, wenn man zufällig grad einen anderen Buffer offen hat, das dann hinterher plötzlich der Backbuffer geöffbet wird...


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Eingeproggt

BeitragSo, Jun 14, 2009 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja stimmt dein Vorschlag is besser. Aber sag mir mal wie ich das aus deinem ersten Post rauslesen hätte sollen?
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group