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

Aktuelle Zeit: Fr Jul 18, 2025 14:08

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



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Verständnisprobleme mit Ansicht...
BeitragVerfasst: Di Mai 24, 2005 14:59 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 12:31
Beiträge: 14
Ich werde so langsam irre...
Ich benutze das VCL-Template 1.5.

Ich versuche über eine Procedur eine Kugel zu zeichnen.
So wie es aussieht funktioniert dies auch.
Allerdings sehe ich nie eine Kugel in der Mitte des Bildschirms.
Ich habe den Vollbildmodus aktiviert und folgende Procedur:

Code:
  1.  
  2. procedure createobject;
  3. var q: PGLUquadric;
  4.       w: Pointer ;
  5. Begin
  6. glPushmatrix ;
  7.  
  8.  w := gluNewQuadric();
  9.  gluperspective(4.5,1.0,1.0,10); <- Damit hab ich auch etwas versucht...
  10.  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) ;
  11.  glDisable(GL_CULL_FACE);
  12.    gluQuadricNormals(w, GLU_SMOOTH);
  13.    gluSphere(w,10,100,10);
  14.    gluDeleteQuadric(w);
  15.  glPopMatrix ;
  16. end;
  17.  


Wenn ich gltranslate oder glrotate anwenden möchte, dann gibt er mir folgenden Fehler aus:
Undefinierter Bezeichner: 'gltranslate'

Benutze ich ein falsches Template, oder bin ich einfach nur zu doof das zu verstehen?


Viele Güße

David


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 15:04 
Offline
DGL Member

Registriert: Fr Dez 19, 2003 14:27
Beiträge: 107
Wohnort: Indianapolis, USA
Die Funktion heisst glTranslated fuer Doubles oder glTranslatef fuer Singles.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 15:16 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 12:31
Beiträge: 14
Hi Tokter,

ja danke! das war es.
Nun, da öffnet sich mir direkt eine neue Frage... Warum wird die "Kugel" als Röhre dargestellt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 15:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
gluperspective brauchst du im übrigen nur beim Initialisieren bzw. beim Größenverändern deines Fensters setzen. Auf keinen Fall sollte so etwas ständig gestzte werden.

Zu der Röhre. Also wenn du hinein schauen kannst, dann wird die Kugel abgeschnitten weil dein Near von gluPerspektiv nicht so gut gesetzt ist oder weil die Kugel einfach zu nah am Bildschirm ist. Dann mittels glTranslate die Kugel ein wenig in Z Richtung schieben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 15:26 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 12:31
Beiträge: 14
Ihr seit echt klasse :)

Danke für eure Geduld


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 15:54 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 12:31
Beiträge: 14
Ich arbeite ja nach dem Tutorial, und da hätte ich direkt das nächste Problem...

Hier folgender Code:

Code:
  1.  
  2. procedure createobject;
  3. var q: PGLUquadric;
  4.     w : Pointer ;
  5.     texture1: PTAUX_RGBImageRec;
  6.     tex :GLuint;  // Hier deklaration von tex vom Typ GLuint
  7. Begin
  8. glMatrixMode(GL_MODELVIEW);
  9. texture1 := auxDIBImageLoadA('textur.bmp');
  10.  
  11. glGenTextures(1, tex);  // <- Hier bekomme ich die Fehlermeldung
  12. glBindTexture(GL_TEXTURE_2D, tex);
  13. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  14. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  15. glTexImage2D(GL_TEXTURE_2D, 0, 3,
  16.                         texture1^.sizeX, texture1^.sizeY, 0,
  17.                         GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  18.  
  19. glPushmatrix ;
  20. q := gluNewQuadric();
  21. gluperspective(45.0,1.0,1.0,1000);
  22. gltranslatef(100,100,0);
  23. gluSphere(q,50,1000,100);
  24. gluDeleteQuadric(w);
  25. glPopMatrix ;
  26. end;
  27.  




Hier bekomme ich folgende Fehlermeldung:

[Fehler] OpenGL15_MainForm.pas(64): Inkompatible Typen: 'Cardinal' und 'PGLuint'

Laut dem Tutorial habe ich es aber richtig eingestellt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 16:05 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
glGenTextures erwartet als Paramter einen Pointer auf einen Integer, also glGenTextures(1, tex) in glGenTextures(1, @tex) ändern.

Gruß
KidPaddle

_________________
http://www.seban.de


Zuletzt geändert von KidPaddle am Di Mai 24, 2005 16:06, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 16:06 
Offline
DGL Member

Registriert: Di Jun 22, 2004 17:40
Beiträge: 51
Wohnort: Aachen
das problem hatte ich auch mal.

gelöst hab ichs mit:
Code:
  1. PROCEDURE glGenTextures(n: GLsizei; VAR textures: GLuint); STDCALL; EXTERNAL opengl32;

(direkt oben bei den prozedur-köpfen beifügen)

irgendwie scheint in der dglOpenGL.pas was nich zu stimmen oder sowas :P
würd mich auch ma interessieren was da faul is :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 16:08 
Offline
DGL Member

Registriert: Di Jun 22, 2004 17:40
Beiträge: 51
Wohnort: Aachen
@KidPaddle: bei mir hat das so mit dem pointer aber auch nich geklappt.. ich mach das ohne pointer und mit der anderen glGenTexture-prozedur :P
is das irgendwie umständlich oder so?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 16:23 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Bei der Deklarierung als Var - Parameter wird ebenfalls nur ein Pointer auf den Stack gelegt. Da aber Delphi dann viel strenger mit der Typenprüfung ist, wird häufig ein Pointer verwendet, der kann dann vom Typ Cardinal-, Integer- oder Longint sein. Bei deiner Variante mußt Du bei der Deklaration zwingend einen GLuint verwenden.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 16:24 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
KidPaddle hat geschrieben:
Bei der Deklarierung als Var - Parameter wird ebenfalls nur ein Pointer auf den Stack gelegt. Da aber Delphi dann viel strenger mit der Typenprüfung ist, wird häufig ein Pointer verwendet, der kann dann vom Typ Cardinal-, Integer- oder Longint sein. Bei deiner Variante mußt Du bei der Deklaration deiner Variable zwingend einen GLuint verwenden.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 16:39 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 12:31
Beiträge: 14
Die Methode mit dem Pointer hat funktioniert.

Aber es wäre doch zu einfach, wenn alles sofort funktionieren würde, oder?
Mein Code sieht jetzt so aus:

Code:
  1.  
  2. procedure createobject;
  3. var q: PGLUquadric;
  4.     texture1: PTAUX_RGBImageRec;
  5.     tex : Gluint;
  6. Begin
  7. glLoadIdentity;
  8. texture1 := auxDIBImageLoadA('textur.bmp');
  9. q := gluNewQuadric();
  10.  
  11. glGenTextures(1, @tex);
  12. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  13. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  14. glTexImage2D(GL_TEXTURE_2D, 0, 3,
  15.                         texture1^.sizeX, texture1^.sizeY, 0,
  16.                         GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  17. glBindTexture(GL_TEXTURE_2D, tex);
  18.  
  19. glPushmatrix ;
  20. gltranslatef(300,200,0);
  21. gluperspective(45.0,1.0,1.0,1000);
  22. gluSphere(q,50,100,100);
  23. gluDeleteQuadric(q);
  24. glPopMatrix ;
  25. end;
  26.  




Das Ergebnis könnt ihr im Screenshot sehen...
1. Die Framerate wird bedenklich niedrig
2. Die Kugel ist alles andere als texturiert...


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 16:50 
Offline
DGL Member

Registriert: Fr Dez 19, 2003 14:27
Beiträge: 107
Wohnort: Indianapolis, USA
Yooda hat geschrieben:
1. Die Framerate wird bedenklich niedrig

Rufst du createobject; in jedem Frame auf? Musst du ja fast da sich der Render code da drin befindet. Wenn du die Textur in jedem Frame von der Platte laedst darfst du dich natuerlich nicht ueber die Framerate wundern :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 20:04 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du musst noch lernen etwas strategischer zu denken:

Sachen die immer gleich bleiben sollten nur einmal gemacht werden:
- Textur Laden
- Quadric erstellen
- Quadrix freigeben
- gewisse Statechanges (glEnable/Disable) die sich nie ändern
- Wenn sich die Perspektive nie ändert, auch diese

Diese Sachen solltest du nur einmal im OnCreate der Anwendung ausführen, bzw. im Destroy (das Freigeben der Quadric).

Sachen die immer gemacht werden sollten sind:
- Render aufrufe (gluSphere)
- Texturbinden
- Statechanges die sich zwischen Teilen der Szene ändern
- Wechselnde Perspektiven natürlich auch


PushMatrix und PopMatrix sollten nur dann gemacht werden, wenn du die gepushte Matrix später wirklich noch brauchst.

Außerdem solltest du die Einrücken sinnvoll an die Befehle anpassen. (Befehle innerhalb der glBegin/glEnd Blöcke einrücken, Code zwischen Push/PopMatrix einrücken, etc.) das steigert das Verständins. ;)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 10:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Zitat:
gluperspective brauchst du im übrigen nur beim Initialisieren bzw. beim Größenverändern deines Fensters setzen. Auf keinen Fall sollte so etwas ständig gestzte werden.


das hier steht aber im template im ApplicationEventsIdle
Code:
  1.   glMatrixMode(GL_PROJECTION);
  2.   glLoadIdentity;
  3.   glViewPort(0, 0, ClientWidth, ClientHeight);
  4.   gluPerspective(60, ClientWidth/ClientHeight, 1/10, 1024);
  5.   glMatrixMode(GL_MODELVIEW);


und wenn ich
Code:
  1.   gluPerspective(60, ClientWidth/ClientHeight, 1/10, 1024);

rausnehme, sehe ich nur noch schwarz (auch wenn ich es beim initialisieren u.s.w. aufrufe...

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


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


Wer ist online?

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