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

Aktuelle Zeit: Fr Jul 18, 2025 23:00

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Pyramide Oo
BeitragVerfasst: Sa Sep 09, 2006 12:43 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi, ich versuche gerade eine Pyramide auf den schirm zu bekommen:
Code:
  1.  
  2. procedure DrawPyramide(pos: TVector3D; size, height: single);
  3. begin
  4.   glPushmatrix();
  5.     glTranslatef(pos.x, pos.y, pos.z);
  6.  
  7.     glBegin(GL_TRIANGLE_STRIP);
  8.       glvertex3d(size / 2, 0,       -size / 2);
  9.       glvertex3d(size / 2, 0,        size / 2);
  10.       glvertex3d(      -1, 0,           0);
  11.       glvertex3d(       0,     height,  0);
  12.       glvertex3d(size / 2, 0,       -size / 2);
  13.       glvertex3d(size / 2, 0,        size / 2);
  14.     glEnd();
  15.  
  16.   glPopMatrix();
  17. end;
  18.  

size soll die länge der grundfläche sein (also eine quadratische grundfläche) und height die höhe

aber irgendwie sieht das komisch aus Oo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 09, 2006 15:48 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
verbessert:
Code:
  1.  
  2. procedure DrawPyramide(pos: TVector3D; size, height: single);
  3. begin
  4.   glPushmatrix();
  5.     glTranslatef(pos.x, pos.y, pos.z);
  6.  
  7.     glBegin(GL_TRIANGLE_STRIP);
  8.       glColor3f(1, -height / 2, 0);
  9.       glvertex3d(size / 2, -height / 2, -size / 2);
  10.  
  11.       glColor3f(0, 1, 0);
  12.       glvertex3d(size / 2, -height / 2, size / 2);
  13.  
  14.       glColor3f(0, 0, 1);
  15.       glvertex3d(-size / 2, -height / 2, 0);
  16.  
  17.       glColor3f(1, 1, 0);
  18.       glvertex3d(0, height / 2, 0);
  19.  
  20.       glColor3f(1, 0, 1);
  21.       glvertex3d(size / 2, -height / 2, -size / 2);
  22.  
  23.       glColor3f(0, 1, 1);
  24.       glvertex3d(size / 2, -height / 2, size / 2);
  25.     glEnd();
  26.  
  27.   glPopMatrix();
  28. end;
  29.  


es sieht schief aus Oo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 09, 2006 16:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Bei solchen Problemen kann ich dir nur empfehlen dir mal ein Blatt Papier zur Hand zu nehmen und deine Pyramide aufzuzeichnen. Am besten eignet sich hier ein Blick von oben. Dann trägst du Punkt für Punkt ein.

So siehst du auch ziemlich schnell, dass bei der aktuellen Situation der linke, obere, vordere Eckpunkt (-size / 2, -height / 2, -size / 2) gar nicht existiert, womit das Ergebnis zwangsweise falsch ist.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 09, 2006 16:19 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
gibts nirgendwo vorlagen für standartobjekte ? sowas ist ja schrecklich ^^

ich versuchs nochmal ;) danke

Code:
  1.  
  2.     glBegin(GL_TRIANGLE_STRIP);
  3.       glvertex3f(ax, -ay, -az);
  4.       glvertex3f(ax, -ay, az);
  5.       glvertex3f(-ax, -ay, az);
  6.       glvertex3f( 0,  ay, 0);
  7.       glvertex3f(-ax, -ay, -az);
  8.       glvertex3f(ax, -ay, -az);
  9.     glEnd();
  10.  

egal bei welcher ecke ich anfange, eine seite fehlt immer, irgendetwas mache ich falsch Oo

//ahh ich sehe auch warum, hm nochmal \";)\"

ich bekomms net gebacken OO

wenn man cullface aus macht und FAN benutzt das gleiche:
Code:
  1.  
  2.     glDisable(GL_CULL_FACE);
  3.  
  4.     glBegin(GL_TRIANGLE_FAN);
  5.       glVertex3f(  0,  ay,   0);
  6.       glVertex3f( ax, -ay,  az);
  7.       glVertex3f(-ax, -ay,  az);
  8.       glVertex3f(-ax, -ay, -az);
  9.       glVertex3f( ax, -ay, -az);
  10.     glEnd();
  11.  

aber cullface könnte ich noch brauchen ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 09, 2006 16:57 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ok habs jetzt so gemacht ;) danke
Code:
  1.  
  2. procedure DrawPyramide(pos: TVector3D; size, height: single);
  3. var
  4.   ax,
  5.   ay,
  6.   az: single;
  7. begin
  8.   glPushmatrix();
  9.     glTranslatef(pos.x, pos.y, pos.z);
  10.  
  11.     ax := size / 2;
  12.     ay := height / 2;
  13.     az := size / 2;
  14.  
  15.     //Boden
  16.     glBegin(GL_QUADS);
  17.       glVertex3f( ax, -ay,  az);
  18.       glVertex3f(-ax, -ay,  az);
  19.       glVertex3f(-ax, -ay, -az);
  20.       glVertex3f( ax, -ay, -az);
  21.     glEnd;
  22.  
  23.     //Seiten
  24.     glBegin(GL_TRIANGLES);
  25.       glVertex3f(  0,  ay,  0);
  26.       glVertex3f(-ax, -ay, az);
  27.       glVertex3f( ax, -ay, az);
  28.  
  29.       glVertex3f(  0,  ay,   0);
  30.       glVertex3f( ax, -ay,  az);
  31.       glVertex3f( ax, -ay, -az);
  32.  
  33.       glVertex3f(  0,  ay,   0);
  34.       glVertex3f( ax, -ay, -az);
  35.       glVertex3f(-ax, -ay, -az);
  36.  
  37.       glVertex3f(  0,  ay,   0);
  38.       glVertex3f(-ax, -ay, -az);
  39.       glVertex3f(-ax, -ay,  az);
  40.     glEnd();
  41.  
  42.   glPopMatrix();
  43. end;
  44.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 09, 2006 18:49 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Es ist insgesamt ziemlich umständlich alle Objekte direkt im Quelltext zu speichern. Besser man schreibt die Koordinaten in eine Datei und liest sie dann ein. Dann braucht man das alles nur einmal zu programmieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 10, 2006 15:29 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
für 3d fraktale sicher nicht sinnvoll ;)
Code:
  1.  
  2. procedure Sierpinski(p: TVector3f; size, height: single; t: integer);
  3. begin
  4.   if (t > 0) then
  5.   begin
  6.     Sierpinski(v3(p.x - size / 4, p.y - height / 4, p.z - size / 4), size / 2, height / 2, t - 1);
  7.     Sierpinski(v3(p.x - size / 4, p.y - height / 4, p.z + size / 4), size / 2, height / 2, t - 1);
  8.     Sierpinski(v3(p.x + size / 4, p.y - height / 4, p.z - size / 4), size / 2, height / 2, t - 1);
  9.     Sierpinski(v3(p.x + size / 4, p.y - height / 4, p.z + size / 4), size / 2, height / 2, t - 1);
  10.     Sierpinski(v3(p.x, p.y + height / 4, p.z), size / 2, height / 2, t - 1);
  11.   end else
  12.     DrawPyramide(p, size, height);
  13. end;
  14.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 10, 2006 15:50 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Man kann derartige Fraktale beispielsweise mit L-Systems (primär für 2D aber Vergleichbares geht auch in 3D) parametrisierbar machen. Wenn du allerdings nur wenige unterschiedliche Fraktale haben willst, ist die hardgecodete Variante sicher um einiges einfacher.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


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.008s | 15 Queries | GZIP : On ]