Textur mit alpha kanal zeichnen.
Übersicht

![]() |
AnniXaBetreff: Textur mit alpha kanal zeichnen. |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
gibt es eine möglichkeit eine textur mit beachtung des alpha kanals zu zeichnen? ich möchte eine textur im buffer aus mehreren zusammensetzen bzw übereinander blenden. dazu nützt mir draw3d leider nichts ![]() viele codeschnipsel hier im forum können nur 50% transparentz etc, ich möchte aber den alpha kanal komplett berücksichtigt haben, also 0-255. es muss NICHT in echtzeit passieren, das ist mir egal. gibt es diese möglichkeit? wenn es keine gibt werde ich mir selber eine basteln müssen, eine idee hätte ich ja evtl schon, aber das würde sicher ewig dauern das zu schreiben, bzw bis ich das aus meinem hirn herausbekomme :O |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du möchstest schreib ich dir einen Texturebuffer merger ![]() |
||
Warbseite |
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke!
![]() ich such mal nach textur buffer merger :O vllt gibts das ja schon. edit: okay ich habe nochmal etwas genauer gesucht, und für alle die vieleicht später einmal danach suchen: https://www.blitzforum.de/foru...hp?t=30082 |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
mal zwei funktionen zum "blenden" der Texturen:
Code: [AUSKLAPPEN] ;Texture Merger
Function MergeTextureAdd(Tex1, Tex2, AChan=0) OutT = CreateTexture(TextureWidth(Tex1), TextureHeight(Tex2)) W1 = TextureWidth(Tex1):W2 = TextureWidth(Tex2) H1 = TextureWidth(Tex1):H2 = TextureWidth(Tex2) TB1 = TextureBuffer(Tex1):TB2 = TextureBuffer(Tex2):TB3 = TextureBuffer(OutT) LockBuffer TB1:LockBuffer TB2:LockBuffer TB3 For X1 = 0 To W1 For Y1 = 0 To H1 ARGB1 = ReadPixelFast(X1, Y1, TB1) ARGB2 = ReadPixelFast(X2, Y2, TB2) A1 = (ARGB1 And $FF000000) Shr 24 R1 = (ARGB1 And $FF0000) Shr 16 G1 = (ARGB1 And $FF00) Shr 8 B1 = (ARGB1 And $FF) A2 = (ARGB2 And $FF000000) Shr 24 R2 = (ARGB2 And $FF0000) Shr 16 G2 = (ARGB2 And $FF00) Shr 8 B2 = (ARGB2 And $FF) P# = A2 / 255.0 A3 = 255 If AChan = 1 A3 = Max(A1 + A2 * P#, 255) R3 = Max(R1 + R2 * P#, 255) G3 = Max(G1 + G2 * P#, 255) B3 = Max(B1 + B2 * P#, 255) ARGB3 = (A3 Shl 24) Or (R3 Shl 16) Or (G3 Shl 8) Or B3 WritePixelFast X1, Y1, ARGB, TB3 Y2 = (Y2 + 1) Mod H2+1 Next X2 = (X2 + 1) Mod W2+1 Next UnlockBuffer TB1:UnlockBuffer TB2:UnlockBuffer TB3 Return OutT End Function Function MergeTextureMin(Tex1, Tex2, AChan=0) OutT = CreateTexture(TextureWidth(Tex1), TextureHeight(Tex2)) W1 = TextureWidth(Tex1):W2 = TextureWidth(Tex2) H1 = TextureWidth(Tex1):H2 = TextureWidth(Tex2) TB1 = TextureBuffer(Tex1):TB2 = TextureBuffer(Tex2):TB3 = TextureBuffer(OutT) LockBuffer TB1:LockBuffer TB2:LockBuffer TB3 For X1 = 0 To W1 For Y1 = 0 To H1 ARGB1 = ReadPixelFast(X1, Y1, TB1) ARGB2 = ReadPixelFast(X2, Y2, TB2) A1 = (ARGB1 And $FF000000) Shr 24 R1 = (ARGB1 And $FF0000) Shr 16 G1 = (ARGB1 And $FF00) Shr 8 B1 = (ARGB1 And $FF) A2 = (ARGB2 And $FF000000) Shr 24 R2 = (ARGB2 And $FF0000) Shr 16 G2 = (ARGB2 And $FF00) Shr 8 B2 = (ARGB2 And $FF) P# = A2 / 255.0 A3 = 255 If AChan = 1 A3 = Min(A1 + A2 * P#, 0) R3 = Min(R1 - R2 * P#, 0) G3 = Min(G1 - G2 * P#, 0) B3 = Min(B1 - B2 * P#, 0) ARGB3 = (A3 Shl 24) Or (R3 Shl 16) Or (G3 Shl 8) Or B3 WritePixelFast X1, Y1, ARGB, TB3 Y2 = (Y2 + 1) Mod H2+1 Next X2 = (X2 + 1) Mod W2+1 Next UnlockBuffer TB1:UnlockBuffer TB2:UnlockBuffer TB3 Return OutT End Function Function Max(A,B) If A>B Return B Return A End Function Function Min(A,B) If A<B Return B Return A End Function ungetestet, sollten der logik nach funktionieren |
||
Warbseite |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, hab ich das richtig verstanden?
Würde dir EntityTexture ![]() Eventuell auch in Verbinung mit TextureBlend ![]() ![]() Ich sags gleich: Hab ich noch nie gemacht, aber mein Gefühl sagt mir dass es so einfacher geht als es sich selbst zu schreiben. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke ihr beiden
ja eigentlich wäre es mit EntityTexture wohl leichter, aber die textur ist nicht für ein 3d objekt bestimmt, eher möchte ich darin informationen speichern. danke cgamer ich schaue mir deine auch mal an =) |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du Informationen speichern willst, warum nimmst du dann dafür Texturen? o.0
Es ist doch total umständlich erstmal eine Information auf eine Textur zu bekommen, und die dann später wieder richtig auszulesen. Also ich finde, da könnte man gleich Array (Dimfeld) benutzen. Wäre viel praktischer. ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
eigentlich wäre es wohl wirklich klüger,
aber als grafik kann ich es speichern und besser auswerten ![]() bzw anzeigen lassen. es handelt sich um höhen informationen für ein b3d terrain. also unterm strich möchte ich mehrere bilder mit hügeln und so weiter zufällig auf eine schwarze fläche pappen. |
||
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
gibt es dazu nicht die möglcihkeit heigthmaps zu verwenden? ![]() |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@da_poller:
Sie will während des Programmablaufes eine Hightmap aus vorher bereitgestellten teilen zufällig erzeugen. So habe ich das jetzt auf jedenfall verstanden. @Anni: Wenn du es mit Arrays machst, geht das auch ![]() _______[ERSTELLEN EINER ZUFÄLLIGEN MAP MIT ARRAYS]___________ Nehmen wir an, deine Hightmap besteht aus 128x128 "Feldern" in jedem von diesen Feldern ist eine Höhe gespeichert. Du kannst die Terrainhöhe mit ModifyTerrain ![]() Wenn du jetzt eine zufällige Map erzeugen willst, reicht es, einfach die Höhe jedes Feldes neu zu errechnen. Dazu ein kleiner Tipp: -Du lässt zufällig einigen Feldern eine zufällige Höhe zuweisen. Die Felder, die in der Nähe liegen, passen sich der Höhe sanft an, sodass schöne Berge entstehen. Natürlich musst du drauf achten, dass die Felder, denen eine Höhe zugewiesen wird, nicht zunah aneinander liegen, denn sonst könnte es sehr steile Wände geben, wenn sich eine maximale Höhe direkt neben einer minimalen Höhe befindet. Ich persönlich würde eine zufällig generierte Map besser finden, als eine, die immer aus den selben Teilen besteht. Denn sonst sehen die Hügel vielleicht immer gleich aus, wenn du verstehst ![]() _______[SPEICHERN]___________ Wenn du die Map speichern willst, speicherst du sie nicht als Bild ab, sondern erstellst dein eigenes Dateiformat, das nur die Höhenwerte der einzelnen Felder enthält. Das hat nicht nur den Vorteil, dass jeder Leihe die Map nicht einfach mit Paint verändern kann, sondern man lernt dadurch sicher auch ein bisschen, was man später in Blitz immerwieder benötigt ![]() Dafür gibt es die Befehle wie WriteFile ![]() ![]() ![]() ![]() Das könnte zum Beispiel für eine Kleine Map so aussehen: Zitat: 0000000000000 0000100111000 1001211121100 2100101232100 3210000121100 4321000111000 Das laden so einer Map funktioniert dann eigentlich genau umgekehrt. Du ließt aus der gespeicherten Datei die Werte wieder aus, und modifizierst dementsprechend das Terrain ![]() Du kannst das zufällig erzeugte Terrain direkt nach oder während des Erstellens betrachten, und kannst nach belieben die Werte in einen ImageBuffer schreiben, und per Savebuffer auchnoch die Hightmap als .bmp speichern, wenn du das willst ![]() PS: Bei Fragen, bitte offen sein und fragen ^-^ |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Falls deine Frage noch nicht komplett beantwortet ist, sage doch einmal, was du erreichen willst.
Habe es noch nicht richtig verstanden |
||
between angels and insects |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group