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

Aktuelle Zeit: Di Jul 15, 2025 20:29

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: Vektoren zeichnen
BeitragVerfasst: So Jan 15, 2006 15:15 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Hallo, mal wieder stehe ich als Delphi Programmierer vor dem Problem 3d (leider)
Ich möchte 3d Vektoren in den Raum zeichen, jedoch weiß ich nicht wie ich das anstellen soll.

ich habe folgendes:
Code:
  1.  
  2. type
  3.   TVektor3d = record
  4.     x1, x2, x3: single;
  5.     end;
  6.   TGerade = record
  7.     SV, RV: TVektor3d;
  8.     end;
  9.  

opengl initialisieren usw bekomme ich auch noch hin, jedoch wie zeichne ich jetzt meine gerade ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 15, 2006 15:26 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Du gehst auf den Ursprung:
Code:
  1. glLoadIdenity

Du bewegst dich zum Startpunkt:
Code:
  1. glTranslatef(Gerade.SV.x1, Gerade.SV.x2, Gerade.SV.x3);

Du zeichnest die Linie:
Code:
  1. glBegin(GL_LINES);
  2.   glVertex3f(0, 0, 0);
  3.   glVertex3f(Gerade.RV.x1, Gerade.RV.x2, Gerade.RV.x3);
  4. glEnd();


Und erhälst die Linie zwischen den beiden Punkten. Eine (unendliche) Gerade kannst du damit aber nicht erzeugen.
Hier ist die Grenze dein System.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 15, 2006 15:36 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich hab das so gemacht, sehen tu ich leider nichts:
Code:
  1.  
  2. procedure TMainForm.Render;
  3. var
  4.   Gerade: TGerade;
  5. begin
  6.   Gerade.SV.x1 := 1;
  7.   Gerade.SV.x2 := 5;
  8.   Gerade.SV.x3 := 3;
  9.  
  10.   Gerade.RV.x1 := 2;
  11.   Gerade.RV.x2 := 1;
  12.   Gerade.RV.x3 := 4;
  13.  
  14.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  15.   glcolor3f(1, 1, 1);
  16.   glLoadIdentity;
  17.  
  18.   glTranslatef(Gerade.SV.x1, Gerade.SV.x2, Gerade.SV.x3);
  19.  
  20.   glBegin(GL_LINES);
  21.     glVertex3f(0, 0, 0);
  22.     glVertex3f(Gerade.RV.x1, Gerade.RV.x2, Gerade.RV.x3);
  23.   glEnd;
  24.  
  25.   SwapBuffers(DC);
  26. end;
  27.  

und wenn ich eine 2. dazuzeichnen möchte genauso ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 15, 2006 18:55 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Du kannst die Gerade nicht sehen, weil sie "hinter" dir liegt. Nehme mal negative Werte auf der Z-Achse.

Eine weitere gerade geht genauso.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 15, 2006 19:15 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
es liegt an glTranslatef(Gerade.SV.x1, Gerade.SV.x2, Gerade.SV.x3); wenn ich bei SV überall 0 einsetze sehe ich etwas.

wie sähe das ganze denn aus, wenn ich ganz einfach unten link ein koordinatensystem zeichen möchte, ich glaube dann komme ich besser dahinter.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 16, 2006 12:25 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Bedenke, dass es Koordinaten liegen, die ausserhalb deines Sichtfeld liegen.

Bei dem Koordinatensystem:
Bei einem 2-dimensionalen Koordinatensystem empfiehlt sich der Orho-Modus.
Bei einem 3-dimensionalen Koordinatensystem schau dir gluUnProject.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 16, 2006 14:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Mach mal folgendes:

nach glLoadIdentity rufst du glTranslatef(0,0,-15) auf.

Dann zeichnest du erst einmal ein Koordinatensystem ein. Das wird dir sicherlich bei der orientierung helfen:

Code:
  1.  
  2.              glBegin(GL_LINES);
  3.                glColor3f(1,0,0); glVertex3f(0,0,0); glVertex3f(1,0,0);
  4.                glColor3f(0,1,0); glVertex3f(0,0,0); glVertex3f(0,1,0);
  5.                glColor3f(0,0,1); glVertex3f(0,0,0); glVertex3f(0,0,1);
  6.              glEnd;
  7.  


Die rote Achse ist X, die grüne Y und die blaue Z.

Das sollte dir erstmal ein stück weiter helfen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 16, 2006 19:36 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
werde ich testen, wäre natürlich toll, denn wenn ich das als ansatz habe komme ich schon ein ganzes stück weiter, danke ;)

wenn ich glTranslatef(0,0,-15) nehme, sehe ich nichts, alles außer weglassen und -1 funzt net.

so siehts schon gut aus:
Code:
  1.  
  2. procedure TMainForm.Render;
  3. begin
  4.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.   glLoadIdentity;
  6.  
  7.   glrotatef(45, 1, 0, 0);
  8.   glrotatef(-45, 0, 1, 0);
  9.  
  10.   glLineWidth(3);
  11.  
  12.   glBegin(GL_LINES);
  13.     glColor3f(1,0,0); glVertex3f(0,0,0); glVertex3f(1,0,0);
  14.     glColor3f(0,1,0); glVertex3f(0,0,0); glVertex3f(0,1,0);
  15.     glColor3f(0,0,1); glVertex3f(0,0,0); glVertex3f(0,0,1);
  16.   glEnd;
  17.  
  18.   SwapBuffers(DC);
  19. end;
  20.  

ich denke, damit kann man arbeiten, nur müsste ich die vektoren nur noch gescheit umrechnen, bzw verlängert zeichnen, hm weiß jemand nen guten code dafür, oder hat da jemand ne idee?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 17:50 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich mach das jetzt so:
Code:
  1.  
  2. procedure ogl_Gerade(Gerade: TGerade);
  3. var
  4.   v1, v2: TVektor3d;
  5. begin
  6.   v1 := v_skalar( 10000, Gerade.RV);
  7.   v2 := v_skalar(-10000, Gerade.RV);
  8.   glColor3f(1,1,1);
  9.   glBegin(GL_LINES);
  10.       glVertex3f(Gerade.SV.x1,Gerade.SV.x2,Gerade.SV.x3); glVertex3f(v1.x1,v1.x2,v1.x3);
  11.       glVertex3f(Gerade.SV.x1,Gerade.SV.x2,Gerade.SV.x3); glVertex3f(v2.x1,v2.x2,v2.x3);
  12.   glEnd;
  13. end;
  14.  

jedoch geht die gerade nie ganz über den bildschirm, nur wenn ich sie direkt von der seite betrachte, ansonsten wird sie von beiden seiten abgeschnitten, wie kann ich das verhindern ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 01:17 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hier spielen bestimmt die Clipping Planes eine entscheidente Rolle: http://wiki.delphigl.com/index.php/Clipping_Plane

Die Essenz ist folgende: Bei OpenGL Szenen beschränkt man den sichtbaren bereich dahingehend, dass nicht unendlich weit entfernte Objekte die GraKa belasten. Zu diesem Zweck definiert man die (Near und) Far Clippingplane. Je weiter die Far-Clippingplane drausen ist, desto weiter weg dürfen Objekte sein um sie noch darzustellen. Die Near Clipping Plane wird benutzt um zu verhindern, dass Objekte zu na an der "Kamera" sind.

Beide beeinflussen die Auflössung des Tiefenpuffers.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 16:48 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich hab das schonmal mitgluperspective probiert, aber funktionieren scheints nicht, also werde ich wohl langfristig auf eine 2 dimensionele darstellung umsteigen müssen, wobei ich erstmal herausfinden muss, wie ich das ganze 3d zeug auf 2d projeziert bekomme.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 17:02 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Wieso funktioniert gluPerspective bei dir nicht?
Was gibt den glGetError aus?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 17:46 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
es bringt einfach nichts, ich weiß auch nicht warum :shock:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 18:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wie wäre es, wenn du uns mal ein Bild von dem zeigst wie es aussieht und dann genau sagst wie du es haben willst. Ich denke mal alle beteidigten treten irgendwo auf der Stelle.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 20:26 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hier am anhang, ich glaube, dass man es ohne 2d projektion auch nicht schafft die linie immer durchs bild zu bekommen, da eben in 3d gerechnet wird.


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


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 5 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.012s | 17 Queries | GZIP : On ]