Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Nov 01, 2024 00:34

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Textur aus einem Array laden
BeitragVerfasst: Do Mai 01, 2014 14:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jun 05, 2013 15:12
Beiträge: 166
Wohnort: Glinde
Programmiersprache: Delphi 7
Hallo Leute,

ich hoffe ich habe den richtgen Teil des Forums für mein Problem gewählt.

Ich habe einen Array, den ich in eine Textur verwandeln möchte, um eine Map zu erstellen.

Die Schritte die ich dafür gewählt hatte waren:

MapArray nach einen bestimmten Ereignis durchsuchen und per case die Farbe wählen.

R,G & B sollten Byte sein. Zumindestens denke ich mir das so.

Code:
  1.  
  2. case minimaparray[floor((i)+(i2*128))] of
  3. 0    : begin R:=80;  G:=180; B:=180; end;
  4. 1,2  : begin R:=230; G:=230; B:=166; end;
  5. 3,4,5: begin R:=64;  G:=120; B:=50; end;
  6. else
  7.   R:=255; G:=0; B:=0;
  8. end;
  9.  


Diese wollte ich nun in einen Stream speichern und per

Code:
  1.  
  2. Feldtextur:=TglBitmap2D.Create;         // Instanz der Klasse erstellen
  3. Feldtextur.LoadFromstream(TestStream);  // Datei laden
  4. Feldtextur.GenTexture;                  // geladene Textur an OpenGL übergeben
  5.  


laden.

Aber irgendwie fehlt mir etwas, damit ich es direkt in den Stream packen kann. Bzw. so das es auch wirklich funktioniert.

Daher bitte ich um Hilfe :oops:

PS.: Sollte es eine bessere Möglichkeit bzw. eine "Best Practices" Methode geben oder ihr einen bereits funktionierenden
Codeschnipsel haben, wo ich mir die Funktionsweise anschauen kann, wäre ich natürlich auch sehr Dankbar. :wink:

LG Polar

_________________
幸福は笑う人に来て ~~ koufuku wa warau hito ni kite
Das Glück kommt zu denen die lachen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur aus einem Array laden
BeitragVerfasst: Do Mai 01, 2014 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

wenn du die Textur von einem Stream laden willst, müssen die Daten im Stream einem unterstützten TexturFormat entsprechen (BMP, TGA, PNG, ...). Wenn du das mit der glBitmap machen möchtest hast du mehrere Möglichkeiten:
  • Deine Pixel in einer TBitmap speichern und dann diese TBitmap mit der glBitmap laden:
    Code:
    1. var
    2.   bmp: TBitmap;
    3.   tex: TglBitmap2D;
    4.  
    5. bmp := TBitmap.Create;
    6. tex := TglBitmap2D.Create;
    7. try
    8.   //bmp Pixel bearbeiten
    9.   tex.AssignFromBitmap(bmp);
    10.   tex.GenTexture;
    11. finally
    12.   FreeAndNil(bmp);
    13.   FreeAndNil(tex);
    14. end;
  • die glBitmap direkt aus einer Funtion laden:
    Code:
    1. var
    2.   tex: TglBitmap2D;
    3.   size: TglBitmapPixelPosition;
    4.  
    5. procedure LoadFunc(var aFuncRec: TglBitmapFunctionRec);
    6. begin
    7.   //PixelDaten in aFuncRec bearbeiten
    8. end;
    9.  
    10. size.Fields = [ffX, ffY];
    11. size.X := 128;
    12. size.Y := 128;
    13.  
    14. tex := TglBitmap2D.Create;
    15. try
    16.   tex.LoadFromFunc(size, @LoadFunc, tfRGB8, nil);
    17.   tex.GenTexture;
    18. finally
    19.   FreeAndNil(tex);
    20. end;
  • Die PixelDaten direkt an die glBitmap übergeben:
    Code:
    1. var
    2.   tex: TglBitmap2D;
    3.   size: TglBitmapPixelPosition;
    4.   data: array of packed record R, B, G: Byte; end;
    5.  
    6. size.Fields = [ffX, ffY];
    7. size.X := 128;
    8. size.Y := 128;
    9.  
    10. SetLength(data, 128 * 128);
    11. //daten bearbeiten
    12.  
    13. tex := TglBitmap2D.Create(size, tfRGB8, @data[0]);

ich denke die dritte Lösung ist für dich die besste, da du deine Daten ja schon in einem Array vorliegen hast.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur aus einem Array laden
BeitragVerfasst: Fr Mai 02, 2014 00:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jun 05, 2013 15:12
Beiträge: 166
Wohnort: Glinde
Programmiersprache: Delphi 7
Vielen Dank :D

Ich fürchte ich muss doch noch ein Studium beginnen.
Woher bekomme ich das tfRGB8?
Mein GL kennt das nicht...

OpenGL 4.4 - Headertranslation
Version 4.4
Date : 2013/07/22

Code:
  1.  
  2. procedure Minimaperstellen;
  3. var
  4.   IY,IX:integer;
  5.   Maptextur: TglBitmap2D;
  6.   size: TglBitmapPixelPosition;
  7.   data: array of packed record R, B, G: Byte; end;
  8. begin
  9.  
  10.   size.Fields := [ffX, ffY];
  11.   size.X := 128;
  12.   size.Y := 128;
  13.  
  14.   SetLength(data, 128 * 128);
  15.  
  16.   for IX:=0 to 127 do
  17.   begin
  18.     for IY:=0 to 127 do
  19.     begin
  20.       case minimaparray[floor((IX)+(IY*128))] of
  21.       0:begin
  22.           data[(IX)+(IY*128)].R:=80;
  23.           data[(IX)+(IY*128)].G:=180;
  24.           data[(IX)+(IY*128)].B:=180;
  25.         end;
  26.       1,2:
  27.         begin
  28.           data[(IX)+(IY*128)].R:=230;
  29.           data[(IX)+(IY*128)].G:=230;
  30.           data[(IX)+(IY*128)].B:=166;
  31.         end;
  32.       3,4,5:
  33.         begin
  34.           data[(IX)+(IY*128)].R:=64;
  35.           data[(IX)+(IY*128)].G:=120;
  36.           data[(IX)+(IY*128)].B:=50;
  37.         end;
  38.       6,7,8,9,10,11,12,13,14,15:
  39.         begin
  40.           data[(IX)+(IY*128)].R:=100;
  41.           data[(IX)+(IY*128)].G:=100;
  42.           data[(IX)+(IY*128)].B:=60;
  43.         end;
  44.       16,17,18,19,20:
  45.         begin
  46.           data[(IX)+(IY*128)].R:=180;
  47.           data[(IX)+(IY*128)].G:=180;
  48.           data[(IX)+(IY*128)].B:=180;
  49.         end;
  50.       else
  51.         data[(IX)+(IY*128)].R:=255;
  52.         data[(IX)+(IY*128)].G:=0;
  53.         data[(IX)+(IY*128)].B:=0;
  54.       end;
  55.     end;
  56.   end;
  57.  
  58.   try
  59.     Maptextur := TglBitmap2D.Create(size, tfRGB8, @data[0]);
  60.     Maptextur.GenTexture; // geladene Textur an OpenGL übergeben
  61.   finally
  62.     Maptextur.free;
  63.   end;
  64. end;
  65.  


Ich hoffe es würde so überhaupt klappen.

_________________
幸福は笑う人に来て ~~ koufuku wa warau hito ni kite
Das Glück kommt zu denen die lachen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur aus einem Array laden
BeitragVerfasst: Fr Mai 02, 2014 16:05 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
TglBitmap2D

Von welcher Unit kommt dieser Bezeichner her ?

In dglOpenGL.pas ist dieser nicht zu finden.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur aus einem Array laden
BeitragVerfasst: Fr Mai 02, 2014 16:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

@Polarwolf: das ist eines der Texturformate der glBitmap. Die sind in der neusten Version rein bekommen. Die findest du im DGL git Repo, oder im Projekt Thread (die Quellen im git sind etwas aktueller). Das sollte aber rein theoretisch auch mit der alten Verison gehen. Da musst du dir mal die Konstruktoren der TglBitmap2D ansehen, was genau die für Parameter erwarten.
€: das TglBitmap2D-Objekt darfst du erst freigeben wenn du die Textur nicht mehr brauchst, sonst wird die auch gelöscht. Es sei denn du setzt DeleteTextureOnFree auf false. Dann musst du dich aber auch selbst um das freigeben der Textur kümmern!


@mathias: TglBitmap2D ist eine Klasse zur Verwaltung von 2D-Texturen und stammt ebenfalls aus der glBitmap (siehe oben)

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur aus einem Array laden
BeitragVerfasst: Fr Mai 02, 2014 20:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jun 05, 2013 15:12
Beiträge: 166
Wohnort: Glinde
Programmiersprache: Delphi 7
:shock:

Erzeugen
[Warnung] glBitmap.pas(224): Hey. I'm the glBitmap.pas and i need to be configured. My master tell me your preferences! ;)
[Fehler] glBitmap.pas(1238): Undefinierter Bezeichner: 'DWord'
[Warnung] glBitmap.pas(3894): Vorzeichenbehaftete und -lose Typen werden verglichen - beide Operanden werden erweitert
[Warnung] glBitmap.pas(3944): Vorzeichenbehaftete und -lose Typen werden verglichen - beide Operanden werden erweitert
[Fehler] glBitmap.pas(1294): Ungenügende Forward- oder External-Deklaration: 'TFormatDescriptor.Map'
[Fehler] glBitmap.pas(1295): Ungenügende Forward- oder External-Deklaration: 'TFormatDescriptor.Unmap'
[Fataler Fehler] Modelliste.pas(5): Verwendete Unit 'glBitmap.pas' kann nicht compiliert werden

_________________
幸福は笑う人に来て ~~ koufuku wa warau hito ni kite
Das Glück kommt zu denen die lachen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur aus einem Array laden
BeitragVerfasst: Fr Mai 02, 2014 22:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

was hast du für'n System/Compiler/IDE? Was für ne glBitmap-Version ist das?

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur aus einem Array laden
BeitragVerfasst: Sa Mai 03, 2014 15:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jun 05, 2013 15:12
Beiträge: 166
Wohnort: Glinde
Programmiersprache: Delphi 7
Ich habe beide geladen und ausprobiert. In beiden Fällen das gleiche Ergebnis.
Auf meinen Laptop Delphi 6 Enterprise und die Version mit der ich auf meinem PC programmiere Delphi 7 Personal aus dem Buch "Delphi für Kids".

Aus dem Projekt Thread:
glBitmap_v3.0.0.zip [44.55 KiB] 42-mal heruntergeladen
mit der Adresse http://www.delphigl.com/forum/download/file.php?id=3110

Und die öffentliche Version die ich bei Git gefunden habe.
http://git.delphigl.com/?p=glBitmap.git;a=blob;f=glBitmap.pas;h=a2884dac0b53e1cd070156303601c3ebf75ea181;hb=ff53bc1bee76288fe2fe5daef580d1ce197f2020
------------------------------------------------------------
Version 3.0.0 unstable
------------------------------------------------------------
History
20-11-2013
refactoring of the complete library

_________________
幸福は笑う人に来て ~~ koufuku wa warau hito ni kite
Das Glück kommt zu denen die lachen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Textur aus einem Array laden
BeitragVerfasst: Sa Mai 03, 2014 18:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich hab grad ne neue Version freigegeben. Da sind noch paar andere Sachen gefixt, aber das hat nix mit deinem Fehler zu tun. Wenn du dir die Fehler mal genauer ansiehst, dann steht da das du die glBitmap noch konfigurieren musst (das ist jetzt in der v3.0.1 ein Error und kein Warning mehr). Unter der Meldung (im Code) hast du mehrere Einstellungsmöglichkeiten. Für dich sollte eigentlich GLB_DELPHI vollkommen ausreichen. Dann sollten auch die Fehler weg sein. Also:
  • {.$DEFINE GLB_DELPHI} einkommentieren => {$DEFINE GLB_DELPHI}
  • die Error Meldung auskommentieren: {$MESSAGE error 'Hey. I''m the glBitmap.pas ...'} => {.$MESSAGE ...
  • fertisch
Mit meinem D7 was ich hier hab funzt das dann alles ohne Probleme.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 28 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.013s | 15 Queries | GZIP : On ]