Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

OpenGL Anfängerproblem
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 10.10.2011, 20:05    Titel: Antworten mit Zitat

Alternative Probiert
Code:

'#Define GL_GLEXT_PROTOTYPES

#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include once "GL/glext.bi"
#include once "GL/glfw.bi"

Dim glCreateProgram As PFNGLCREATEPROGRAMPROC
glCreateProgram = cast( PFNGLCREATEPROGRAMPROC, glfwGetProcAddress( "glCreateProgram" ) )


Type GLhandle as GLuint
'Type GLhandleARB as GLuint

Dim ProgramObject        as GLhandle 'oder GLuint
'Dim VertexShaderObject   as GLhandle 'oder GLuint
'Dim FragmentShaderObject as GLhandle 'oder GLuint

ProgramObject = glCreateProgram()


Stürzt direkt ab, kann es sein das man mit FB mal wieder ohne zusätzliche libs sogut wie nichts machen kann?
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 10.10.2011, 21:04    Titel: Antworten mit Zitat

Öhm ja das ist der Hauptgrund, warum ich jetzt C++ nutze; die halbe Welt ist halt in C/C++, da hatte ich irgendwann keinen Bock mehr zich Header zu übersetzen, irgendwelche pain-in-the-ass-wrapper zu nutzen und jede boilerplate von Hand zu übersetzen. Irgendwann hat man davon halt die Fresse voll, in Java/C/C++ kannste halt sofort loslegen...

/e:
Zu deinem Absturz: Vorher nen OpenGL-Kontext erstellt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 985

BeitragVerfasst am: 10.10.2011, 21:24    Titel: Antworten mit Zitat

And here we go again...naja egal.

Nach aktuelleren Headern kann man auch hier schauen:
http://code.google.com/p/freebasic-headers/downloads/list

Man kann auch einfach so fragen, ob jemand aktuellere Header hat, z. B. im Forum oder im IRC-Channel. Ab der nächsten FreeBASIC-Version werden wieder einige Header aktueller sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 10.10.2011, 22:25    Titel: Antworten mit Zitat

Die 'neuen" GL Header für FB hab ich schon,
bin seit tagen mehr am googlen und lesen als wirklich am programmieren und immer wenn ich was probieren möchte hakt es an etwas...

den GL Context zu initiieren hatte ich vorher vergessen, aber beim nachholen, das gleiche... beim prüfen bekomme ich auch ein nullpointer
also wird die funtion wohl nicht gefunden...

Daher gehe ich davon aus das diese vermutlich intern noch ein anderen alias haben könnte...

Oder aber muss evtl. einen 'Core' context erstellen?!

So, alternative wäre eben GLEW, jetzt bin ich nur hobby coder, ich will was lesen, schreiben, probieren und mich über das ergebnis freuen,
nicht wochenlang googlen nur um EINEN header oder dergleichen zu übersetzen... überall erfreut man sich über glew, hab mir das ding geladen, jetzt hab ich die H header die mir swig nicht richtig übersetzt und eine lib aber keine .a, wie also soll ich das scheiss ding verwenden wenn ich kein plan habe wie ich das neu kompilieren und übersetzen soll und vorallem noch mehr sinnlose compiler ectl downloade (btw hab ich USB stick, downloads NERVEN mich zZ gewaltig selbst wenn es nur paar kB sind)

Jetzt war ich von den wrappern und engines und unmöglichen übersetzen cpp header ab und wollt mir was eigenes kleines basteln womit ich was 'basteln' kann aber scheinbar ist auch das nicht ohne weiteres möglich...

muss doch möglich sein OpenGL mit seinen Extensions in FB richtig benutzen zu können ohne nochmal ein Studium zu machen?

Edit:so bekomme ich scheinbar den Proc

Code:
#include once "windows.bi"

Dim glCreateProgram As PFNGLCREATEPROGRAMPROC

Function GetProc (byval ProcName as String) as any ptr
    Dim Proc as any ptr
    Proc = wglGetProcAddress ( ProcName )
    If Proc=0 Then
        CMsg "Error, could not find "+ProcName
        Return 0
    End If
    Return Proc
End Function

glCreateProgram=GetProc("glCreateProgram")

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 10.10.2011, 22:56    Titel: Antworten mit Zitat

MOD hat Folgendes geschrieben:
And here we go again...naja egal.

Och fühlt der kleine MOD sich wieder beleidigt, weil die Realität nicht in seine Blümchenwelt passt?

@Eternal pain:
Hmmm ich schau mal was nach. Bin in fünf Minuten wieder da.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 985

BeitragVerfasst am: 10.10.2011, 22:58    Titel: Antworten mit Zitat

Es ist ein Unterschied, etwas realistisch zu beschreiben oder einfach nur fertigmachen zu wollen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 10.10.2011, 23:02    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
@Eternal pain:
Hmmm ich schau mal was nach. Bin in fünf Minuten wieder da.

http://netload.in/datei6CMscWiFhY/glee.7z.htm (GLEE 5.4 mit .dll.a, .dll, .h und .c - 404 kB) - Das müsste dir weiterhelfen, denke ich.
Ansonsten evtl. https://github.com/skaslev/gl3w gl3w. Das ist extra für OpenGL 3/4 gedacht und lädt wirklich nur die Funktionen. Ist an sich ein Pythonscript, was eine .h und .c erstellt. Eventuell kannst du es im Skript direkt nach FB übersetzen, das Skript hat nur knapp 200 Zeilen. Das wäre dann mal eine wirklich native Lösung.

MOD hat Folgendes geschrieben:
Es ist ein Unterschied, etwas realistisch zu beschreiben oder einfach nur fertigmachen zu wollen.


Ab Level 5 können wir weiterreden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 985

BeitragVerfasst am: 10.10.2011, 23:17    Titel: Antworten mit Zitat

Ich fang mal ganz oben an: FreeBASIC ist ein Community-Projekt und vergleicht sich als solches nicht mit Mammutlösungen wie .NET etc.

Zudem wär es mir neu, dass du je auf so einem Level argumentiert hast, bisherige Posts sprechen für was anderes. Ich denke mal, das reicht wieder für diesen Thread, bis zum nächsten Mal (und ich bin sicher, dass es ein nächstes Mal geben wird, da bisherige Posts dafür sprechen).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 10.10.2011, 23:24    Titel: Antworten mit Zitat

hm, das klingt gut, nur laden kann ich es gerade nicht (dank meines ach so tollen inet sticks, IP adressen werden dort wohl geteilt was ein problem mit solchen Hostern ergibt, da er annimmt ich hätte dort schon geladen weil jemand mit der selben IP das bereits getan hat, komisches konzept...)
Auf der Seite http://elf-stone.com/glee.php ist in der ZIP leider auch nur eine lib

das script hab ich grad erstmal geladen, ohne es beim überfliegen zu verstehen beinhaltet es wohl
meine eigene Idee die mir gerade gekommen ist...

da ich mit der GetProc den Handle zur Function/Sub nun doch bekomme, könnte ich mal über die GLext.bi parsen und quasi eine extension zur extension basteln die man dann evtl in den GLInit linken könnte
so das nach erstellen des context diese Funktionen deklariert sind... ?!?!?

Wär toll wenn so sachen mal 'EINFACH' wären... wusste schon warum ich Shader gar nicht erst probieren wollte grinsen
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 10.10.2011, 23:29    Titel: Antworten mit Zitat

@MOD: Ich empfehle den Telekolleg Lesekompetenz für Anfänger als Einstieg
Letztes Wort.

