Français
Forum

OpenGL qui Zweite: Anti Aliasing

 
- page 1 -



Sven
Bader
Salut,

OpenGL dans XProfan pouvoir richtig Amusement, avec einer l'affaire suis je mais encore pas entier zufrieden. je hätte volontiers glatte Kanten (Antialisasing). quoi on so im Netz findet sommes qui Anleitungen eigentlich toujours juste et bien dans XProfan nachzustellen, malheureusement wird aussi entre den Polygonen, qui eigentlich zusammengehören geglättet - cela führt trop Löchern
j'ai déjà probiert, avec StartList/Endlist/Drawlist Dinge trop gruppieren, aussi habe je testweise grand Teile des Codes avec API Aufrufen ersetzt.

peut-être passiert im Init-Befehl quelque chose, dass sich pas avec cela verträgt?

Hat sich de euch Schonmal quelqu'un avec dem Thema befasst? je fände es aussi pour Jeux avec einfacher Grafik droite wichitg, es est irgendwie en supplément.

Viele Grüße
Sven

Im wesentlichen ist cela qui Code, qui den Objekten vorangestellt volonté muss:
oGL("glBlendFunc",&GL_SRC_ALPHA, &GL_ONE_MINUS_SRC_ALPHA)
oGL("glEnable", &GL_BLEND)
oGL("glEnable", &GL_POLYGON_SMOOTH);
oGL("glHint", &GL_POLYGON_SMOOTH_HINT, &GL_NICEST);

un lauffähiges Komplettbeispiel ist ici, avec Leertaste peut sich qui Glättung à et ausschalten:
'$H OpenGL.ph
Def &GL_POLYGON_SMOOTH	$B41;
Def &GL_NICEST	$1102;
Def &GL_ONE_MINUS_SRC_ALPHA	$303;
Def &GL_SRC_ALPHA	 $302;
Def &GL_POLYGON_SMOOTH_HINT	$C53;
Def &GL_ONE	1;
Def &GL_BLEND	3042;

proc DrawGLScene

    oGL("Clear")
    oGL("Color", 1,1,1,1)

    si (aa% = 1)

        oGL("glBlendFunc",&GL_SRC_ALPHA, &GL_ONE_MINUS_SRC_ALPHA)
        oGL("glEnable", &GL_BLEND)
        oGL("glEnable", &GL_POLYGON_SMOOTH);
        oGL("glHint", &GL_POLYGON_SMOOTH_HINT, &GL_NICEST);

    d'autre

        oGL("glDisable",&GL_POLYGON_SMOOTH)
        oGL("glDisable", &GL_BLEND)
        oGL("glBlendFunc",&GL_ONE, &GL_ONE)

    endif

    oGL("Origin", 0, 0, -4.0)
    oGL("Rotate", 0, 0, 22.5)
    oGL("Origin", -1.0, 0, -4.0)
    oGL("Quad", 2, 2)
    oGL("Origin", 1.0, 0, -4.0)
    oGL("sphere", 1,20,20)
    oGL("Show")

endproc

declare ende%, aa%
window 600,400
oGL("Init", %hWnd, 0.5, 0.5, 0.5, 0)
oGL("PosMode", 1)
aa% = 1
DrawGLScene()
ende% = 0

WhileNot ende%

    WaitInput

    si (%clé = 32)

        sleep 200
        aa% = abs(aa% - 1)

    elseif (%clé = 27)

        ende% = 1

    endif

    DrawGLScene()

Endwhile

oGL("Done")
end

Antialiasing AN, qui Ränder sommes ok, mais alle Schnittkanten avons Löcher





Standardzustand Antialiasing AUS, Schnittkanten ok, mais aucun Glättung





Hack: Anti Aliasing per Grafiktreiber erzwungen, so sollte es air




an.jpg  
27 kB
Bezeichnung:AA an
Hochgeladen:12.07.2021
Downloadcounter67
Download
17 kB
Bezeichnung:AA aus
Hochgeladen:12.07.2021
Downloadcounter66
Download
17 kB
Bezeichnung:AA über den Treiber erzwungen
Hochgeladen:12.07.2021
Downloadcounter72
Download
13 kB
Hochgeladen:12.07.2021
Downloadcounter69
Download
6 kB
Hochgeladen:12.07.2021
Downloadcounter73
Download
5 kB
Hochgeladen:12.07.2021
Downloadcounter60
Download
 
12.07.2021  
 



« cette Beitrag wurde comme Solution gekennzeichnet. »


Sven
Bader
Pour mon Zwecke habe je une Solution, qui malheureusement dans chaque quelque chose komplexerem Umfeld échouer wird.

je lege sur cela ungeglättete objet ....



... cela avec den glatten Kanten ...



... cela Ergebnis ist comment gewüsncht



Zum une ist es faux et unperformant cela ganze objet encore einmal trop zeichnen, zum anderen peux cet Methode trop anderen Problemen mener si cela objet aucun "culled faces" alors unsichtbare Rückseiten hätte ou bien jamais pour Beschaffenheit des Objekts Teile de sich selbst par qui Löcher sieht. aussi Kombination avec transparenten Objekten sorgt chez cette Solution pour Durcheinander.

intéressant trop voyons ist, dass cela Originalobjekt quelque chose kleiner ist et qui Glättung außen en supplément venez - là fragt on sich, comme überhaupt le Löchern im Innenbereich venez ...

une Interessante variante ist angwendetes Smoothing mais avec deaktiviertem Blending, so bekommt on cela "größere" objet, mais cela seulement am Rande.





Liegt qui Solution simple seulement dans qui richtigen glBlendFunc(), quelle letztendlich cela tut, quoi je avec deux identischen Objekten nachbilde ou bien peux es quelque chose avec Buffern ou bien oGL Grundeinstellungen trop 1faire avons?

ici qui neue Code
 $H OpenGL.ph

proc DrawGLScene

    oGL("Clear")
    oGL("Color", 1,1,1,1)

    si (aa%)

        oGL("glDisable", ~GL_BLEND)
        oGL("glDisable", ~GL_POLYGON_SMOOTH)
        'objet avec harten Kanten
        oGL("Push")
        oGL("Rotate", 0, 0, 22.5)
        oGL("Origin", -1.0, 0, -4.0)
        oGL("Quad", 2, 2)
        oGL("Origin", 1.0, 0, -4.0)
        oGL("sphere", 1,30,30)
        oGL("Pop")
        oGL("glBlendFunc",~GL_SRC_ALPHA, ~GL_ONE_MINUS_SRC_ALPHA)
        oGL("glEnable", ~GL_POLYGON_SMOOTH)
        oGL("glEnable", ~GL_BLEND)
        'Gleiches objet geglätten par-dessus
        oGL("Push")
        oGL("Rotate", 0, 0, 22.5)
        oGL("Origin", -1.0, 0, -4.0)
        oGL("Quad", 2, 2)
        oGL("Origin", 1.0, 0, -4.0)
        oGL("sphere", 1,30,30)
        oGL("Pop")

    d'autre

        oGL("glDisable", ~GL_BLEND)
        oGL("glDisable", ~GL_POLYGON_SMOOTH)
        oGL("Push")
        oGL("Rotate", 0, 0, 22.5)
        oGL("Origin", -1.0, 0, -4.0)
        oGL("Quad", 2, 2)
        oGL("Origin", 1.0, 0, -4.0)
        oGL("sphere", 1,30,30)
        oGL("Pop")

    endif

    oGL("Show")

endproc

declare ende%, aa%
window 600,400
oGL("Init", %hWnd, 0.5, 0.5, 0.5, 0)
oGL("PosMode", 1)
oGL("glHint", ~GL_POLYGON_SMOOTH_HINT, ~GL_NICEST);
ende% = 0
aa% = 1
DrawGLScene()

WhileNot ende%

    WaitInput

    si (%clé = 32)

        sleep 200
        aa% = abs(aa% - 1)

    elseif (%clé = 27)

        ende% = 1

    endif

    DrawGLScene()

Endwhile

oGL("Done")
end

1.png  
4 kB
Bezeichnung:1
Hochgeladen:19.07.2021
Downloadcounter76
Download
2.png  
4 kB
Bezeichnung:2
Hochgeladen:19.07.2021
Downloadcounter75
Download
3.png  
4 kB
Bezeichnung:3
Hochgeladen:19.07.2021
Downloadcounter63
Download
4.png  
4 kB
Bezeichnung:4
Hochgeladen:19.07.2021
Downloadcounter81
Download
 
19.07.2021  
 




Sven
Bader
j'ai den Beitrag comme gelöst deklariert quoique es aucun perfekte Solution gibt.

c'est wohl simple so, dass qui ursprüngliche Possibilité sur GL_POLYGON_SMOOTH de heutigen Grafiktreibern pas plus korrekt behandelt wird et on sur zeitgemäßere (et komplexe) Technologien zurückgreifen sollte. une Lösungsansatz avec oldschool OpenGL wäre encore cela mehrfache léger versetzte Rendern dans den Accumulation Buffer (glAccum), den habe je aussi déjà erfolgreich pour Motion Blur verwendet.
 
07.09.2021  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

2.674 Views

Untitledvor 0 min.
Sven Bader07.03.2023
Alibre14.01.2023
Ernst29.05.2022
Thomas Zielinski07.10.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

Sven Bader (3x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie