1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Triangle-Data Structure in C#

  • Spite82
  • 5. Oktober 2010 um 17:23
  • Unerledigt
  • Spite82
    8
    Spite82
    Mitglied
    Reaktionen
    1
    Punkte
    571
    Beiträge
    89
    • 5. Oktober 2010 um 17:23
    • #1

    Hi, also ich habe einmal eine Frage an euch Profi-Progger :).

    Ich schreibe gerade ein Programm, welches es erlauben soll die Geometrie von Objekten zu verändern.
    Soweit so gut, allerdings ist es eher stressig immer zu überprüfen, welche Vertices alle zu verschieben sind, wenn man eine Seite eines Quaders selektiert hat, denn ich habe zur Zeit sowas wie "einzelne" Faces. D.H. meine Eckpunkte sind alle öfter als einmal vorhanden.

    Was ich eigentlich gerne hätte (C++ Pointer, wo seid ihr nur, wenn man euch braucht) wäre, einen Vertex nur einmal zu speichern, den aber "mehreren Faces" zuordnen (also nur Pointer/Referenzen zu speichern).

    So schauts jetzt aus:
    Mein Quader-Constructor ruft jetzt eine Methode auf, die die 6 Faces generiert -> eine Vertex-List (fürs rendern) ist dann als Property implementiert und geht einfach beide Triangles aller Quads durch und speichert die Vertices in eine Liste.
    Ich hab jetzt zwar mal eine Idee, aber leider keine Ahnung, ob das auch funktioniert:
    Wäre es jetzt möglich einfach nur 8 Vertices zu generieren die ich dann per "ref" an die Quad-Konstruktoren übergebe?
    Also so, dass dann Quads, die sich einen Vertex teilen (z.B. Vorne, Links und Unten) mit immer dem gleichen Vertex arbeiten (weil ref??)?

    Folge wären dann, dass ich "nur" diesen Vertex verschiebe und daher automatisch alle Triangles richtig upgedatet werden, ohne Löcher entstehen zu lassen...

    Seht euch die Attatchments an, um euch einen Einblick zu verschaffen was ich meine, falls die Beschreibung wirr war :D.

    Ich könnte es natürlich auch einfach probieren, das so einzubauen, aber ich frag mal lieber euch, bevor ich da jetzt alles über den Haufen schmeiße :)

    Lg und thx schonmal!
    Spite

  • fabs
    10
    fabs
    Mitglied
    Reaktionen
    41
    Punkte
    1.046
    Beiträge
    197
    • 5. Oktober 2010 um 17:44
    • #2

    Ich bin mir jetzt nicht ganz sicher, ob ich dich richtig verstanden habe, weil ich mit Computergraphik nicht so viel am Hut habe, aaaaber: Im wesentlichen verwendest du bei allen C#-Objekten automatisch Pointer. Wenn ich dich richtig verstanden habe, ist dein Problem nur, dass deine Dreiecke ihre Eck-Koordinaten in unabhängigen Variablen speichern. Dann sollte die Lösung für dein Problem einfach nur eine Klasse Vertex sein, und ein Triangle besitzt halt drei Vertex-Eigenschaften. Wenn du denen dann das selbe Objekt zuweist, greifst du immer auf dasselbe Objekt zu, und voila.

  • Spite82
    8
    Spite82
    Mitglied
    Reaktionen
    1
    Punkte
    571
    Beiträge
    89
    • 5. Oktober 2010 um 17:56
    • #3

    Danke vielmals für deine schnelle Antwort - ich hab sowas auch gerade gelesen in einem C# PDF :) Objekte werden immer auf dem Heap gespeichert....
    Sollte mir doooooch mal ein C# Buch kaufen^^

    Also ich werde das einmal versuchen :)

    D.H. ich stelle jetzt um von 6 Faces (mit Vertices Property) auf 8 Vertices mit Faces Property...hm einmal schaun......

    Vertex, Edge, Triangle und Quad hab ich so aufgebaut:

    Vertex (Position, Normale, TexCoord)
    Edge (2 Vertices)
    Triangle (3 Vertices)
    Quad (4 Vertices, 2 Triangles als Property)
    kann man das e so verwenden hoffe ich :)

    Oder wäre es auch möglich sowas zu machen:
    Vertex (Position, Normale(n), TexCoord(s), Edges, Triangles)..... usw.... (also eine Art "Nachbarschaftsinformation")?? Das wäre natürlich extrem hilfreich :) (aber kompliziert?)

    Danke nochmal!
    Spite

  • fabs
    10
    fabs
    Mitglied
    Reaktionen
    41
    Punkte
    1.046
    Beiträge
    197
    • 5. Oktober 2010 um 18:16
    • #4

    Du brauchst nicht zwingend die Darstellung von Faces/Properties - also wer jetzt was speichert - ändern, du musst dir nur überlegen, wo du die Information brauchst. Du kannst sie auch doppelt ablegen (wie z.b. für die Nachbarschaftsinformation), dann solltest du dir aber ein System einfallen lassen, wie du das konsistent hältst. Wenn du also dem Vertex jeweils Listen von allen Objekten gibst, die von ihm abhängen, dann solltest du entsprechende Methoden bereitstellen, um diese Objekte zu registrieren und abzufragen, und auf der anderen Seite bei den Edges, Triangles, etc... beim Zuweisen der Vertices eben das Objekt beim Vertex registrieren.

  • Spite82
    8
    Spite82
    Mitglied
    Reaktionen
    1
    Punkte
    571
    Beiträge
    89
    • 5. Oktober 2010 um 18:23
    • #5

    Tja, und da wirds eher wieder kompliziert denk ich - wenn jeder Vertex alle Edges und Triangles speichert, jede Edge, 2 Vertices und auch angrenzende Triangles und die Triangles dann eben umgekehrt... werde mir mal das überlegen, wie ich das am Besten angehe :)

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Tags

  • trianglemesh
  • csharp

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung