Falsche Darstellung [Erledigt]

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Elendil

Betreff: Falsche Darstellung [Erledigt]

BeitragMi, Sep 08, 2010 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey allerseits,
vorab: ich weiß, zu dem Thema gibts schon zich Topics, aber all dis was ich gefunden hab, war nicht wirklich das was ich gesucht hab und/oder hat mich nicht weitergebracht =\.
Dadurch, dass unser Gras Alpha-Texturen nutzt, gibt es öfters unschöne Grafikfehler (Gras wird vor Objekten gezeichnet, obwohl es eig. eher dahinter ist etc.). Wenn ich jetzt aber anstatt der alpha-Textur, eine Textur mit schwarzem Hintergrund nehme und diese maske, dann bleiben immer so unschöne schwarze Ränder übrig. Der eigentliche Fehler ist jedoch dann behoben. Jetzt meine Frage: Gibt es denn irgendeine Möglichkeit, diese schwarzen Ränder loszuwerden oder irgendwie anders mein Problem zu lösen? Hoffe ihr könnt mir helfen (und das ihrs einigermaßen gut verstehn konntet, auch wenns teilweise vllt bisschen schlecht geschildert wurde) Smile
Lg Elendil
  • Zuletzt bearbeitet von Elendil am Mi, Sep 08, 2010 23:16, insgesamt einmal bearbeitet
 

n-Halbleiter

BeitragMi, Sep 08, 2010 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du überprüft, dass die Randbereiche deiner Gräser im Bild auch wirklich schwarz sind?
Und, ganz wichtig: Nicht als JPG speichern, das gibt Verluste.
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

Elendil

BeitragMi, Sep 08, 2010 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab grad mal nachgeschaut, die sind tatsächlich nicht hunderprozentig schwarz.sind immer n bisschn drüber ..also 20,18,5 oder sowas. Sowas gibts aber erst, nachdem ich es als .png mit schwarzem Hintergrund gespeichert hatte. Davor war das Gras-Bild "sauber" von irgendwelchen schwarzen Rändern. Dachte eig. png funktioniert dafür ganz gut o_O. Oder könnte es noch einen anderen Grund haben?

hazumu-kun

BeitragMi, Sep 08, 2010 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
B3D müsste doch eigentlich mit dem alpha kanal in png's zurechtkommen, oder?
Versuch das mal.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Xeres

Moderator

BeitragMi, Sep 08, 2010 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Gras hatte dann keinen komplett gefüllten Alpha Kanal und wurde mit dem Schwarzen Hintergrund gemischt. Erst den Alphakanal entfernen, dann mit Schwarzem Hintergrund füllen.
B3D kommt mit einem Alpha Kanal zurecht, aber das versaut eben die Zeichenordnung. Darum ist die Maskierte Variante vermutlich die bessere Wahl.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Elendil

BeitragMi, Sep 08, 2010 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, Leider nicht oder ich versteh grade irgendwas falsch, dann tuts mir leid x_X

So siehts bei mir aus, wenn ich dem Ding hier ne PNG textur mit alpha kanal geb:

user posted image

Ich denke hier sieht man s ganz gut. Das Blatt von der Seite sollte eigentlich hinter dem frontalen sein. Man sieht es jedoch dennoch vor dem frontalen. (sorry fürs bescheuert erklären)

ähnliche Fehler, wie hier eingekreist, passieren auch beim Gras.

Edit: sorry Xeres, hatte dein Post erst jetzt gelesen. Das mit dem Alpha-Kanal werd ich mir nochmal anschauen. Thx

Edit2:

@ Xeres: Ahmm..okey: ich habs jetzt folgender Maßen gemacht[mit gimp]: Alles sichtbare kopiert - neues bild erstellt mit transparenter grundfläche - die mit schwarz gefüllt - die zwischenablage(gras) draufgeklatscht - gespeichert als png. aber es bleibt dabei. nachdem speichern bleibt immernoch son unschöner schwarzer Rand drum >.<

Edit3: Okey hab jetz ne lösung, wenn auch keine schöne. ich geh mit gim rüber mit diesem Farbchecker und prüf immer ob s wirklich schwarz is un färb ggf ein. so gehts jetzt erstmal für masked. thx an alle hier!
 