@Topic:
Das Skript zieht sich die offizielle gl3.h und baut sie um, ja.
In Zeile 37-70 wird die .h erstellt, also im Prinzip immer EXTERN bla bla
In 75-200 steht der Quelltext der Bibliothek (.c), Danach kommt die load_procs die jedem Funktionspointer die Funktionsaddresse zuordnet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 11.10.2011, 03:29    Titel: Antworten mit Zitat

Meine Idee funktioniert, hab mir die ext geparst und alles dann in einer datei neu zusammengebastelt mit GetProc (alle die aufgerufen werden konnten)

jedenfalls hab ich mich vor lauter freude glatt auf'n arsch gelegt als mein test dreieck rot (vorher rosa) gezeichnet wurde... grinsen

Shader Loader:
Code:

Sub LoadShaderObject(byref Object as GLHandle, byval ShaderFile as String)
    Dim F as Integer
    Dim ShaderLength as glint
    Dim ShaderText   as GLChar ptr
   
    F = FreeFile
   
    Open ShaderFile for binary as #F
        ShaderLength=lof(F)
        ShaderText=allocate(ShaderLength+1)
        get #F,,*ShaderText,ShaderLength
    Close #F
   
    glShaderSource(Object, 1, @ShaderText, @ShaderLength)
End Sub



FragmentShader:
Code:

uniform sampler2D texSampler;
 
void main (void) {

 gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}


hab im portal die ext-ext.bi mal hochgeladen, scheint für's board aber wohl etwas zu gross, da er sie nicht richtig lädt?!

Edit:

http://www.freebasic-portal.de/code-beispiele/grafik-und-fonts/openglglsl-radial-blur-203.html

http://www.freebasic-portal.de/befehlsreferenz/screenglproc-559.html

hätte sehr geholfen hätte ich das mal vorher entdeckt >.<

Edit2:

Der Rest ist wohl nur noch reine Optimierung von Texturen und Berechnung, aber es sieht endlich mal ein bisschen nach was aus lächeln


_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.10.2011, 01:02    Titel: Antworten mit Zitat

Mach mal MSAA an, diese Kanten sind ja schröklich grinsen Sieht ansonsten schon mal ganz gut aus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 12.10.2011, 07:51    Titel: Antworten mit Zitat

Naja, ich experimentiere noch ein wenig, aber jetzt wo ich weiss das es geht und das nur noch 'feintuning' ist, komm ich wohl zum nächsten vermutlich wichtigsten problem?!

Obwohl eigentlich zwei:
das erste ist, obwohl ich nach dem schreiben der map das shaderprogramm mit glUseProgram(0) 'ausstelle' kann ich anschliessend andere objekte mit glbindtexture keine textur mehr zuweisen und bekommen alle die definierte Textur0 (bei der skybox sieht das nicht sehr toll aus happy)

Das zweite...
Vertex/Objekt Verwaltung?! bis jetzt war die map nur mit glBegin und glEnd in eine Displayliste 'geschrieben' bei dem versuch mal eine grössere map zu nehmen merkt man wie der PC ziemlich in die knie geht...
Fand das mit der Displayliste jetzt eignetlich sehr praktisch, aber ist wohl nicht so gut die ganze map in eine liste zu schreiben und diese dann aufzurufen...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.10.2011, 12:11    Titel: Antworten mit Zitat

Obwohl eigentlich zwei:
Eternal_pain hat Folgendes geschrieben:
das erste ist, obwohl ich nach dem schreiben der map das shaderprogramm mit glUseProgram(0) 'ausstelle' kann ich anschliessend andere objekte mit glbindtexture keine textur mehr zuweisen und bekommen alle die definierte Textur0 (bei der skybox sieht das nicht sehr toll aus happy)
Hm, wenn du Tex0 zugewiesen kriegst... hmhm... versuch mal GL_TEXTURE_2D aus und wieder einzuschalten. Oder "entbinde" die aktuelle Textur explizit...

