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

Aktuelle Zeit: Mi Jul 16, 2025 20:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Picture stretchen
BeitragVerfasst: Di Feb 21, 2006 18:36 
Offline
DGL Member

Registriert: Di Feb 21, 2006 18:25
Beiträge: 14
Hallo.
bin heute zum ersten mal hier und bin gerade dabei mit OpenGL anzufangen.
Habe auch schon ein wenig Zeit auf dieser Seite verbracht.
So und nun zum Problem:
Ich muß auf meinem Formular bis zu 256 Pictures unterbringen. (die Bilder an der gleichen Position können unterschiedlicht sein)
Die Originalgröße ist 32*32 Pixel. Da ich aber die Größe des Formulars ändern können muß soll sich auch die Größe
der einzelnen Pictures mit ändern. Bzw. wenn ich nur mal z.B. 32 Pictures hab muß sich die größe auch dementsprechend ändern so das das ganze Formular ausgefüllt ist.
Also ohne OpenGL läuft das Programm schon, aber relativ langsam, besonders dann wenn ich mehr als 32 Pictures hab.
Könnt ihr mir sagen wie ich sowas machen kann? :roll: :?: :D :D

Gruß Jogigonzo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 21, 2006 18:48 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ich gehe davon aus, dass du dich im Orthomodus befindest.
Und dem ist egal wie gross dein Fenster insgesamt ist. Es interessieren nur die Werte die du angegeben hast.
Es wird dann automatisch hochskaliert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 21, 2006 19:07 
Offline
DGL Member

Registriert: Di Feb 21, 2006 18:25
Beiträge: 14
Hallo,

Orthomodus? :shock: keine Ahnung! Ich klaub so weit bin ich noch nicht.
Ich vermute das ist das was ich brauche.
Wie geht das?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 21, 2006 19:12 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Tutorial 2D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 21, 2006 21:17 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bevor du dich in das 2D Tutorial stürzt, solltest du dir noch die ersten 4 Lektionen, und eventuell den Quickstart anschauen. Dann hast du ein fundament, damit du mit dem 2D Tutorial was anfangen kannst. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 14:25 
Offline
DGL Member

Registriert: Di Feb 21, 2006 18:25
Beiträge: 14
Hallo,
ich habe mir nud die ersten4 Turorials mal duchgelesen, hab dann sogar das mir der Sonne Erde Mond gemacht, und noch ein paar andere Übungen.
Dann die 2D gelesen.
Und nu:
Wenn ich LoadTexture('C:\Test.BMP', MyTex, False); laden will dann kommt soforte ne Zugriffsveletzung. Toll :cry:
Das ganze ist zwar gut geschrieben, aber ob es wirklich für Einsteiger taugt ist fraglich(zumindestens für mich). :shock:
zuweilen ich die Texture.pas noch nicht gefunden hab. Hab dafür die glbitmap.pas genommenVielleicht liegt es ja daran.
Nur schlecht wenn man laufend von etwas spricht, was man braucht, aber das nicht direkt bekommen kann.
Vielleicht könnt ihr mir ja sagen warum ich eine Zugriffsverletzung bekomme????? :?:
Villeicht ne Ide :idea:

Gruß Jogigonzo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 14:33 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
glBitmap funktioniert Objektorientiert. Das heißt, du hast vermutlich vergessen die Texturinstanz per Create zu erstellen, bevor du sie benutzt. Siehe Glbitmap_loader bei Texturen_laden.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 15:11 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
glBitmap hat auch das Loadtextures und es funktioniert nur genauso.
Ansich kommt da aber auch keine Schutzverletzung und ohne weitere Infos können wir dir nicht helfen.
Code, wann tritt die Verletzung auf, was steht in ihr?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 17:47 
Offline
DGL Member

Registriert: Di Feb 21, 2006 18:25
Beiträge: 14
Hallo,
So jetzt hab ich mal alles aus meinem Code entfernt was ich schon alles versucht und getestet hab (damit es nicht ganz so wild aussieht) :wink:
OK.
Also im Prinzib soll das Ganze was ich jetzt noch habe die Übung mit der Sonne/erde/Mond aus dem Turorial3 sein.
Hat auch alles prima geklappt.
Jetzt hab ich mal eine Bild so geladen wie Flash mit Glbitmap_loader geschrieben hat. Zumindestens kam keine Zugriffsverletzung wieder. Wenn es immer mehrer möglichkeiten gibt etwas zu machen bringt mich immer ganz durcheinander :shock: );
Jetzt wollt ich eigentlich mal die Sonne nicht nur als gelb gefülltes Viereck sehen sondern die geladene BitMap in der Sonne darstellen, um dann zu sehen ob sich die BitMap auch der Größe der Sonne anpasst. (was eigentlich mein Problem ist) siehe weiter oben.
Aber irgendwas stimmt noch nicht. Ich habe immer noch meine gelbe Sonne und kein Bild.
Was fehlt noch????
Gruß Jogigonzo

