Texturen OpenGL

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...

Re: Texturen OpenGL

Beitragvon SoE » 7. Mär 2016, 18:31 Re: Texturen OpenGL

SoE
 
Beiträge: 84
Registriert: 31. Aug 2015, 00:51
OS, Lazarus, FPC: Windows 7 (x64 Sp1), Lazarus 1.6.0 x64 FPC 3.0.0 | 
CPU-Target: x64
Nach oben

Beitragvon Mathias » 7. Mär 2016, 18:36 Re: Texturen OpenGL

und bisher keine Texturen unter Lazarus in Opengl bekomme


Ich hoffe mit diesem kleine Beispiel kann ich dir helfen.

Code: Alles auswählen
unit unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, OpenGLContext, dglOpenGL;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Image1: TImage;
    OpenGLControl1: TOpenGLControl;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{ TForm1 }
 
var
  textureID0: GLuint;
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  glClearColor(0.8, 0.5, 0.3, 1.0);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glEnable(GL_DEPTH_TEST);
 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
 
  // --- Textur Aktivieren
 
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, textureID0);
 
  glBegin(GL_QUADS);
  glTexCoord2f(0.0, 0.0);
  glVertex3f(-0.8, -0.8, 0);
  glTexCoord2f(1.0, 0.0);
  glVertex3f(-0.8, 0.8, 0);
  glTexCoord2f(1.0, 1.0);
  glVertex3f(0.8, 0.8, 0);
  glTexCoord2f(0.0, 1.0);
  glVertex3f(0.8, -0.8, 0);
  glEnd();
 
 
  OpenGLControl1.SwapBuffers;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  InitOpenGL;
  OpenGLControl1.MakeCurrent;
  ReadExtensions;
  ReadImplementationProperties;
 
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LESS);
 
 
  // ------------ Texturen laden --------------
 
  with Image1.Picture.Bitmap do begin
    glGenTextures(1, @textureID0);
    glBindTexture(GL_TEXTURE_2D, textureID0);
 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, Image1.Picture.Bitmap.RawImage.Data);
 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glGenerateMipmap(GL_TEXTURE_2D);
  end;
 
  glEnable(GL_TEXTURE_2D);
end;
 
initialization
 
  {$I unit1.lrs}
 
end.
 
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3976
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 9. Mär 2016, 22:46 Re: Texturen OpenGL

Hier eine funktionierende Demo mit einer drehenden Textur.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3976
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Hartkern » 3. Jun 2016, 13:42 Re: Texturen OpenGL

Hallo Mathias.

nachdem ich dein Texturenbeispiel ordentlich umgebaut hab und endlich dahintergestiegen bin wie ich auch mehrere Texturen verwalte etc.brennt mir noch eines auf den Nägeln.

Ich kann mit deinem Beispielprogramm keine Tiefe des beklebten Objektes verwirklichen...

Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_Projection);
  glViewport(0,0,ClientWidth,ClientHeight);
  glLoadIdentity();
 
  glTranslatef(StartX,0.0,Zoom);
 
  //1. Reihe
  DrawMap(0.0,0.0,0.0);           //X:=X-0.25  Y:=Y-0.25
  DrawMap(-0.5,-0.5,0);
  DrawMap(-1.0,-1.0,0);               


wenn ich dann per Tastendruck die Variable Zoom beeinflusse, passiert erstmal nix und dann verschwindet die Textur komplett, oder erscheint. jedoch kommt keine Tiefe zustande... :?:
Hartkern
 
Beiträge: 68
Registriert: 5. Dez 2015, 20:03
Wohnort: Leipzig
OS, Lazarus, FPC: Win10 IDE 1.6 | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 3. Jun 2016, 15:13 Re: Texturen OpenGL

Ich wollte das bei deinem anderen OpenGL-Post schon schreiben: Bring zuerst mal die Matrizen in Ordnung. Es gibt zwei Matrizen in OpenGL, GL_PROJECTION und GL_MODELVIEW. Dein Code initialisiert nur die Projektions-Matrix, aber die ModelView-matrix wird ignoriert. Keine Ahnung, ob das deinen Fehler verursacht, aber die nicht-initialisierte Matrix erscheint mir schon sehr verdächtig.
Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_Projection);
  glViewport(0,0,ClientWidth,ClientHeight);
  glLoadIdentity();
 
  glMatrixMode(GL_MODELVIEW);   // <-- fehlt
  glLoadIdentity();             // <-- fehlt
 
  glTranslatef(StartX,0.0,Zoom);
 
  //1. Reihe
  //...
wp_xyz
 
Beiträge: 2529
Registriert: 8. Apr 2011, 08:01

Beitragvon Euklid » 3. Jun 2016, 15:38 Re: Texturen OpenGL

Teekeks hat geschrieben:
MAC hat geschrieben:
Code: Alles auswählen
if LoadTexture('D:/...',texID) = True then

:shock: Warum vergleichst du auf true? das result ist doch schon Boolean.

Das kann durchaus auch mal schief gehen (auch der Vergleich auf false)


Weshalb kann das schief gehen? Ist das nicht reine Geschmackssache?
Euklid
 
Beiträge: 2758
Registriert: 22. Sep 2006, 09:38
Wohnort: Hessen

Beitragvon Mathias » 3. Jun 2016, 17:25 Re: Texturen OpenGL

Diese Zeilen kommen normalerweise in ein Resize-Ereignis.
Code: Alles auswählen
 glMatrixMode(GL_Projection);
  glViewport(0,0,ClientWidth,ClientHeight);
  glLoadIdentity();


Das sieht meine Textur-Demo so aus, wie im Anhang.
Da sieht man auch, für was die Projections-Matrix gut ist.
Ich habe dafür die Alpha-Blending deaktiviert, das man es besser sieht.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3976
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •
Vorherige

Zurück zu Multimedia



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried