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

Aktuelle Zeit: Fr Jul 18, 2025 04:04

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Apr 20, 2012 03:07 
Offline
DGL Member

Registriert: Do Apr 19, 2012 19:06
Beiträge: 4
Programmiersprache: Delphi 2010
Wenn ich versuche ein Textur mit "glTexImage2D" zu laden bekomme ich nur eine weiße Fläche und mit "gluBuild2DMipmaps" wird auch nur eine einfarbige Fläche (nicht weiß) gezeichnet nicht aber meine Textur.
Auch mit "LoadTexture" aus "Textures.pas" bekomme ich nur eine einfarbige Fläche wie bei "gluBuild2DMipmaps".

Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, MyGameEngineClock, dglOpenGL, GR32, Textures;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure FormDestroy(Sender: TObject);
  14.   private
  15.     { Private declarations }
  16.  
  17.     var
  18.       FClock: TMyGameEngineClock;
  19.       DC    : HDC;
  20.       RC    : HGLRC;
  21.       TEX   : glUint; // a texture
  22.  
  23.     procedure SetupOpenGL;
  24.     procedure ErrorHandlerGL;
  25.     procedure Render(Sender: TObject; var Done: Boolean);
  26.  
  27.   public
  28.     { Public declarations }
  29.  
  30.   end;
  31.  
  32. var
  33.   Form1: TForm1;
  34.  
  35. implementation
  36.  
  37. {$R *.dfm}
  38.  
  39.  
  40. function CreateOpenGLTextureFromBitmap32(const b32: TBitmap32): glUint; inline;
  41. begin
  42.   glGenTextures(1, @result);
  43.   glBindTexture(GL_TEXTURE_2D, result);
  44.  
  45.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // GL_NEAREST, GL_LINEAR
  46.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // GL_NEAREST, GL_LINEAR
  47.   glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP   , GL_FALSE );
  48.  
  49.   glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA, b32.Width, b32.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, b32.ScanLine[0]);
  50.   //gluBuild2DMipmaps(GL_TEXTURE_2D, 4, b32.Width, b32.Height, GL_BGRA, GL_UNSIGNED_BYTE, b32.ScanLine[0]);
  51. end;
  52.  
  53.  
  54.  
  55. procedure TForm1.FormCreate(Sender: TObject);
  56. var b32: TBitmap32;
  57. begin
  58.   FClock:= TMyGameEngineClock.Create;
  59.  
  60.   SetupOpenGL;
  61.  
  62.   Application.OnIdle:= Render;
  63.  
  64.   b32:= TBitmap32.Create;
  65.   b32.LoadFromFile('gradient.bmp');
  66.   TEX:= CreateOpenGLTextureFromBitmap32(b32);
  67.   b32.Free;
  68.  
  69.   //LoadTexture('gradient.bmp', TEX, false);
  70.   //LoadTexture('gradient.jpg', TEX, false);
  71.  
  72. end;
  73.  
  74. procedure TForm1.FormDestroy(Sender: TObject);
  75. begin
  76.   FClock.Free;
  77. end;
  78.  
  79. procedure TForm1.SetupOpenGL;
  80. begin
  81.   DC:= GetDC(Handle);
  82.   if not InitOpenGL then Application.Terminate;
  83.   RC:= CreateRenderingContext( DC,
  84.                                [opDoubleBuffered],
  85.                                32,
  86.                                24,
  87.                                0,0,0,
  88.                                0);
  89.   ActivateRenderingContext(DC, RC);
  90.  
  91.   //setup
  92.   //glEnable(GL_DEPTH_TEST);          //tiefentest on
  93.   //glDepthFunc(GL_LESS);
  94.   glDisable(GL_DEPTH_TEST);
  95.  
  96.   glEnable(GL_CULL_FACE);           //backface culling on
  97.   glCullFace(GL_FRONT);
  98.  
  99.   glClearColor(0.3, 0.4, 0.7, 0.0); //BG color: light blue
  100.  
  101.   glViewPort(0,0,ClientWidth,ClientHeight);
  102.   //glOrtho(0,1920,0,1080,0,1024); // needs glCullFace(GL_BACK);
  103.   glOrtho(0, 1920, 1080, 0, 0, 1024); // needs glCullFace(GL_FRONT);
  104. end;
  105.  
  106. procedure TForm1.ErrorHandlerGL;
  107. begin
  108.   if glGetError <> GL_NO_ERROR then
  109.     Caption:= gluErrorString(glGetError);
  110.  
  111. end;
  112.  
  113. procedure TForm1.Render(Sender: TObject; var Done: Boolean);
  114.  
  115.   procedure DrawQuad(const XPos, YPos, ZPos, Width, Height: single); inline;
  116.   begin
  117.     glBegin(GL_QUADS);
  118.       glVertex3f(XPos, YPos, -ZPos);
  119.       glVertex3f(XPos+Width, YPos, -ZPos);
  120.       glVertex3f(XPos+Width, YPos+Height, -ZPos);
  121.       glVertex3f(XPos, YPos+Height, -ZPos);
  122.     glEnd;
  123.   end;
  124.  
  125.   procedure DrawQuad_CustomColor( const XPos, YPos, ZPos, Width, Height: single;
  126.                                   const corner: integer;
  127.                                   const red, green, blue: single;
  128.                                   const alpha: single = 1.0
  129.                                 ); inline;
  130.   begin
  131.     ///  0..1
  132.     ///  3..2
  133.     case corner of
  134.       0: begin glColor4f(red, green, blue, alpha); glVertex3f(XPos      , YPos       , -ZPos); end;
  135.       1: begin glColor4f(red, green, blue, alpha); glVertex3f(XPos+Width, YPos       , -ZPos); end;
  136.       2: begin glColor4f(red, green, blue, alpha); glVertex3f(XPos+Width, YPos+Height, -ZPos); end;
  137.       3: begin glColor4f(red, green, blue, alpha); glVertex3f(XPos      , YPos+Height, -ZPos); end;
  138.     end;
  139.   end;
  140.  
  141. var timeTaken, averageFps: double;
  142. begin
  143.   Done             := false;
  144.   timeTaken        := FClock.GetTick(30);
  145.   averageFps       := FClock.GetAverageFps;
  146.   Application.Title:= FormatFloat('0.00', averageFps) + ' fps - ' + FormatFloat('0.0000', timeTaken) + 's per frame';
  147.   /// ----
  148.  
  149.   /// render
  150.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  151.  
  152.   {
  153.   glMatrixMode(GL_PROJECTION);
  154.   glLoadIdentity;
  155.   glViewPort(0, 0, ClientWidth, ClientHeight);
  156.   glOrtho(0, 1920, 1080, 0, 0, 1024);
  157.  
  158.  
  159.   glMatrixMode(GL_MODELVIEW);
  160.   glLoadIdentity;
  161.   }
  162.   // do something
  163.  
  164.   //glEnable(GL_ALPHA_TEST);
  165.   //glAlphaFunc(GL_GREATER, 0.1);
  166.  
  167.   //glEnable(GL_BLEND);
  168.   //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // normal
  169.   //glBlendFunc(GL_ONE, GL_ONE); // add
  170.   //glBlendFunc(GL_SRC_ALPHA, GL_ONE); // add with alpha
  171.   //glBlendFunc(GL_DST_COLOR, GL_ZERO); // mul
  172.   //glBlendFunc(GL_ONE, GL_ZERO); // none
  173.  
  174.  
  175.  
  176.   glDisable(GL_TEXTURE_2D);
  177.   glEnable(GL_BLEND);
  178.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // normal
  179.   glBegin(GL_QUADS);
  180.       DrawQuad_CustomColor(0, 0, 0, 1024, 1024, 0, 1, 0, 0);
  181.       DrawQuad_CustomColor(0, 0, 0, 1024, 1024, 1, 0, 0, 0);
  182.       DrawQuad_CustomColor(0, 0, 0, 1024, 1024, 2, 0, 0, 1);
  183.       DrawQuad_CustomColor(0, 0, 0, 1024, 1024, 3, 1, 1, 1);
  184.   glEnd;
  185.  
  186.   glEnable(GL_TEXTURE_2D);
  187.   glDisable(GL_BLEND);
  188.   glBindTexture(GL_TEXTURE_2D, TEX);
  189.   DrawQuad(1024, 0, 0, 1024, 1024);
  190.  
  191.   glDisable(GL_TEXTURE_2D);
  192.   glEnable(GL_BLEND);
  193.   glBlendFunc(GL_DST_COLOR, GL_ZERO);
  194.   glBegin(GL_QUADS);
  195.       DrawQuad_CustomColor(640, 128, 0, 768, 768, 0, 1, 0, 1);
  196.       DrawQuad_CustomColor(640, 128, 0, 768, 768, 1, 0, 1, 1);
  197.       DrawQuad_CustomColor(640, 128, 0, 768, 768, 2, 0, 0, 0, 0.2);
  198.       DrawQuad_CustomColor(640, 128, 0, 768, 768, 3, 0, 0, 0, 0.2);
  199.   glEnd;
  200.  
  201.  
  202.  
  203.  
  204.  
  205.   SwapBuffers(DC);
  206.  
  207.   ErrorHandlerGL;
  208. end;
  209.  
  210. end.
  211.  


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Apr 20, 2012 08:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 13, 2011 22:05
Beiträge: 218
Programmiersprache: Lazarus/FPC
ich weiß nicht genau was Bitmap32 für ein exaktes Format ist, das was du da in deinem Code benutzt, aber jedenfals musst du grundsätzlich dem glTexImage2D ein Array aus Zahlen übergeben (Pixeldaten) das du zuvor aus der Bitmap erstellst..
Ich zeig dir mal einen einfachen Code, (teils aus der Textures.pas) wie es auf jedenfal klappen sollte. Zumindest verwende ich teils diese Variante zum Texturen-laden.