ach hätte ich fast vergessen ...den Code:
Code:
  1.  
  2. unit OpenGLQ;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs,dglOpenGL,glbitmap, ImgList, ExtCtrls, StdCtrls, ComCtrls;
  9.  
  10.  
  11. CONST   NearClipping = 1;
  12.         FarClipping  = 1000;
  13.  
  14. type
  15.   TOpenGLF = class(TForm)
  16.     MMQ_ImageList2: TImageList;
  17.     Panel1: TPanel;
  18.     Panel2: TPanel;
  19.     TrackBar1: TTrackBar;
  20.     TrackBar2: TTrackBar;
  21.     TrackBar3: TTrackBar;
  22.     TrackBar4: TTrackBar;
  23.     procedure FormCreate(Sender: TObject);
  24.     procedure FormResize(Sender: TObject);
  25.     procedure FormDestroy(Sender: TObject);
  26.     procedure TrackBar1Change(Sender: TObject);
  27.     procedure TrackBar2Change(Sender: TObject);
  28.     procedure TrackBar3Change(Sender: TObject);
  29.     procedure TrackBar4Change(Sender: TObject);
  30.     procedure FormShow(Sender: TObject);
  31.   private    { Private-Deklarationen }
  32.     FMyIma : TglBitmap2D;
  33.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  34.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  35.     procedure SetupGL;
  36.     procedure Render;
  37.   public    { Public-Deklarationen }
  38.     DC                                : HDC;  //Handle auf Zeichenfläche
  39.     RC                                : HGLRC;//Rendering Context
  40.   end;
  41.  
  42. var
  43.   OpenGLF: TOpenGLF;
  44.   MyBitMap : TBitMap;
  45.   winkel:real=45;
  46.   tiefe:real=-6;
  47.   rota:real=0;
  48.   scale:real=1;
  49.  
  50.  
  51.  
  52. implementation
  53.  
  54. {$R *.dfm}
  55. procedure TOpenGLF.SetupGL;
  56.  begin
  57.   glClearColor(0.0, 0.0, 0.0, 0.0); //Hintergrundfarbe 0.4.05.07
  58.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  59.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  60.  end;
  61.  
  62. PROCEDURE TOpenGLF.FormCreate(Sender: TObject);
  63.  BEGIN
  64.   DC:= GetDC(Panel2.Handle);
  65.   if not InitOpenGL then Application.Terminate;
  66.   RC:= CreateRenderingContext( DC,
  67.                                [opDoubleBuffered],
  68.                                32,
  69.                                24,
  70.                                0,0,0,
  71.                                0);
  72.   ActivateRenderingContext(DC, RC);
  73.   SetupGL;
  74.  END;
  75.  
  76. PROCEDURE TOpenGLF.FormShow(Sender: TObject);
  77.  BEGIN
  78.   FMyIma := TglBitmap2D.Create;
  79.   FMyIma.LoadFromFile('c:\test.bmp'); // Datei laden
  80.   FMyIma.GenTexture(False);
  81.  END;
  82.  
  83. PROCEDURE TOpenGLF.FormResize(Sender: TObject);
  84.  BEGIN
  85.   glViewport(0, 0, Panel2.Width, panel2.Height);
  86.  END;
  87.  
  88. PROCEDURE TOpenGLF.FormDestroy(Sender: TObject);
  89.  BEGIN
  90.   FMyIma.Free;
  91.   DeactivateRenderingContext;
  92.   DestroyRenderingContext(RC);
  93.   ReleaseDC(Handle, DC);
  94.  END;
  95.  
  96.  
  97.  
  98. PROCEDURE TOpenGLF.Render;
  99.  BEGIN
  100.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  101.   glMatrixMode(GL_PROJECTION);
  102.   glLoadIdentity;
  103.   gluPerspective(winkel, Panel2.Width/panel2.height, NearClipping, FarClipping);
  104.   glTranslatef(0, 0, 0);
  105.   glMatrixMode(GL_MODELVIEW);
  106.   glLoadIdentity;
  107.  
  108.   // Sonne zeichnen
  109.   glScalef(Scale,scale,1);
  110.   FMyIma.Bind;
  111.   glTranslatef(0, 0,tiefe);
  112.   glColor3f(1,1,0);
  113.   glRotatef(rota*10,0,1,0);
  114.   glBegin(GL_QUADS);
  115.    glVertex3f(-1,-1,0);
  116.    glVertex3f(1,-1,0);
  117.    glVertex3f(1,1,0);
  118.    glVertex3f(-1,1,0);
  119.   glEnd;
  120.   glRotatef(-rota*10,0,1,0);
  121.  
  122.   //Erde zeichnen
  123.   glRotatef(rota,0,0,1);
  124.   glTranslatef(3, 0,0);
  125.   glRotatef(-rota,0,0,1);
  126.   glRotatef(rota,1,1,0);
  127.   glBegin(GL_QUADS);
  128.    glColor3f(0, 0.5, 1);glVertex3f(-0.3, 0.3, 0);
  129.    glColor3f(0, 0, 1);glVertex3f(-0.3, -0.3, 0);
  130.    glColor3f(0, 0.5, 1);glVertex3f(0.3, -0.3, 0);
  131.    glColor3f(0, 1, 1);glVertex3f(0.3, 0.3, 0);
  132.  
  133.    glColor3f(0, 0.5, 1);glVertex3f(-0.3,0.3,0);
  134.    glColor3f(0, 1, 1);glVertex3f(-0.3,0.3,-0.6);
  135.    glColor3f(0, 0.5, 1);glVertex3f(-0.3,-0.3,-0.6);
  136.    glColor3f(0, 0, 1);glVertex3f(-0.3,-0.3,0);
  137.  
  138.    glColor3f(0,0.5,1);glVertex3f(0.3, -0.3, 0);
  139.    glColor3f(0,0,1);glVertex3f(0.3, -0.3, -0.6);
  140.    glColor3f(0,0.5,1);glVertex3f(0.3, 0.3, -0.6);
  141.    glColor3f(0,1,1);glVertex3f(0.3, 0.3, 0);
  142.  
  143.    glColor3f(0,0,1);glVertex3f(0.3, 0.3,-0.6 );
  144.    glColor3f(0,0.5,1);glVertex3f(0.3, -0.3,-0.6);
  145.    glColor3f(0,1,1);glVertex3f(-0.3, -0.3,-0.6);
  146.    glColor3f(0,0.,1);glVertex3f(-0.3, 0.3, -0.6);
  147.  
  148.    glColor3f(0,1,1);glVertex3f(0.3, 0.3,0 );
  149.    glColor3f(0,0.5,1);glVertex3f(0.3, 0.3,-0.6);
  150.    glColor3f(0,0,1);glVertex3f(-0.3, 0.3,-0.6);
  151.    glColor3f(0,0.5,1);glVertex3f(-0.3, 0.3,00);
  152.  
  153.    glColor3f(0,0,1);glVertex3f(-0.3, -0.3,0 );
  154.    glColor3f(0,0.5,1);glVertex3f(-0.3, -0.3,-0.6);
  155.    glColor3f(0,0,1);glVertex3f(0.3, -0.3,-0.6);
  156.    glColor3f(0,0.5,1);glVertex3f(0.3,- 0.3,0);
  157.   glend;
  158.   glRotatef(-rota,1,1,0);
  159.  
  160.   //Mond zeichnen
  161.   glColor3f(1,1,1);
  162.   glRotatef(rota*12,1,0,0);
  163.   glTranslatef(0, 0,1);
  164.   glRotatef(-rota*12,1,0,0);
  165.   glBegin(GL_QUADS);
  166.    glVertex3f(-0.1, 0.1, 0);
  167.    glVertex3f(-0.1, -0.1, 0);
  168.    glVertex3f(0.1, -0.1, 0);
  169.    glVertex3f(0.1, 0.1, 0);
  170.   glend;
  171.  
  172.  
  173.  
  174.   SwapBuffers(DC);
  175.  
  176.  END;
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184. // hier noch ein paar TrackBar's wo ich ein wenig umeinanderstellen kann
  185.  
  186.  
  187.  
  188.  
  189. // Winkel ändern
  190. procedure TOpenGLF.TrackBar1Change(Sender: TObject);
  191. begin
  192.  winkel:=TrackBar1.position;
  193.  OpenGLF.Render
  194. end;
  195.  
  196. // Tiefe ändern (Z)
  197. procedure TOpenGLF.TrackBar2Change(Sender: TObject);
  198. begin
  199.   tiefe:=TrackBar2.position;
  200.  OpenGLF.Render
  201. end;
  202.  
  203. // Rotation ändern (Erde um die Sonne und Mond um die Erde)
  204. procedure TOpenGLF.TrackBar3Change(Sender: TObject);
  205. begin
  206.    rota:=TrackBar3.position;
  207.  OpenGLF.Render
  208. end;
  209.  
  210. // Scalieren
  211. procedure TOpenGLF.TrackBar4Change(Sender: TObject);
  212. begin
  213.      scale:=TrackBar4.position/10;
  214.      if scale=0 then scale:=0.01;
  215.      OpenGLF.Render
  216. end;
  217.  
  218.  
  219.  
  220. End.
  221.  


