Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

di il
3 risposte

Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

Vorrei realizzare, in c#, un programma che sostanzialmente riesca a leggere dei file dxf e delle nuvole di punti e riesca a rappresentarli, anche solo in wireframe, in 3d con le varie operazioni di zoom e spostamento punto di vista

Inoltre, alcuni di questi dxf dovrebbero essere 'incernierati' uno sull'altro e potersi muovere (venir cancellati e ridisegnati) in funzione di alcuni valori passati in real-time

Fai conto di vedere un aereo, con carrello estraibile, flap movibili, coda movibile, tutti e 4 forniti come file dxf separati ed incernierati uno sull'altro

I parametri passati saranno la posizione dell'aereo (un punto con coordintate x,y,z), la sua direzione (in gradi A/B/C rispetto ad un riferimento stabilito), l'inclinazione flap (in gradi rispetto alla posizione di riposo), l'inclinazione piano di coda (in gradi rispetto alla posizione di riposo), l'apertura del carrello (in percentuale rispetto alla posizione completamente rientrata) 

Una specie di videogioco dove l'aereo (insieme di 4 dxf) si muove su un terreno fornito come nuvola di punti e vengono visualizzate anche delle costruzioni tipo edifici o altro di regolare come dxf (insieme di triangoli)

Ovviamente si muove seguendo i parametri passati in real-time al programma (porta seriale, server tcp, mqtt o comunicazione similare)

Vedo che esistono diverse librerie per la lettura dei dxf ma non mi e' ben chiaro quale possa essere la piu' efficace in questo caso

L'unico vero problema lo vedo nell'incernieramento dei vari componenti l'aereo, nel senso che il piano di coda deve essere disegnato sia in posizione conforme alla posizione dell'aereo, sia con l'inclinazione passata dai parametri che arrivano di seguto uno dopo l'altro via il canale comunicazione che poi vedremo quel che sara', in prima istanza usero' degli slider per simulare i vari valori passati, per il momento mi concentro sulla visualizzazione 

Quali letture, consigli, esempi, potete indicare per aiutarmi ad arrivare a realizzare quanto descritto sopra?

3 Risposte

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    Non conosco quel formato file, o meglio è un CAD se non erro. Comunque c'è questa libreria Nuget https://www.nuget.org/packages/netDXF che dovrebbe fare al caso tuo.

    Facci sapere come risolvi.

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    Il format DXF e' un formato per immagini vettoriali di Adobe.

    https://it.wikipedia.org/wiki/AutoCAD_DXF

    Ora, quello che vorresti realizzare e' un "visualizzatore" di oggetti vettoriali 3D.

    Diciamo che non e' una cosa alla portata di un "programmatore della domenica", nel senso che serve

    1. saper programmare abbastanza bene in C/C++ ma anche C#, visto la richiesta
    2. conoscere come funziona la grafica 3D in modo abbastanza buono, perche' bisogna saper come usare le matrici di trasformazione (e sapere che cosa e' una matrice di trasformazione) e generare la matriche di trasformazione che proietta un oggetto 3D su un piano 2D
    3. utile, anche se non strettamente necessario per un'implementazione minimale, saper implementare l'algortmo del pittore o gli algoritmi di rimozione delle linee nascoste
    4. saper prendere in mano una delle varie librerie 3D a disposizione, come ad esempio OpenGL, Vulkan, ecc, ed usarla in modo proficuo, o i wrapper per C#

    .

    https://en.wikipedia.org/wiki/List_of_3D_graphics_libraries

    Ovviamente, anche la lettura del file DXF, implementata da 0, si puo' fare, ma non e' proprio banalissimo. 

    Diciamo che "forse" ti conviene partire da qualcosa piu' "pratico".

    Prova a vedere Blender, che e' un CAD 3D, opensource con il 95% delle funzionalita' che ti servono gia' "pre-implementate" che puo' essere anche programmato in Python.

    https://www.blender.org/

    Per STUDIARE i concetti fondamentali di Computer Grafica, questi sono due "superclassici":

    1. Computer Graphics Principles and Practice, 3rd - 2014 Addison Wesley
    2. Mathematical Structures for Computer Graphics - 2015 Wiley

    .

    NB: ci sono alternative, ovviamente, dal Vibe Coding a n-milioni di altri libi sull'argomento, dipende se vuoi "solo fare" o "imparare a fare"

    NB/2: ci sono anche altre alternative: usare tool che supportano GIA la visualizzazione 3D, ed in questo caso devi SOLO generare il modello 3D.
    Mathematica, Matlab, Maple, Maxima, ... e piu' in generale un qualunque "ragionevole" CAS ("Computer Algebra System"). Ma qui andiamo sul "fantascientifico" :-)

    NB/3: co sono anche gli "engine 3D" che si potrebbero prendere in considerazione, come Unity, Stride, Godot, Urho3D, ... Lumberyard, ...

    Per quanto riguarda la realizzazione di modelli 3D "vincolati", buona fortuna :-)

  • Re: Come fare visualizzatore 3d con lettura dxf e nuvola punti in c# ?

    Non sò aiutarti, solo qualche pensiero ad alta voce. Purtroppo non progetto applicazioni simili.
    Secondo me (e in linea con @migliorabile) potresti partire con motori di svilupo di giochi, dove però ti trovi chiaramente una grossa parte già sviluppata.

    OpenCV potrebbe essere un punto di partenza per le parti grafiche: consente di importare dxf e usarli come degli oggetti su cui puoi applicare tutta la matematica che vuoi. Inoltre ha diversi riferimenti ed integrazioni com motori di rendering completi (texture, shader, material, scene, interactive scene, etc ...). C'è una documentazione biblica (poi ci sono i riferimenti a terze parti che ti possono essere utili).

    Questo è il link: https://opencv.org/

    Auguri per il tuo progetto.

Devi accedere o registrarti per scrivere nel forum
3 risposte