Eine Bitmap wird erstellt, aus einer Datei geladen, die Daten daraus richtig in ein Longint-Array exportiert und mit diesem Array dann die Textur erstellt.

Code:
  1.  
  2.  var
  3.     Data: Array of LongWord;  //beinhaltet später die Pixeldaten vom Bitmap die an OpenGL übergeben werden
  4.     W, Width: Integer;
  5.     H, Height: Integer;
  6.     bmp: Tbitmap;
  7.     C: LongWord;
  8.     Line: ^LongWord;
  9.   begin
  10.     bmp := Tbitmap.Create;
  11.     bmp.pixelformat := pf32bit;
  12.     bmp.loadfromfile('deine datei.bmp');
  13.     Width := bmp.Width;
  14.     Height := bmp.Height;
  15.     SetLength(Data, Width * Height);
  16.     For H := 0 to Height - 1 do
  17.     Begin
  18.       Line := bmp.scanline[Height - H - 1];
  19.       For W := 0 to Width - 1 do
  20.       Begin
  21.         C := Line^ and $FFFFFF;
  22.         Data[W + (H * Width)] := (((C and $FF) shl 16) + (C shr 16) +
  23.             (C and $FF00)) or $FF000000;
  24.         inc(Line);
  25.       End;
  26.     End;
  27.     bmp.Free;
  28.     Texture := CreateTexture(Width, Height, GL_RGBA, addr(Data[0]));   //Mit der Funktion von unten werden hier die Daten in eine textur geladen. Texture ist vom Typ GluInt, deine TEX-Variable.
  29.  


Jetzt ist eine Bitmap mal einfach in ein Longint-Array gespeichert worden.
Und jetzt machst du daraus eine Textur für OpenGL (Feineinstellungen nach Wunsch)

Code:
  1.  
  2.   function CreateTexture(Width, Height, Format: Word; pData: Pointer): Integer;
  3.   var
  4.     Texture: GLuint;
  5.   begin
  6.     glGenTextures(1, Texture);
  7.     glBindTexture(GL_TEXTURE_2D, Texture);
  8.     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  9.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  10.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  11.     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA,
  12.       GL_UNSIGNED_BYTE, pData);
  13.     result := Texture;
  14.   end;
  15.  


lg
Ida

_________________
Ich teile manchmal heimlich durch Null. - Alber Einstein


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Apr 20, 2012 19:29 
Offline
DGL Member

Registriert: Do Apr 19, 2012 19:06
Beiträge: 4
Programmiersprache: Delphi 2010
"TBitmap32.Scanline" gibt "PColor32Array" zurück kann aber auch als "PColor32EntryArray " verwendet werden.
Code:
  1.  
  2.   PColor32 = ^TColor32;
  3.   TColor32 = type Cardinal;
  4.  
  5.   PColor32Array = ^TColor32Array;
  6.   TColor32Array = array [0..0] of TColor32;
  7.   TArrayOfColor32 = array of TColor32;
  8.  
  9.   TColor32Component = (ccBlue, ccGreen, ccRed, ccAlpha);
  10.   TColor32Components = set of TColor32Component;
  11.  
  12.   PColor32Entry = ^TColor32Entry;
  13.   TColor32Entry = packed record
  14.     case Integer of
  15.       0: (B, G, R, A: Byte);
  16.       1: (ARGB: TColor32);
  17.       2: (Planes: array[0..3] of Byte);
  18.       3: (Components: array[TColor32Component] of Byte);
  19.   end;
  20.  
  21.   PColor32EntryArray = ^TColor32EntryArray;
  22.   TColor32EntryArray = array [0..0] of TColor32Entry;
  23.   TArrayOfColor32Entry = array of TColor32Entry;
  24.  

 
 