ich hoffe ich hab alles rausgemacht was ich nur zum testen genutzt habe. :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 18:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich sag mal glTexCoord. Ohne diesen Befehl geht nunmal überhaupt gar nichts, in Sachen Texturen. Schau dir nochmal das Textur-Tut unter diesem Gesichtspunkt an.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 18:49 
Offline
DGL Member

Registriert: Di Feb 21, 2006 18:25
Beiträge: 14
Hallo,
Ok darüber hab ich zwar schon was gelesen
Beispiel aus Tutorials3 :
Code:
  1.  
  2. glBegin(GL_QUADS);
  3.   glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  4.   glTexCoord2f(0,1); glVertex3f(-1,1,0);
  5.   glTexCoord2f(1,1); glVertex3f(1,1,0);
  6.   glTexCoord2f(1,0); glVertex3f(1,-1,0);
  7. glEnd;
  8.  

hatte ich auch schon drin....
aber mein Bild war immer noch nicht zu sehen.
Hmmm
Na ja, irgendwie werd ich das schon noch zum laufen bringen.
Gruß Jogigonzo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 20:02 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
glEnable(GL_TEXTURES_2D); ;)
Habe ich zumindest in deinen Code nicht gefunden.
Denk daran es nach dem Zeichnen der Sonne zu deaktivieren, sonst bekommst du Probleme mit der untexturierten Erde.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 26, 2006 08:43 
Offline
DGL Member

Registriert: Di Feb 21, 2006 18:25
Beiträge: 14
Hallo,

Ok, Danke hat gefehlt.
Jetzt noch zu Transparent:
Da ich ja "nur" eine Bitmap (.bmp) habe und deshalt auch kein Alphakanal habe geht das doch dann mit:
Code:
  1.  
  2. FMyIma.AddAlphaFromColorKey(1,1,1,10);
  3.  

Also wie ich das jetzt verstanden habe sind die ersten drei die RGB und dann noch in % die Farbtolleranz.
Also mein Bitmap ist außenherum weiß. Diese soll aber in der Hintergrundfarbe dargestellt werden.
Geht jetzt noch nicht. Vermutlich hab ich den Alphakanal noch nicht aktiviert.
Den Befehl dazu steht mal wieder nicht da drin wo ich das mit dem FMyIma.AddAlphaFromColorKey(1,1,1,10);
gefunden habe. Leider!
Gruß Jogigonzo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 26, 2006 09:38 
Offline
DGL Member

Registriert: Di Feb 21, 2006 18:25
Beiträge: 14
Hallo,
Ok hat sich erledigt jetzt gehts.
Man sollte manche sachen doch mehrmals durchlesen damit man alles versteht. :lol:
Code:
  1.  
  2. PROCEDURE TOpenGLF.FormShow(Sender: TObject);
  3.  BEGIN
  4.   FMyIma := TglBitmap2D.Create;
  5.   FMyIma.LoadFromFile('c:\test1.bmp'); // Datei laden
  6.   FMyIma.AddAlphaFromColorKey(255, 255,255, 10); // Alphakanal anhand einer Farbe hinzufügen
  7.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  8.   glEnable(GL_BLEND);
  9.   FMyIma.GenTexture(false);
  10.  END;


Gruß Jogigonzo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 26, 2006 10:05 
Offline
DGL Member

Registriert: Di Feb 21, 2006 18:25
Beiträge: 14
Hallo,
jetzt hab nur noch ein kleines Poblem.
Ich hab das Bild nicht auf der Festplatte sondern in einer ImageList.
Ich weis zwar wie ich ein BitMap aus der Imagelist unter Delphi rausbekomme aber nicht wie ich ein Bitmap aus der ImageList unter OpenGl rausbekomme.In meinem Fall brüchte ich ja die Image in
Code:
  1.  
  2. FMyIma
  3.  


Gruß Jogigonzo


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.009s | 14 Queries | GZIP : On ]