ich benutze die glaux.dll um Texturen zu laden.
jetzt möchte ich, dass eine bestimmte Farbe der Textur transparent dargestellt wird, ich hab aber keine Ahnung wie das mit glaux geht.
ich habe schon versucht das mit Tglbitmap zu machen aber da schaffe ich es nicht mal ganz normal ne Textur anzuzeigen, aber da weiss ich das man bestimmte Farben transparent machen kann.
könnte ihr mir entweder sagen wie ich das mit glaux oder tglbitmap hinbekomme? (Tglbitmap wäre mir lieber, da man sich die anschauen kann was bei der dll schlecht geht)
vielen Dank schon mal
mfg mandumoal
Zuletzt geändert von mandumoal am Do Mär 11, 2004 14:24, insgesamt 1-mal geändert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich arbeite auch gerade mit der glBitmap.
Dein Fehler hatte ich auch. Das liegt daran, dass du nicht TglBitmap sondern TglBitmap2D (für 2D Texturen) verwenden musst.
Dann ganz normal die reihenfolge:
Create [Pfad]
[Load wenn nicht schon bei Create]
genTexture
Bind
Und erst beim Programmende die Texturvariable freigeben.
Wenn du mehrer Texturen verwenden willst solltest du dir ein Feld (eventuell auch dynamisch) anlegen, wo alle TglBitmap2D drinliegen die du brauchst.
Dann aber nur 1x alle Texturen laden.
Zum Alpha Chanel: Zu aller erst brauchst du mal ne Textur die das hat. Zum Bsp. Png (glaube ich) und dann wes ich auch net weiter, da ich das bis Dato net brauchte. Lass mich aber gern belehren.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ja. Soweit ist das auch richtig. Als Bilder kannst du TGA's nehmen. In denen kannst du einen Alphakanal speichern. Weiß nicht ob png das kann. Du kannst den aber auch mit der glBitmap hinzufügen. Sofern es sich nur um eine Farbe handelt.
Dort gibt es eine Methode namens AddAlphaFromColorKey(). Der übergibst du einen Rot, Grün und Blauwert. Und schon wird der da ein Alphakanal erstellt. Mit dem Parameter Deviation kannst du noch eine maximal zulässige Abweichung von dem Farbwert angeben. Bei JPG's kann es durch die Komprimierung zu einer Farbveränderung kommen.
Zum Zeichnen musst du die Textur Binden. Und eine Alphafunc einstellen. Und diesen dann auch noch aktivieren. Anschließend kannst du deine Flächen zeichnen.
thenraise EglBitmapSizeToLargeException.Create('TglBitmap2D.GenTexture - The size for the texture is to large. It''s may be not conform with the Hardware.');
Natürlich sollte zum Zeitpunkt des Texturenladens OpenGL bereits initialisiert sein.
Das PNG Format unterstützt übrigens auch einen Alphakanal, und ist für Texturen an sich perfekt geeignet, da verlustfreie Kompression (wie GIF) und Echtfarbbilder sowie Alphakanal möglich sind.
Ich interpretiere eure plötzliche Stille jetzt einfach mal so, dass ich dreist war und zuviel verlangt habe.
Da aber Unterschiede zu euren Quellcodes nur noch in der Initialisierung liegen können wäre ich euch dankbar wenn ihr mir mal eine von euch zeigen könntet
Meine ist diese hier:
Code:
procedure TForm1.SetupPixelFormat;
var hHeap:THandle;
nColors, i:Integer;
lpPalette : PLogPalette;
byRedMask, byGreenMask, byBlueMask:Byte;
nPixelFormat:Integer;
pfd: TPixelFormatDescriptor;
begin
FillChar(pfd,SizeOf(pfd),0);
with pfd dobegin
nSize :=sizeof(pfd);// Länge der pfd-Struktur
nVersion :=1;// Version
dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wir sind nicht überfordert. Wir fahren nur gerne 260 Km quer durch Deutschland. Also zu mindest ich.
Dein Problem müsste sein, dass du zwar OpenGL Initialisiert hast aber vergessen hast due Extensions zu laden. In den RenderContextHelperFunctions (geiles Wort ) passiert das automatisch. Da du diese aber nicht benutzt musst du sie von Hand aufrufen.
Hänge das mal unter das wglMakeCurrent in deinem FormCreate.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Welchen Header verwendest du denn? Ich hab das Gefühl das du in deinem Programm nen anderen OpenGL-Header (OpenGL.pas, OpenGL12.pas) verwendest, aber in der glBitmap ja unser dglOpenGL.pas-Header verwendet wird.
Wenn dem so ist, liegt hier dein Problem. Du musst projektübergreifend den gleichen Header verwenden, also am besten unsere dglOpenGl.pas die auf dem neusten Stand ist. Finden tust du die unter Files->Bibliotheken.
Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.