Dreieck ohne Cull face



  • Dann generierst du die Punkte eben falsch!?



  • wie sooll ich sie deiner meineung nach generieren?as ist ja mein Problem, ich hab kiene Ahnung, wie die funktion dfäur aufgebaut sein soll



  • Woher soll ich das wissen, ich weiß ja noch nichtmal, was genau du eigentlich generieren willst!?



  • also ich hab eine VErtex[4] Array, der ein tetraedron darstellt, die Punkte sollen nun so verteilt werden, dass das Dreick nur von aussen sichtbar ist



  • Und wo genau liegt dabei das Problem? Wenn die Topologie des Körpers eh schon feststeht, brauchst du doch nur die Indices entsprechend wählen!?



  • naja bis jetzt hab ich ich noch keine Kombination gefunden, die Funktioniert.

    Aber ich hab grad rausgefunden das es wahrscheinlich unmöglich ist.

    hat sich also erledigt.

    TRozdem danke.



  • Was ist unmöglich? Ich hab leider immer noch nicht verstanden, was genau du erreichen willst und solange du mir das nicht verrätst, kann ich dir leider nicht helfen. Also nochmal: Was genau willst du erreichen. Und sag einfach mal nur das Was unabhängig vom Wie du gedenkst, es erreichen zu wollen. Verbeiß dich also mal nicht in die Tatsache, dass du glaubst, irgendwo irgendas irgendwie sortieren zu müssen, sondern sag mir einfach mal nur, was eigentlich am Ende rauskommen soll und wofür du das dann verwenden willst...



  • Okay noch mal von vorne:

    ein tetraeder=Vector[4] (ein tetraeder hat vier Ecken)
    zeichen:

    render methode:
    glenable(gl_cull_face);
    for(int i=0;i<4;i++){
    glbegin(gl_triangle);
    for(int j=0;i<3;j++){
    glvertex(points[(i+j)%4].x,points[(i+j)%4].y,points[(i+j)%4].z);
    }
    glend();
    }

    Problem:

    wie füll ich das tetraeder (vector array)zufällig(funktion), so dass alle seiten so gerendert werden, dass sie gegen aussen zeigen?



  • Mit (i+j)%4 wirst du da nicht weit kommen.

    Wenn das dein Tetrahedron ist...

    1
          /|\
         / | \
        /  |  \
       2-------3
        \  |  /
         \ | /
          \|/
           4
    

    (Kante 2-3 ist vorne)
    ...und wir "counterclockwise" als "nach vorne guckend" annehmen...

    Dann sind die Dreiecke mit passendem Drehsinn:
    1, 2, 3
    2, 4, 3
    1, 4, 2
    1, 3, 4

    Wenn du die Punkte zufällig erzeugst, kann es höchstens noch sein dass die Punkte des Tetrahedron "falsch rum" zueinander im Raum liegen liegen, und daher alle Seiten "falsch rum" gerendert werden. In dem Fall musst du einfach nur zwei beliebige Punkte vertauschen, dann liegen sie wieder richtig rum.

    Um das rauszubekommen kannst du z.B. einfach den Normalvektor der von einem Dreieck aufgespannten Fläche ausrechnen (Kreuzprodukt zweier Seiten), und dann gucken ob der 4. Punkt in der Raumhälfte liegt in die der Normalvektor "reinzeigt" oder auf der anderen (Skalarprodukt).



  • Ok, ich kann zwar immer noch nur raten, aber ich versuch's mal: Du willst also ein Tetraeder erzeugen, mit zufälligen Koordinaten für die Eckpunkte!? (Ist es wirklich so schwer, das einfach zu sagen?)

    Mein Ansatz: Nimm ein normales, regelmäßiges Tetraeder und verschieb dessen Eckpunkte jeweils um einen zufälligen Wert vom Mittelpunkt weg: Voilà.

    Oder anders ausgedrückt: Zieh vier zufällige, positive Werte und multiplizier jeden Wert mit einer der vier entsprechenden Richtungen (1012)T\begin{pmatrix}1 & 0 & -\frac{1}{\sqrt{2}}\end{pmatrix}^T, (1012)T\begin{pmatrix}-1 & 0 & -\frac{1}{\sqrt{2}}\end{pmatrix}^T, (0112)T\begin{pmatrix}0 & 1 & \frac{1}{\sqrt{2}}\end{pmatrix}^T und (0112)T\begin{pmatrix}0 & -1 & \frac{1}{\sqrt{2}}\end{pmatrix}^T.



  • stimmt, es lag an meiner render methode, ich bin gerade daran sie zu überdenken.


Anmelden zum Antworten