Eternal_pain hat Folgendes geschrieben:
Das zweite...
Vertex/Objekt Verwaltung?! bis jetzt war die map nur mit glBegin und glEnd in eine Displayliste 'geschrieben' bei dem versuch mal eine grössere map zu nehmen merkt man wie der PC ziemlich in die knie geht...
Fand das mit der Displayliste jetzt eignetlich sehr praktisch, aber ist wohl nicht so gut die ganze map in eine liste zu schreiben und diese dann aufzurufen...
Wir hatten ja schonmal gesagt, dass glBegin/glEnd (Intermediate Mode) eh entfernt werden bzw. in 4 komplett raus sind und in 3 nur noch im Compat. Profil drin sind.
Die heutige Methode wäre es, ein VBO (Vertex Buffer Object) für deine Karte zu benutzen. Das ist kein wirklich großer Aufwand und meistens sogar einfacher beim Einlesen der Daten.
VBOs sind auch ..äh... sagen wir einfach mal deutlich schneller... zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 14.10.2011, 03:58    Titel: Antworten mit Zitat

Das Tutorial hatte ich mir zuvor schon mehrfach durchgelesen, jedoch nicht wirklich viel verstanden zumal mir ja eben auch die Procs fehlten was ich auch nicht verstand zwinkern

Nachdem ich das aber nun weiss ging das ganze recht schnell und auch einfach:

auch XOR's VBO+Shader Beispiel welches bei mir nicht ging läuft nun problemlos,
nach der erstellung eines 3.3 Core Context wollte der die Shader nicht laden, ohne Core Context ging das, nachdem ich einfach die Versionszeilen
in die Shader geschrieben habe
Code:
#version 330

gingen auch die Shader im Core Context... (komplizierter kram...)

Das VBO Tutorial (ohne umwege vom Hauptspeicher in den VRAM) laeuft,
konnte ich gut umsetzen...
Code:

#include "GL/gl.bi"
#include "GL/glu.bi"
#include "GL/glext.bi"

screenres 400,400,32,,&h02   
glViewport 0, 0, 400, 400
glMatrixMode GL_PROJECTION           
glLoadIdentity                         
gluPerspective 45.0, 400/400, 0.1, 100.0   
glMatrixMode GL_MODELVIEW               
glLoadIdentity               
glShadeModel(GL_SMOOTH)
glClearColor(0.0, 0.0, 0.0, 1.0)
glClearDepth(1.0)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LEQUAL)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)

'GL (VBO) Proc's

'glGenBuffers() is a core OpenGL function in OpenGL 1.5 and later
Common Shared glGenBuffers     as PFNGLGENBUFFERSPROC
'glGenBuffersARB() was an extension implementing the same functionality in earlier versions.
'Common Shared glGenBuffersARB as PFNGLGENBUFFERSARBPROC
Common Shared glBindBuffer     as PFNGLBINDBUFFERPROC
Common Shared glDeleteBuffers  as PFNGLDELETEBUFFERSPROC
Common Shared glBufferData     as PFNGLBUFFERDATAPROC
Common Shared glMapBuffer      as PFNGLMAPBUFFERPROC
Common Shared glUnmapBuffer    as PFNGLUNMAPBUFFERPROC

glGenBuffers    = ScreenGLProc ("glGenBuffers")
'glGenBuffersARB    = ScreenGLProc ("glGenBuffersARB")
glBindBuffer    = ScreenGLProc ("glBindBuffer")
glDeleteBuffers = ScreenGLProc ("glDeleteBuffers")
glBufferData    = ScreenGLProc ("glBufferData")
glMapBuffer     = ScreenGLProc ("glMapBuffer")
glUnmapBuffer   = ScreenGLProc ("glUnmapBuffer")

Type TVertex 'Type: GL_T2F_V3F
    S as Single 'TexCoord X
    T as Single 'TexCoord Y
    X as Single 'Vertex X
    Y as Single 'Vertex Y
    Z as Single 'Vertex Z
End Type


Dim VBO as GLuint
glGenBuffers(1, @VBO)
glBindBuffer(GL_ARRAY_BUFFER, VBO)
glEnableClientState(GL_VERTEX_ARRAY)

Dim VBOPointer as any ptr
glBufferData (GL_ARRAY_BUFFER, 4*SizeOf(TVertex), NULL, GL_STATIC_DRAW)
VBOPointer = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY)

Dim VertexDaten as TVertex PTR
VertexDaten = VBOPointer

'Quad
'links oben
VertexDaten[0].X = -1.0f : VertexDaten[0].Y =  1.0f : VertexDaten[0].Z =  0.0f
VertexDaten[0].S =  0.0f : VertexDaten[0].T =  1.0f
'rechts oben
VertexDaten[1].X =  1.0f : VertexDaten[1].Y =  1.0f : VertexDaten[1].Z =  0.0f
VertexDaten[1].S =  1.0f : VertexDaten[1].T =  1.0f
'rechts unten
VertexDaten[2].X =  1.0f : VertexDaten[2].Y = -1.0f : VertexDaten[2].Z =  0.0f
VertexDaten[2].S =  1.0f : VertexDaten[2].T =  0.0f
'links unten
VertexDaten[3].X = -1.0f : VertexDaten[3].Y = -1.0f : VertexDaten[3].Z =  0.0f
VertexDaten[3].S =  0.0f : VertexDaten[3].T =  0.0f

glUnmapBuffer(GL_ARRAY_BUFFER)

do
    if multikey(&h01) then exit do
   
    glTranslatef (0,0,-6)
    glInterleavedArrays(GL_T2F_V3F, SizeOf(TVertex), NULL)
    glDrawArrays(GL_QUADS, 0, 4)
   
    screensync
    flip
    glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
    glLoadIdentity()
Loop

glDeleteBuffers (1,@VBO)


Sehr vereinfacht, aber das Prinzip ist klar...

Denke aber das es damit allein noch nicht getan ist,
hab noch ein wenig gelesen und werd um eine Verwaltung
wohl kaum rumkommen bei sowas... (Stichwort Octree)

Wer hatte eigentlich mal behauptet OpenGL wär so einfach? happy
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 14.10.2011, 11:30    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Denke aber das es damit allein noch nicht getan ist,
hab noch ein wenig gelesen und werd um eine Verwaltung
wohl kaum rumkommen bei sowas... (Stichwort Octree)

Wer hatte eigentlich mal behauptet OpenGL wär so einfach? happy


Ah sieht schonmal gut aus. Wenns nur Terrain ist, langt btw. auch ein Quadtree, klappt aber nur für 2.5D-Objekte (unique XZ-Wertepaare)...
Niemand hat die Absicht zu behaupten, dass OpenGL einfach ist. Wenn du daber das Grundgerüst hast (und das hast du jetzt ja) ist der Rest aber nicht allzu kompliziert. DirectX ist imho auch nicht einfacher, besonders nicht in FB, weil du in FB manuell mit vtables rumspielen kannst... im Prinzip wie COM in C, also ziemlich painintheass
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 22.10.2011, 15:33    Titel: Antworten mit Zitat

Ich mal wieder zwinkern

Nachträgliche Antwort nach oben zwinkern
beim Terrain würde ein Quadtree wirklich ausreichen, soweit ich mich derzeit durchgelesen habe, aber im allgemeinen geht es mir um den umgang einer (vorerst) statischen Welt, das Terrain soll dazu nur erst einmal ein Anfang werden... für mein ansich zum testen immernoch eher kleines Terrain reicht sogar einfaches Frustum Culling aus (das ich inzwischen bereits funktionierend zusammengebastelt habe) bei einer grösseren und komplexen Map mit mehreren Objekten allerdings wohl nicht sinnvoll jedes einzelteil oder gar jeden vertex auf seine sichtbarkeit hin zu überprüfen, daher _versuche_ ich noch ein Octree umzusetzen...

Aber bis dahin...
Ich hab mir eine kleine Font Routine für OpenGL gebastelt, die ansich zwar gut funktioniert,
jedoch wenn ich die grösse der Fonts ändere hab ich immer sichtbare Randfragmente, hab im grunde
schon einiges Probiert, da ich zZ kein (gescheites) Programm habe das mit Alphamasken (PNG) richtig
arbeitet, hab ich eine andere Wahl für's 'Blending' gewählt, wobei gewollt war, das Schwarz(0)=transparent
und Weiss in diesem fall mit der glColor gezeichnet wird... (hoffe war halbwegs erklärt)

Hier mal ein Screen bei der ich die eigentlich 8x8 grossen Fonts auf das doppelte vergrössert habe:



Hab eine allgemeine Funktion zum laden der Textur (mit freeimage, atm nur BMP)
Code:

Function LoadTexture(byval filename as string) as GLuint
    Dim Dib       As FIBITMAP Ptr
    Dim Dib32     As FIBITMAP Ptr
    Dim SprWidth  As Integer
    Dim SprHeight As Integer
    Dim Bits      As Any Ptr
    Dim TextureID as GLuint
   
    glEnable(GL_TEXTURE_2D)
    glGenTextures(1, @TextureID)
      glBindTexture(GL_TEXTURE_2D, TextureID)

    Dib       = FreeImage_Load(FIF_BMP, filename, BMP_DEFAULT)   
    Dib32     = FreeImage_ConvertTo32Bits(Dib)
   
    SprWidth  = FreeImage_GetWidth(Dib32)
    SprHeight = FreeImage_GetHeight(Dib32)
    Bits      = FreeImage_GetBits(Dib32)
   
    glTexImage2D(GL_TEXTURE_2D, 0, 4, SprWidth, SprHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, Bits)
   
    gluBuild2DMipmaps(GL_TEXTURE_2D, 4, SprWidth, SprHeight, GL_BGRA, GL_UNSIGNED_BYTE, Bits)
   
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)
       
    FreeImage_Unload(Dib32)
    FreeImage_Unload(Dib)
   
    Return TextureID
End Function

Bei glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S / GL_TEXTURE_WRAP_T hab ich bereits alles ausprobiert
ob es abhilfe schafft...

Denke liegt wohl eher an die Blend-Methode

Hier mal meine Font Routine:
Code:

Type Font
        public:
       declare constructor()
       declare constructor(byval filename as string, byval fontscale as single)
       declare destructor()
      
   declare sub Init(byval filename as string, byval fontscale as single)

       declare sub color (byval r as single, byval g as single, byval b as single, byval a as single = 0)       
       declare sub print (byval x as single, byval y as single, byval text as string)
       
       private:
       Declare sub GenDList()
        DList          as GLuint

        TextureID   as GLuint
       
       Screen_width   as uinteger
       Screen_height   as uinteger
       
       Font_scale      as single

       c_r      as single
       c_g      as single
       c_b      as single
       c_a      as single
End Type

Constructor Font()
end constructor

Constructor Font(byval filename as string, byval fontscale as single)
    Init(filename, fontscale)
End Constructor

Destructor Font()
    If DList Then glDeleteLists(DList, 256)
    If TextureID Then
        glDeleteTextures(1, @TextureID)   
        TextureID=0
    End If
End Destructor

Sub Font.color (byval r as single, byval g as single, byval b as single, byval a as single = 0)
    c_r = r : c_g = g : c_b = b : c_a = a
End Sub


Sub Font.Init (byval filename as string, byval fontscale as single)
   Font_scale  = fontscale   
   TextureID   = LoadTexture(filename)
   
   c_r = 1.0f : c_g = 1.0f : c_b = 1.0f : c_a = 1.0f
          
   screeninfo Screen_width, Screen_height
   
   GenDList()
