Bei mir geht es, sogar vom Firmen PC aus, aber es wäre vielleicht besser, wen ich es als ZIP speichere, sonst muss man jede Datei einzeln holen.Leider kann ich von Deinem Webspace keine Dateien öffnen/speichern.
Animation erstellen
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Es lag wohl an mir, jetzt kann ich Deine Dateien, allerdings einzeln, laden. Danke.
Um mal wieder ein Efolgserlebnis zu haben wollte ich die Schnittflächen meines Zylinders schraffiert darstellen. Dazu habe ich versucht eine Textur zu laden. Einige Tutorials habe ich dazu gelesen aber, nach einigen Stunden, habe ich nun aufgegeben. Benutzt hatte ich die "glBitmap.pas" und auch "Textures.pas" zum Laden.
Ein weiterer Versuch meine Eingaben mit Records zu ordnen scheitert ebenso an meinem Unwissen.
Es ist frustrierend aber momentan geht gar nix mehr bei mir weiter. Vielleicht sollte ich mir doch eine andere Freizeitbeschäftigung suchen.
Um mal wieder ein Efolgserlebnis zu haben wollte ich die Schnittflächen meines Zylinders schraffiert darstellen. Dazu habe ich versucht eine Textur zu laden. Einige Tutorials habe ich dazu gelesen aber, nach einigen Stunden, habe ich nun aufgegeben. Benutzt hatte ich die "glBitmap.pas" und auch "Textures.pas" zum Laden.
Ein weiterer Versuch meine Eingaben mit Records zu ordnen scheitert ebenso an meinem Unwissen.
Kannst Du mir dazu vielleicht einen Tipp geben?Hier geht es nur um das dynamische erstellen von Komponenten,
Mit ein bisschen Änderung kann man dies auch auf TEdit und TLabel anwenden.
Es ist frustrierend aber momentan geht gar nix mehr bei mir weiter. Vielleicht sollte ich mir doch eine andere Freizeitbeschäftigung suchen.
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Ich wies wie dies mit den Tutorials ist, zum Teil viel zu kompliziert.Einige Tutorials habe ich dazu gelesen aber, nach einigen Stunden, habe ich nun aufgegeben.
Einfache Beispiele sin viel mehr wert.
Der Umweg über diese Units kannst du dir sparen, der einfachsten Weg ist es, eine Images direkt in den Textur-Puffer zu schreiben, siehe Anhang.Benutzt hatte ich die "glBitmap.pas" und auch "Textures.pas" zum Laden.
Bei gedrückter ToggleBox dreht sich ein einfaches Rechteck mit einer Textur.
Da deine Animation aber nur in 2D ist, hast du es mit den Textur-Koordinaten sehr einfach, man kann einfach die x und y Punkte des Meshes übernehmen.
Dies wird in Arc mit der procedure gl(x,y) demonstriert.
Was noch wichtig ist, wen man Texturen und farbige Dreicke mischt, das man mit glEnable(GL_TEXTURE_2D) und glDisable(GL_TEXTURE_2D) den Textur Modus ein und aus schaltet.
Ich hoffe die Demo bringt dich weiter.
Nur nicht den Kopf hängen lassen, aller Anfang ist schwer.Es ist frustrierend aber momentan geht gar nix mehr bei mir weiter. Vielleicht sollte ich mir doch eine andere Freizeitbeschäftigung suchen.
Ich bin bei gewissen Sachen auch schon fast die Wände hoch gegangen.

- Dateianhänge
-
Texturen.zip
- (197.8 KiB) 94-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Vielen Dank für das Beispiel und den Zuspruch.
Woher kommt die Textur ? (im Beispiel scheint es das Lazarus-Icon zu sein?)
"Image1.Picture.Bitmap" kann ich nicht finden.
Meine Textur muss doch erst einmal irgendwo als bmp,jpg,png o.ä. vorhanden sein.
Woher kommt die Textur ? (im Beispiel scheint es das Lazarus-Icon zu sein?)
"Image1.Picture.Bitmap" kann ich nicht finden.
Meine Textur muss doch erst einmal irgendwo als bmp,jpg,png o.ä. vorhanden sein.
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Es ist ein bisschen blöd, das TImages versteckt sich unter dem OpenGLControl, im Objectinspektor sieht man es auf Anhieb."Image1.Picture.Bitmap" kann ich nicht finden.
Natürlich kann man auch ein TBitmap oder TPicture nehmen, alles was ein TRawImages hat und 24 oder 32 Bit ist.
Die Textur-Masse müssen x² sein, zB. 256,515,1024, etc.
Auch ist eine 32Bit-Images erforderlich, ansonsten muss man folgende Zeile anpassen.
Code: Alles auswählen
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, Image1.Picture.Bitmap.RawImage.Data);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Wahrscheinlich bin ich zu blöd. Ich finde leider nix.im Objectinspektor sieht man es auf Anhieb.
Re: Animation erstellen
Ich war zu schnell. Sorry, hab es gefunden.
Meine Nerven sind auch nicht mehr die besten!
Entschuldigung!
Meine Nerven sind auch nicht mehr die besten!
Entschuldigung!
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Es müsste unter Form1 und oberhalb OpenGLControl sichtbar sein.Wahrscheinlich bin ich zu blöd. Ich finde leider nix.
Ich habe noch Lade-Routine von mir gefunden, diese sollte so ziemlich alles unterstützen, welches 24/32 Bit hat.
Evtl. gehen auch 8Bit Images., da Lazarus diese in 24/32 Bit umwandelt.
Monochrom geht nicht, ausser 8Bit grau stufen Bilder.
Code: Alles auswählen
function LoadTexture(RawImage: TRawImage): GLuint;
type
TLookUpTableEntry = packed record
Description: packed record
Bits,
RPrec, RShift,
GPrec, GShift,
BPrec, BShift,
APrec, AShift: byte;
end;
GLformat: packed record
InternalFormat: GLint;
Format: GLenum;
DataFormat: GLenum;
end;
end;
const
FORMAT_LUT: array[0..5] of TLookUpTableEntry = (
// 32Bit mit Alpha
(Description: (Bits: 32; RPrec: 8; RShift: 16; GPrec: 8; GShift: 8; BPrec: 8; BShift: 0; APrec: 8; AShift: 24);
GLformat: (InternalFormat: GL_RGBA8; Format: GL_BGRA; DataFormat: GL_UNSIGNED_BYTE)),
// 32Bit mit Alpha ( Linux / Unit BGRABitmap )
(Description: (Bits: 32; RPrec: 8; RShift: 0; GPrec: 8; GShift: 8; BPrec: 8; BShift: 16; APrec: 8; AShift: 24);
GLformat: (InternalFormat: GL_RGBA8; Format: GL_RGBA; DataFormat: GL_UNSIGNED_BYTE)),
// 32Bit ohne Alpha
(Description: (Bits: 32; RPrec: 8; RShift: 16; GPrec: 8; GShift: 8; BPrec: 8; BShift: 0; APrec: 0; AShift: 24);
GLformat: (InternalFormat: GL_RGB8; Format: GL_BGRA; DataFormat: GL_UNSIGNED_BYTE)),
// 32Bit ohne Alpha ( Linux JPG )
(Description: (Bits: 32; RPrec: 8; RShift: 16; GPrec: 8; GShift: 8; BPrec: 8; BShift: 0; APrec: 0; AShift: 0);
GLformat: (InternalFormat: GL_RGB8; Format: GL_BGRA; DataFormat: GL_UNSIGNED_BYTE)),
// 8Bit 256 Graustufen
(Description: (Bits: 8; RPrec: 8; RShift: 0; GPrec: 8; GShift: 8; BPrec: 8; BShift: 0; APrec: 0; AShift: 24);
GLformat: (InternalFormat: GL_Luminance; Format: GL_Luminance; DataFormat: GL_UNSIGNED_BYTE)),
//// 1Bit Monochrom geht nicht
//(Description: (Bits: 1; RPrec: 1; RShift: 0; GPrec: 1; GShift: 0; BPrec: 1; BShift: 0; APrec: 0; AShift: 0);
//GLformat: (InternalFormat: GL_RGB; Format: GL_COLOR_INDEX; DataFormat: GL_BITMAP)),
//// 1Bit Monochrom PNG geht nicht
//(Description: (Bits: 1; RPrec: 1; RShift: 0; GPrec: 8; GShift: 8; BPrec: 8; BShift: 0; APrec: 0; AShift: 24);
//GLformat: (InternalFormat: GL_RGB; Format: GL_COLOR_INDEX; DataFormat: GL_BITMAP)),
// 24Bit
(Description: (Bits: 24; RPrec: 8; RShift: 16; GPrec: 8; GShift: 8; BPrec: 8; BShift: 0; APrec: 0; AShift: 0);
GLformat: (InternalFormat: GL_RGB8; Format: GL_BGR; DataFormat: GL_UNSIGNED_BYTE)));
var
TabNr, i: integer;
begin
TabNr := -1;
for i := 0 to Length(FORMAT_LUT) - 1 do begin
with RawImage.Description, FORMAT_LUT[i].Description do begin
if (Bits = BitsPerPixel) and
(RPrec = RedPrec) and (RShift = RedShift) and (GPrec = GreenPrec) and (GShift = GreenShift) and
(BPrec = BluePrec) and (BShift = BlueShift) and (APrec = AlphaPrec) and (AShift = AlphaShift) then begin
TabNr := i;
Break;
end;
end;
end;
if TabNr <> -1 then begin
glGenTextures(1, @Result);
glBindTexture(GL_TEXTURE_2D, Result);
with RawImage.Description, FORMAT_LUT[TabNr].GLformat do begin
glTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, Width, Height, 0, Format, DataFormat, RawImage.Data);
// glTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, Width, Height, 0, Format, GL_UNSIGNED_INT_8_8_8_8_REV, RawImage.Data);
end;
glGenerateMipmap(GL_TEXTURE_2D);
end else begin
ShowMessage('Undefiniertes Format');
Result := 0;
end;
end;
Code: Alles auswählen
var
TexID: GLuint;
TexID := LoadTexture(Image1.Picture.Bitmap.RawImage);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Danke dafür.
Sobald ich:
Jetzt mag ich erst einmal nicht mehr.
So schön es sein mag OpenGL zu nutzen aber der Preis dafür ist, für Anfänger wie mich, hoch. Trotz der großen Hilfe die man hier erhält schwindet irgendwann das Selbstvertrauen und damit die Motivation wenn man sich stundenlang nur im Kreis dreht. Viele Tutorials stiften mehr Verwirrung anstatt hilfreich zu sein.
Langsam zweifel ich wirklich ob es für mich Sinn macht noch mehr Frust aufzubauen. Ohne die Hilfe vom Mathias wäre schon Feierabend.
Ich muss mal drüber schlafen...
Sobald ich:
die Texture freigebe ist mein Bildschirm komplett weiß (leer). Ich habe praktisch das funktionierende Beispiel in mein Projekt übernommen. Was ist nun bei mir anders?glEnable(GL_TEXTURE_2D);
Code: Alles auswählen
// Initialisierung
procedure TSteuerung.FormCreate(Sender: TObject);
begin
SWWG:=0;
SWWB:=30;
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);
glMatrixMode(GL_TEXTURE); // Textur Scalieren
glLoadIdentity();
glScalef(5.2, 5.2, 1.0);
quadricParam := @gluNewQuadric;
TBSpeed.Position:= 30;
Winkel:=0;
VOR:= true;
BtVor.caption:= 'rückwärts';
DoubleBuffered := true;
end;
Jetzt mag ich erst einmal nicht mehr.
So schön es sein mag OpenGL zu nutzen aber der Preis dafür ist, für Anfänger wie mich, hoch. Trotz der großen Hilfe die man hier erhält schwindet irgendwann das Selbstvertrauen und damit die Motivation wenn man sich stundenlang nur im Kreis dreht. Viele Tutorials stiften mehr Verwirrung anstatt hilfreich zu sein.
Langsam zweifel ich wirklich ob es für mich Sinn macht noch mehr Frust aufzubauen. Ohne die Hilfe vom Mathias wäre schon Feierabend.
Ich muss mal drüber schlafen...
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Setzt mal mit glClearColor eine andere Farbe als weiss, wen mit den Texturen etwas nicht in Ordnung ist, werde diese Objekte auch weiss. somit unsichtbar.
Dann siehst du vielleicht auch mehr, was falsch sein kann.
Ich gucke am Abend dein Code-Schnippsel an vielleicht sehe ich noch was.
Dann siehst du vielleicht auch mehr, was falsch sein kann.
Ich gucke am Abend dein Code-Schnippsel an vielleicht sehe ich noch was.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Wenn ich eine andere Farbe nehme bleibt das Fenster leer (mit der neuen Hintergrundfarbe).
Meine Animation ist nicht mehr zu sehen.
Ich bewundere Deine Geduld mit mir!
Meine Animation ist nicht mehr zu sehen.
Ich bewundere Deine Geduld mit mir!
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Klammere mal diese beiden Zeilen aus, dann sollte das Object zumindest in schwarz sichtbar sein.
Diese Zeilen sinf für Alpha-Blendig ( Transparent-Effekte ). Wen in deiner Textur im Alpha-Kanal eine 0 steht, dann ist die Textur Transparent, also nicht sichtbar.
Was hast du für eine Textur genommen, das Icon von Lazarus ?
Wen es mit diesem geht, dann muss dies Zeile mit glTexImage2D...( für deine Textur angepasst werden.
Wen nicht, dann zeige mal den Code zwischen glBegin und glEnd. Stehen dort schön brav ein glTexCoord2f und ein glVertex3f ?
Probiere mal verschiedene Texturen in meinem Demo-Code aus.
Wen deine Textur nicht geht, aber das Icon von Lazarus, dann sende mir mal deine Textur und dann schaue ich welche Parameter du in glTexImage2D eintragen musst.
Code: Alles auswählen
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
Was hast du für eine Textur genommen, das Icon von Lazarus ?
Wen es mit diesem geht, dann muss dies Zeile mit glTexImage2D...( für deine Textur angepasst werden.
Wen nicht, dann zeige mal den Code zwischen glBegin und glEnd. Stehen dort schön brav ein glTexCoord2f und ein glVertex3f ?
Probiere mal verschiedene Texturen in meinem Demo-Code aus.
Wen deine Textur nicht geht, aber das Icon von Lazarus, dann sende mir mal deine Textur und dann schaue ich welche Parameter du in glTexImage2D eintragen musst.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Wenn ich die von Dir genannten Zeilen auskommentiere wird es dunkel. Meine Animationskomponenten sind schwarz aber sichtbar.
Ich habe,erst einmal, das Lazarus-Icon, wie in Deinem Beispiel, genutzt.
Was meinst Du mit:
Ich habe,erst einmal, das Lazarus-Icon, wie in Deinem Beispiel, genutzt.
Was meinst Du mit:
Ich habe ja, außer der Initialisierung, noch nix damit gemacht.zeige mal den Code zwischen glBegin und glEnd
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Animation erstellen
Dann ist klar, wieso das nix kommt.Ich habe ja, außer der Initialisierung, noch nix damit gemacht.
Füge mal bei deinem Code noch folgendes ein, am besten vor OpenGLControl1.SwapBuffers; , dann sollte ein Rechteck sichtbar werden.
Code: Alles auswählen
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// --- Textur Aktivieren
glEnable(GL_TEXTURE_2D);
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();
glDisable(GL_TEXTURE_2D);
Code: Alles auswählen
// glEnable(GL_TEXTURE_2D); // entfernen
glMatrixMode(GL_TEXTURE); // Textur Scalieren
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Ich habe Deinen Code eingefügt. Nun kann ich auch ein Quadrat welches mit dem Lazarus-Icon (mehrfach) gefüllt ist sehen.
Allerdings hat sich etwas an der Skalierung meines Fensters geändert. Das Rad ist "nicht mehr rund".
Alles scheint, in y, gestaucht zu sein.
Eigentlich wollte ich nur die Schnittflächen meines Zylinders schraffiert darstellen. Das daraus ein solcher Aufwand werden würde hatte ich nicht erwartet.
Die Schraffur ist als Bild vorhanden und sollte "nur" auf meinen Zylinder projeziert werden.
Allerdings hat sich etwas an der Skalierung meines Fensters geändert. Das Rad ist "nicht mehr rund".
Alles scheint, in y, gestaucht zu sein.
Eigentlich wollte ich nur die Schnittflächen meines Zylinders schraffiert darstellen. Das daraus ein solcher Aufwand werden würde hatte ich nicht erwartet.
Die Schraffur ist als Bild vorhanden und sollte "nur" auf meinen Zylinder projeziert werden.