Habe jetzt "glTexImage2D" geändert und bekomme nun auch mit "CreateOpenGLTextureFromBitmap32" keine weiße Fläche mehr aber immer noch einfarbig.
Code:
  1. glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA, b32.Width, b32.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, b32.ScanLine[0]);
  2. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, b32.Width, b32.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, b32.ScanLine[0]);


 
Auch die function "LoadTexture" aus "Textures.pas" liefert nur eine einfarbige Fläche.


Dein Beispiel erzeugt auch eine einfarbige Fläche wenn es denn mal nicht gerade an einer Zugriffsverletzung stirbt.
Code:
  1.  
  2.   function CreateTexture(Width, Height, Format: Word; pData: Pointer): glUint;
  3.   var
  4.     Texture: GLuint;
  5.   begin
  6.     glGenTextures(1, @Texture);
  7.     glBindTexture(GL_TEXTURE_2D, Texture);
  8.  
  9.     //glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  10.  
  11.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  12.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  13.  
  14.     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pData);
  15.     result := Texture;
  16.   end;
  17.  
  18.   function LoadBMPToTexture(const s: string): glUint;
  19.    var
  20.     Data: Array of LongWord;  //beinhaltet später die Pixeldaten vom Bitmap die an OpenGL übergeben werden
  21.     W, Width: Integer;
  22.     H, Height: Integer;
  23.     bmp: Tbitmap;
  24.     C: LongWord;
  25.     Line: ^LongWord;
  26.   begin
  27.     bmp := Tbitmap.Create;
  28.     bmp.pixelformat := pf32bit;
  29.     bmp.loadfromfile(s);
  30.     Width := bmp.Width;
  31.     Height := bmp.Height;
  32.     SetLength(Data, Width * Height);
  33.     For H := 0 to Height - 1 do
  34.     Begin
  35.       Line := bmp.scanline[Height - H - 1];
  36.       For W := 0 to Width - 1 do
  37.       Begin
  38.         C := Line^ and $FFFFFF;
  39.         Data[W + (H * Width)] := (((C and $FF) shl 16) + (C shr 16) +
  40.             (C and $FF00)) or $FF000000;
  41.         inc(Line);
  42.       End;
  43.     End;
  44.     bmp.Free;
  45.     result := CreateTexture(Width, Height, GL_RGBA, addr(Data[0]));   //Mit der Funktion von unten werden hier die Daten in eine textur geladen. Texture ist vom Typ GluInt, deine TEX-Variable.
  46.   end;
  47.  

 
Die folgenden drei Methoden liefern genau die gleiche einfarbige Fläche.
Code:
  1.  
  2. function CreateOpenGLTextureFromBitmap32(const b32: TBitmap32): glUint; inline;
  3. begin
  4.   glGenTextures(1, @result);
  5.   glBindTexture(GL_TEXTURE_2D, result);
  6.  
  7.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // GL_NEAREST, GL_LINEAR
  8.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // GL_NEAREST, GL_LINEAR
  9.   //glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP   , GL_FALSE );
  10.  
  11.   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, b32.Width, b32.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, b32.ScanLine[0]);
  12.   //gluBuild2DMipmaps(GL_TEXTURE_2D, 4, b32.Width, b32.Height, GL_BGRA, GL_UNSIGNED_BYTE, b32.ScanLine[0]);
  13. end;
  14.  
  15. function CreateOpenGLTextureFromBitmap32_2(const b32: TBitmap32): glUint; inline;
  16. var data: Array of cardinal;
  17.     x, y: integer;
  18.     s   : PColor32Array;
  19. begin
  20.   SetLength(data, b32.Height * b32.Width);
  21.  
  22.   y:= 0;
  23.   while y < b32.Height do
  24.   begin
  25.     s:= b32.ScanLine[y];
  26.     x:= 0;
  27.     while x < b32.Width do
  28.     begin
  29.       data[y * b32.Width + x]:= s[x];
  30.       Inc(x);
  31.     end;
  32.     Inc(y);
  33.   end;
  34.  
  35.   glGenTextures(1, @result);
  36.   glBindTexture(GL_TEXTURE_2D, result);
  37.  
  38.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // GL_NEAREST, GL_LINEAR
  39.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // GL_NEAREST, GL_LINEAR
  40.   glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP   , GL_FALSE );
  41.  
  42.   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, b32.Width, b32.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, data);
  43.   //gluBuild2DMipmaps(GL_TEXTURE_2D, 4, b32.Width, b32.Height, GL_BGRA, GL_UNSIGNED_BYTE, data);
  44. end;
  45.  
  46.  
  47. function CreateOpenGLTextureFromBitmap(const bmp: TBitmap): glUint;
  48. type TCardinalArray = packed array[0..MaxInt div SizeOf(cardinal) -1] of cardinal; PCardinalArray = ^TCardinalArray;
  49. var data: Array of cardinal;
  50.     x, y: integer;
  51.     s   : PCardinalArray;
  52. begin
  53.   SetLength(data, bmp.Height * bmp.Width);
  54.  
  55.   bmp.PixelFormat:= pf32bit;
  56.  
  57.   y:= 0;
  58.   while y < bmp.Height do
  59.   begin
  60.     s:= bmp.ScanLine[y];
  61.     x:= 0;
  62.     while x < bmp.Width do
  63.     begin
  64.       data[y * bmp.Width + x]:= s[x];
  65.       Inc(x);
  66.     end;
  67.     Inc(y);
  68.   end;
  69.  
  70.  
  71.  
  72.   glGenTextures(1, @result);
  73.   glBindTexture(GL_TEXTURE_2D, result);
  74.  
  75.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // GL_NEAREST, GL_LINEAR
  76.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // GL_NEAREST, GL_LINEAR
  77.   glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP   , GL_FALSE );
  78.  
  79.   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bmp.Width, bmp.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, data);
  80.   //gluBuild2DMipmaps(GL_TEXTURE_2D, 4, bmp.Width, bmp.Height, GL_BGRA, GL_UNSIGNED_BYTE, data);
  81. end;
  82.  



Was mir noch aufgefallen ist dass der Code auf meinem Host anders aussieht als in meiner VM.
Das obere Bild ist aus meiner VM und das untere von meinem Host warum gibt es hier so einen großen unterschied?
Bild


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Apr 20, 2012 20:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 13, 2011 22:05
Beiträge: 218
Programmiersprache: Lazarus/FPC
Ich hab mal auf die Schnelle ein Beispielprogramm geschrieben.
Neues Projekt...und 2 Buttons hinzufügen.
und dann einfach den code hier reinkopieren:
Und natürlich den Pfad zu einer existierenden Bitmap-textur ändern^^

Funktioniert hier bei mir einwandfrei...und sollte es EIGENTLICH auch bei dir^^

_________________
Ich teile manchmal heimlich durch Null. - Alber Einstein


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Apr 21, 2012 04:11 
Offline
DGL Member

Registriert: Do Apr 19, 2012 19:06
Beiträge: 4
Programmiersprache: Delphi 2010
Also dein Code verursacht bei mir immer eine Zugriffsverletzung in Zeile 75 "C := Line^ and $FFFFFF;".

Ist aber auch egal dank deinem Codebeispiel habe ich den Fehler dennoch gefunden und zwar hatte ich kein "glTexCoord2f" und dadurch wurde nur eine einfarbige Fläche gezeichnet, außerdem hatte ich noch die Ecken des quads in einer anderen Reihenfolge. Danke für deine mühe.
Jetzt noch den ganzen Texturkram in eine Klasse damit alles wieder etwas übersichtlicher wird.


Nochmal zu dem unterschiedlichen shading, in meiner VirtualBox habe ich ohne 3D-Beschleunigung nur OpenGL 1.1 und damit sieht es aus wie auf dem oberen Bild wenn ich aber 3D-Beschleunigung einschalte erhalte ich OpenGL 2.1 und dann sieht es aus wie auf dem unteren Bild, kann ich dies irgendwie umstellen? Mir gefällt das Ergebnis von OpenGL 1.1 besser.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Apr 21, 2012 11:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Nochmal zu dem unterschiedlichen shading, in meiner VirtualBox habe ich ohne 3D-Beschleunigung nur OpenGL 1.1 und damit sieht es aus wie auf dem oberen Bild wenn ich aber 3D-Beschleunigung einschalte erhalte ich OpenGL 2.1 und dann sieht es aus wie auf dem unteren Bild, kann ich dies irgendwie umstellen? Mir gefällt das Ergebnis von OpenGL 1.1 besser.

Eine Grafikkarte kann nur Dreiecke verarbeiten. Wenn du also ein Quad renderst muss das irgendwie in zwei Dreiecke geteilt werden. Wie das passiert hängt vermutlich vom Treiber ab. Im oberen Bild verläuft die Diagonale von oben links nach unten rechts. Im unteren Bild läuft dagegen die Diagonale von oben rechts nach unten links. Diese Diagonale bestimmt wie die Farben in den Ecken interpoliert werden.
=> Nutze ein TRIANGLE_STRIP, dann hast du die Kontrolle darüber wo die Diagonale läuft, musst aber trotzdem nur vier Vertices angeben.

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]