[erledigt] gl-Texturfilter
Übersicht

![]() |
hecticSieger des IS Talentwettbewerb 2006Betreff: [erledigt] gl-Texturfilter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versuche bereits seit einiger Zeit den korrekten Texturfilter zu finden, damit diese, sofern verkleinert, nicht so ausgefranzt aussehen. Hier mal nen Beispiel:
Das linke Beispiel ist mit der Draw3D2 realisiert, das rechte mit BlitzMax Beispiel-Code: [AUSKLAPPEN] 'BEIM LADEN
glDisable(GL_DEPTH_TEST) glEnable(GL_TEXTURE_2D) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) 'BEIM ZEICHNEN glBindTexture GL_TEXTURE_2D,Handle glBegin GL_QUADS glTexCoord2f(0,0); glVertex2f(X,Y) ... Folgendes beim laden hat bei mir keinen Effekt: glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR) ---- ---- ---- [edit] ---- ---- ---- ---- ---- Irgendwie scheint es eine generelle Rendermethode bei BlitzMax oder GL zu sein, denn so weich aber auch etwas matschig sieht es nur bei Blitz3D aus. Schade trotzdem. Im übrigen teste ich schon seit gestern 16:00 Uhr nonstop aus, was geht. Probiert habe ich PureBasic, NuvlearBasic und nun noch BlitzMax. zu PureBasic: Sehr ausgereift, aber letztendlich für Leute, die 0815-Anwendungen programmieren. Sobald es ins Detail geht, wird es unnötig kompliziert. Desweiteren beträgt die höchste Auflösung die man mit 3D darstellen kann 2560 in X, danach ist Schluss. zu NuclearBasic: Sehr schnell, so lange man die Beispieldateien testet. Will man ein wenig mit Vertices arbeiten, ist es bis zum Stillstand langsam. Höchste Auflösung dafür jenseits UHD (also mehr als 3840*2160 möglich). Dazu sehr einfache Integration von Shadern. Vielleicht wage ich noch ein Versuch. zu BlitzMax: Sehr unausgereift. Dokumentationen sind Rar. Jeder frikelt für sich alleine rum, es gibt dazu kaum direkt ausführbaren Code zum Download. Es werden nur Zeilenweise Codebeispiele gepostet. Macht die Sache nicht einfach sich da rein zu arbeiten. Maximale Auflösung auch bei 3D mit UHD allerdings möglich. zu Blitz3D: Veraltet und mit DirectX7 auch nicht besonders schnell. Da die maximale Auflösung hier nur noch 2048*2048 in 3D beträgt, kommt für mich Blitz3D nicht mehr in Frage. Ansonsten ist es super für Hobbyentwickler. |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin mir nicht ganz sicher was dein Ziel ist.
Hast du schon probiert zum den GL_NEAREST-Filter zu verwenden? (Denke, der wird auch in BM so heißen, ist der Name den ich aus GL kenn) Ansonsten könntest du dir auch relativ leicht einen Shader dafür schreiben, soweit ich weiß geht das in BM ja. Der Shader wäre ziemlich einfach und würde es dir erlauben eine Filterfunktion genau so zu schreiben wie du sie haben willst. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich vermute du Sampelst nicht genau auf den Pixeln sondern an deren Rändern.
Ich weis nicht genau ob es das Problem ist, aber das Bild sieht stark danach aus. Hier ist eine Beschreibung für DirectX mit Bildern. http://msdn.microsoft.com/en-u...85%29.aspx |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ DAK
NEAREST ist ja im grunde eines der einfachsten Rendermethoden. Hier wird im grunde der nähste Texel genommen, der mit Übereinstimmung zum Bildschirmpixel steht. Ganz ohne Zwischenaufwand. LINEAR ist wiederrum eine sehr einfache Form der Überlagerung verschiedener Farbwerten. Hier wird der Zwischenwert eines jeden Bildschirmpixel aus dem linearem Verlauf zwischen zwei Texeln berechnet. Bei LINEAR erscheint es weicher, da mehr Informationen in den Bildschirmpixeln mit berücksichtigt werden. NEAREST hab ich bereits probiert, und dieses sieht dabei ja noch schlimmer aus. Das mit Shadern ist im übrigen eine sehr interessante Idee, die ich mal prüfen werden. Danke. @ Kruemelator Die Originaltextur hat 256x256 ARGB Pixel. Die Darstellung ist eben stark verkleinert und wird dabei gedreht. Ist im grunde nur ein einheitlicher Versuchsaufbau, denn ich nun mit Blitz3D, PureBasic, BlitzMax und NuclearBasic durchlaufen habe. Das Verschieben um 0.5 ist hier also irrelevant. BlitzMax schafft im übrigen hier so um 2400 FPS, und Blitz3D nur 880 FPS. Die Darstellung ist unter Blitz3D dabei aber viel besser. Ob BlitzMax auch so langsam ist, wenn es die gleiche Qualität darstellen muss, kann ich noch nicht sagen. Sicherlich werden Shader das ganze auch verlangsamen. Lange Rede kurzer Sinn, letztendlich möchte ich die Draw3D2 auf eine andere modernere Programmiersprache portieren. Die Draw3D2 (ich versuche jetzt zumindest nicht voreingenommen zu sein) ist eben sehr einfach in der Handhabung und ermöglicht viele Sachen, die unnötig nervig sein können wenn man ein Spiel programmiert. Es verzichtet auf unnötigen Schnickschnack alá "und jetzt der Spezialeffekt Numbero... 1001 - noch meeeeehr bunte Farben" und bietet Sachen die man braucht. Leider kann Blitz3D im 3D-Modus maximal 2048x2048 Bildschirmauflösung darstellen. Das nervt mich ungemein, sonst würde ich niemals wechseln. Aber wenn ich mir die Einschränkungen der anderen Sprachen ansehe, bleibe ich zuerst mal auf Blitz3D. Jede Programmiersprache hat ihre eigene Stärken und Schwächen, allerdings kommt keine auch nur ansatzweise an den Komfort von Blitz3D ran. Auch interessant im anderen Forum: http://forums.nuclearglory.com/index.php?tid=5230 Leider konnte mir hier keiner wirklich Helfen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: BlitzMax schafft im übrigen hier so um 2400 FPS Mit welchem Grafiktreiber? Weiß nicht, was da standardmäßig genommen wird, aber man kann ihn explizit setzen:
BlitzMax: [AUSKLAPPEN]
Womöglich schafft deine Grafikkarte mit einem anderen Treiber mehr? |
||
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) |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab die Grafik mit GLGraphics initiiert.
Der gesamte Code, wie er bisher als Grundlage zum Versuchsaufbau in den verschiedenen Sprachen genutzt wurde: Code: [AUSKLAPPEN] Const DRAWDISTANCE:Int=200
'====-===-==-=-=--=---=----=---- --- -- - - - - - Function Clear3D(FDrawFace:Int=0) 'OPENGL/EINSTELLUNGEN glLoadIdentity() glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) gluLookAt(0,0,0, 0,0,-1, 0,1,0) End Function Function DrawImage3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawAngle:Float=0,FDrawScale:Float=1) 'HARDCODED/VORGABEN Local IDrawXRan#=32*FDrawScale Local IDrawYRan#=32*FDrawScale 'EXTRA/WINKELBERECHNUNG Local IDrawTCos:Float=Cos(FDrawAngle) Local IDrawTSin:Float=Sin(FDrawAngle) Local IDrawXPos1:Float=IDrawXRan*IDrawTCos-IDrawYRan*IDrawTSin Local IDrawYPos1:Float=IDrawYRan*IDrawTCos+IDrawXRan*IDrawTSin Local IDrawXPos2:Float=IDrawXRan*IDrawTCos+IDrawYRan*IDrawTSin Local IDrawYPos2:Float=IDrawYRan*IDrawTCos-IDrawXRan*IDrawTSin 'TEXTURANPASSUNG glBindTexture(GL_TEXTURE_2D,FDrawHandle) 'QUAD/ZEICHNEN glBegin GL_QUADS glTexCoord2f(0,0); glVertex3f(FDrawX-IDrawXPos1,FDrawY+IDrawYPos1,-DRAWDISTANCE) glTexCoord2f(1,0); glVertex3f(FDrawX+IDrawXPos2,FDrawY+IDrawYPos2,-DRAWDISTANCE) glTexCoord2f(1,1); glVertex3f(FDrawX+IDrawXPos1,FDrawY-IDrawYPos1,-DRAWDISTANCE) glTexCoord2f(0,1); glVertex3f(FDrawX-IDrawXPos2,FDrawY-IDrawYPos2,-DRAWDISTANCE) glEnd End Function Function DrawInit3D(FDrawW:Float,FDrawH:Float,FDrawS:Int=0) 'STANDARD/EINSTELLUNGEN GLGraphics(FDrawW,FDrawH,FDrawS) glMatrixMode(GL_PROJECTION) 'OPENGL/EINSTELLUNGEN glScalef(2*DRAWDISTANCE/FDrawH,2*DRAWDISTANCE/FDrawH,1) gluPerspective(90,FDrawW/FDrawH,DRAWDISTANCE/2,DRAWDISTANCE*2) glMatrixMode(GL_MODELVIEW) End Function Function LoadImage3D(FDrawFile:String,FDrawMode:Int=2,FDrawBlend:Int=2) 'VARIABLEN/VORBERECHNUNGEN Local IDrawKing:Int=GLTexFromPixmap(LoadPixmap(FDrawFile)) 'OPENGL/EINSTELLUNGEN glEnable GL_TEXTURE_2D glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA 'FUNKTION/RÜCKGABEWERT Return IDrawKing End Function '====-===-==-=-=--=---=----=---- --- -- - - - - - DrawInit3D(1600,900) Local Angle:Float Local X:Int Local Y:Int Local Image1:Int=LoadImage3D("gis.png") While Not KeyHit(KEY_ESCAPE) Angle:+0.1 For Y=-9 To 9 For X=-16 To 16 DrawImage3D(Image1,X*40,Y*40,Angle+X*20+Y*20,0.5) Next Next DrawImage3D(Image1,0,0,Angle,2) 'FPS>>>>>>>> GLDrawText FPS,20,20 MSC=MilliSecs() If MSC>MTS Then MTS=MTS+1000; FPS=FRM; FRM=1 If MSC=>MTS+2000 Then MTS=MSC Else FRM=FRM+1; End If 'FPS<<<<<<<<<<<<<<<<< Flip 0 If KeyDown(KEY_SPACE)=0 Then Clear3D() Wend Das Image, das genutzt wurde: ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Blitz3D sampelt linear und nutzt MipMaps (triliniear). Außer Texturen die nur im VRam liegen, diese nutzten keine MipMaps. Die MipMaps könnten die besser Qualität erklären. | ||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, mir war nicht klar was du als Ergebnis haben wolltest. Was Nearest, Linear und Cubic sind ist mir schon klar.
Kann einfach an OGL liegen, dass es da nicht so schön rendert. Probier's mal mit DirectX. Was mir schon ein paar Mal untergekommen ist, ist dass der Grafiktreiber solche Sachen verpfuscht, da er denkt, er müsste was optimieren. Wenn du eine Nvidia- oder ATI-Karte hast solltest du in den Treibereinstellungen alles Mögliche an Optimierungen einstellen können. Die Intel-Treiber geben da nicht so viel her. Ich hab das z.B. bei einem Projekt von mir gehabt, wo ich die Engine für das Spiel in OpenGL geschrieben habe (also von der Basis auf). Wenn ich das Spiel mit den gleichen Einstellungen auf meiner Intel HD 4000 starte, dann schaut es schlechter aus als wenn ich es auf meiner Geforce 635M laufen lasse. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group