End Sub

sub Font.GenDList()
    Dim i as Integer
    Dim fstep as Single = 1.0f/16
     
    glMatrixMode(GL_MODELVIEW)
    glPushMatrix()
    glLoadIdentity()
   
    DList = glGenLists(256)
    glBindTexture(GL_TEXTURE_2D, TextureID)
       
    i = 0
    For ty as Single = 15 to 0 step -1
    For tx as Single = 0 to 15
           
            glNewList(DList+i, GL_COMPILE)
           
               glBegin (GL_TRIANGLE_STRIP)             
                  glTexcoord2f(tx*fstep, (ty+1)*fstep)
                    glVertex2i(0, Font_scale)
                 
                  glTexcoord2f(tx*fstep, ty*fstep)
                  glVertex2i(0, 0)
                 
                  glTexcoord2f((tx+1)*fstep, (ty+1)*fstep)
                  glVertex2i(Font_scale, Font_scale)             
                   
                    glTexcoord2f((tx+1)*fstep, ty*fstep)
                  glVertex2i(Font_scale, 0)
                 
               glEnd()
              
               glTranslatef(Font_scale, 0, 0)
              
            glEndlist()
             
            i += 1
           
        next tx
    next ty
   
    glPopMatrix()
End Sub

sub Font.print(byval x as single, byval y as single, byval text as string)
   
    Dim length as integer = len(text)
   
    glEnable(GL_TEXTURE_2D)
    glBindTexture(Gl_TEXTURE_2D, TextureID)
   
    glEnable(GL_BLEND)
    glBlendFunc(GL_SRC_COLOR, GL_ONE)
   
    glMatrixMode(GL_PROJECTION)
    glPushMatrix()
    glLoadIdentity()
   
    glMatrixMode(Gl_MODELVIEW)
    glPushMatrix()
    glLoadIdentity()
   
    glOrtho(0, Screen_width, 0, Screen_height, -1, 1)
   
    glDisable(GL_DEPTH_TEST)
   
    glTranslatef(x,(Screen_height-Font_scale)-y,0)
   
    glColor4f(c_r, c_g, c_b, c_a)
   
    glListBase(DList)
    glCallLists(length, GL_UNSIGNED_BYTE, @text)
   
    glMatrixMode(Gl_PROJECTION)
    glPopMatrix()
   
    glMatrixMode(Gl_MODELVIEW)
    glPopMatrix()
   
    glEnable(GL_DEPTH_TEST)

end sub


Vielleicht sieht ja jemand etwas das ich nicht sehe zwinkern oder hat einen hilfreichen Tipp wie ich solche Fragmente möglichst verhindern lassen...

Edit:
meine Font Bitmap:

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9681
Wohnort: Neben der Festplatte

BeitragVerfasst am: 22.10.2011, 16:16    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Bei glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S / GL_TEXTURE_WRAP_T hab ich bereits alles ausprobiert


Im Textur-Loader das hier zur spezifizieren hilft also nicht?
Code:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)

_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 22.10.2011, 16:33    Titel: Antworten mit Zitat

leider hat bisher nichts geholfen... (bei einem ähnliches Problem meiner SkyBox half das allerdings)

probiert hab ich:
GL_REPEAT (standard Einstellung)
GL_CLAMP
GL_CLAMP_TO_BORDER
GL_CLAMP_TO_EDGE
GL_MIRRORED_REPEAT
weitere sind mir nicht bekannt

Das MipMapping hab ich auch schon rausgenommen gehabt
(btw. find ich Texturen ohne MipMapping trotz der Kanten besser, sehen einfach 'schärfer' aus lächeln)
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 23.10.2011, 22:37    Titel: Antworten mit Zitat

Protip bei unscharfen Texturen: Höhere Auflösung. Ohne Mipmaps wäre mir imho auch das Kanten (eher Texel)flimmern zu stark...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter
Seite 2 von 4

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz