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

Aktuelle Zeit: Do Mai 23, 2024 22:14

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Feb 11, 2006 17:31 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Folgendes Problem:
Ich möchte eine "Absperrung" modellieren.
Sie soll aus Stangen und zwischen ihnen gespannten Seilen bestehen.
Der Einfachheit halber sollen die Seile durch linien dargestellt werden, welche immer 2 Stangen miteinadner verbinden.
Die Stangen sind Kreisrund angeordnet.
Es soll immer die Stange 2i mit der Stange 2i+1 verbunden werden. (also: 0-1,2-3,4-5,...)

Da man leider innerhalb glBegin/glEnd nicht rotieren kann, habe ich das Problem gehabt, die Stangenposition irgendwie speichern zu müssen, um anschließend die Linien zu zeichnen. Dünnbrettbohrer wie ich bin, hab ich einfach die Matrix ausgelesen und wollte diese dann benutzen. Das ergebnis sieht aber absolut unbrauchbar aus. Die linien sind außerhalb des Sichtbereiches, nur ab und an sieht man mal eine seltsam in der Gegend rumliegen.

Hier ist der Code:
Code:
  1.  
  2. void Karusell::drawAbsperrung()
  3. {
  4.     int i;
  5.     float positions[10][3];
  6.     float matrix[16];
  7.  
  8.     glPushMatrix();
  9.     glTranslatef(0,-1,0);
  10.     for (i = 0; i < 10; i++)
  11.     {
  12.         glRotatef(36,0,1,0);
  13.         glTranslatef(30,0,0);
  14.         glGetFloatv(GL_MODELVIEW_MATRIX,matrix);
  15.         positions[i][0]=matrix[12];
  16.         positions[i][1]=matrix[13];
  17.         positions[i][2]=matrix[14];
  18.         glRotatef(-90,1,0,0);
  19.         Stange(0.1,1.5,3,3);
  20.         glRotatef( 90,1,0,0);
  21.         glTranslatef(-30,0,0);
  22.     };
  23.     glPopMatrix();
  24.    
  25.     glPushMatrix();
  26.     glLoadIdentity();
  27.     glColor3f(0.8,0.8,0.9);
  28.     glBegin(GL_LINES);
  29.       for (i = 0; i < 5; i++);
  30.       {
  31.         glVertex3f(positions[i*2   ][0],positions[i*2   ][1]+1.5,positions[i*2   ][2]);
  32.         glVertex3f(positions[i*2 +1][0],positions[i*2 +1][1]+1.5,positions[i*2 +1][2]);
  33.       };
  34.     glEnd();
  35.     glPopMatrix();
  36. };


Wieso klappts nicht, und wie könnte ich oben genanntes Ziel erreichen?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 11, 2006 18:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Lass doch einfach eine Winkel Variable von 0 bis 2pi laufen(die Schritt groesse kannst du dir aussuchen ;) ).

Dann noch mit cos und sin die Position berechnen und fertig. Und wenn du Displaylisten nutzt dann brauchst du dir auch wegen der Geschwindigkeit keine sorgen mehr machen.

Noch zur Positionsberechnung:
Code:
  1.  
  2. point1X = cos(angel);
  3. point1Y = sin(angel);
  4. point2X = cos(angel + delta); // Delta ist der Wert um den du angel bei jedem durchlauf erhoest
  5. point2Y = sin(angel + delta);
  6.  


Damit du nur jeden zweiten Strich zeichnest kannst du entweder GL_LINE verwenden und die Schleife innerhalb des glBegin glEnd Blockes positionieren, oder du lieber zylindrisches Billboard fuer die Seile verwenden willst. Kannst du das zeichnen von einer Boolischen Variable abhaengig machen die du bei jedem Durchlauf negierst.

MfG
Flo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.007s | 14 Queries | GZIP : On ]