BIG BUG

BeitragMi, Sep 08, 2010 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann die folgenden Ursachen haben:
1. Dein Bild hat auch in der Zwischenablage bereits Halbtransparente Pixel. Wenn Du das auf den schwarzen Hintergrund kopierst wirst Du immer halbschwarze Pixel haben - Dies wird vermutlich der Fall sein, wenn die schwarzen Ränder extrem auffallen.

2. Eine Textur wird von der Grafikkarte nicht pixelgetreu angezeigt, sondern interpoliert. Wenn Du also einen schwarzen Hintergrund hast, dann werden allerdings auch die Randpixel mit den schwarzen Hintergrund des Bildes interpoliert und werden somit dunkler. - Dies ist bei Dir sicherlich auch der Fall aber nicht so auffällig.

Die allgemeine Lösung ist hier einfach: die Textur wird an den Rändern mit der entsprechenden Farbe oder einer ähnlichen Hintergrundfarbe einfach weitergezeichnet. Somit bleiben auch die interpolierten Pixel farbtreu (Wer schon eine falsche Hintergrundfarbe hat und nicht alle Ränder nachzeichnen möchte kann auch das kostenlose Plugin Solidify von Flaming Pear verwenden).

Wie Du schon festgestellt hast funktioniert das allerdings nur solange wie man keine Farbe maskieren muss.
Für die Maske muss also der Alphakanal verwendet werden - allerdings nicht mit Texture-Modus 2(welcher zu Deinem Problem mit dem Z-Ordering führt) sondern mit Modus 4.
Dazu gibt es zwei Möglichkeiten:
1. DDS(5)-Format verwenden - dies unterstützt auch in Blitz Alphamasken
2. Einfach Deine originale PNG-Textur mit Modus 2 laden und mit der folgenden Funktion eine Masked-Texture generieren:

Code: [AUSKLAPPEN]
Function CreateMaskTexture(tex, cutOff = 0)

    Local texWidth  = TextureWidth(tex)
    Local texHeight = TextureHeight(tex)
    Local maskTex   = CreateTexture(texWidth, texHeight, 5)
    Local x, y, pixel, alpha   

    If cutOff Then
   
        ;self defined cut off   
        LockBuffer TextureBuffer(maskTex)
        LockBuffer TextureBuffer(tex)   

        For y = 0 To texWidth - 1
            For x = 0 To texWidth - 1
                pixel = ReadPixelFast(x,y,TextureBuffer(tex))               
                If pixel Shr 24 => cutOff Then
                    ;set opaque
                    pixel = pixel Or $FF000000
                Else
                    ;set transparent
                    pixel = pixel And $00FFFFFF
                EndIf
                WritePixelFast x,y, pixel, TextureBuffer(maskTex)
            Next
        Next
   
        UnlockBuffer TextureBuffer(tex)
        UnlockBuffer TextureBuffer(maskTex)
   
    Else
        ;simple CopyRect works fine
        CopyRect 0,0, texWidth, texHeight, 0,0, TextureBuffer(tex), TextureBuffer(maskTex)   
    EndIf

    Return maskTex

End Function


Die zurückgegebene Textur musst Du dann deinem Objekt zuweisen, die geladene Textur kann mit Free gelöscht werden.

Wird der Cutoff-Wert nicht gefüllt, so ist ein Pixel ab einem Alphawert von 0.5(bzw. 129) voll sichtbar, darunter unsichtbar.
Oder Du legst den Cutoff-Wert selbst fest(1-255)...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Elendil

BeitragMi, Sep 08, 2010 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wouw danke für den ausführlichen Post Big Bug! werd ich mir auf jedenfall nochmal durchlesen, aber ich glaub hat s kein Sinn mehr! Aber ich schau s mir auf jedenfall morgen nochmal an, sieht vielversprechend aus ^^ Smile !

Edit1: Hey, deine Funktion funktioniert super Smile ! Tausend dank, hast mir mein Tag gerettet ^^. ich denk damit ist dis Problem gefixt Smile Thx an alle [again]

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group