3D Array
-
Hi,
ich möchte gern ein volumen mit einem korrdinatensystem verbinden, dass heißt dass ich auf einzelen voxel zu greifen kann.
dazu habe ich folgende structs:
typedef struct { uint Width; uint Height; uint Depth; QGLColormap *Colormap; int VoxelWidth; int VoxelHeight; int VoxelDepth; uint Value; } Volume; typedef struct { uint X, Y, Z; } Voxel;
Würde das mit einem 3D array machbar sein..wenn ja wie???
Danke auf jeden Fall!!
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hi Devil's Daughter!
Ist zwar OT, aber...
Ich habe mir mal ein paar Beiträge von Dir angeguckt und wie es aussieht, willst Du wohl ein bischen was in Richtung medizinische Bild- und Volumenverarbeitung machen. Darf man fragen, was Du da vor hast? Sowas interessiert mich prinzipiell.
Ich kenne mich mit C++ prinzipiell nicht aus, deshalb kann ich dir leider nicht helfen. Aber es gibt da eine Bibliothek namens "vigra". Die enthält auch entsprechende Datenstrukturen, wie Du sie hier haben möchtest. Vielleicht wäre die mal einen Blick wert.
-
mit
Voxel myVoxelVolume[16][16][16];
-
Danke!!
16 hat aber keine bestimmte bedeutung oder????
und den programmteil schreib ich einfach mitten ins programm..oder in den ersten struct???
ist eine art rendering....
der tipp mit der library ist nett, allerdings bin ich grad dabei eine andere raus zu schreiben, und will nicht wieder eine neue rein tun....trotzdem danke
-
Hier übrings der teil in den ich das ganze einbauen will:
std::pair<int,int>qsplatdrr::Volume_MaxMin() { Voxel vox; uint volIntMax = 0; uint volIntMin = 0; uint w = qsplatdrrVolume -> Width; uint h = qsplatdrrVolume -> Height; uint d = qsplatdrrVolume -> Depth; uint v = qsplatdrrVolume -> Value; for (uint wv=0; wv < w; wv++) { for (uint hv=0; hv < h; hv++) { for (uint dv=0; dv < d; dv++) { vox.X=wv; vox.Y=hv; vox.Z=dv; if (v > volIntMax) { volIntMax = v ; } if (v < volIntMin) { volIntMin = v; } } } } return std::make_pair(volIntMax,volIntMin); }
-
Devil's Daughter schrieb:
ist eine art rendering....
ach so. "Direct Volume Rendering" oder sowas? Ich kenne in diesem Umfeld einige Paper, die bestimmte Varianten des Direct Volume Rendering beschreiben. Wenn Du willst, kann ich Dir da mal ein paar Links geben.
Wenn Du fertig bist, kannst Du ja mal ein paar Screenshots posten. Die würde ich gerne sehen.
-
ja wäre sehr an links interessiert...
werd ich dir posten, wenns fertig ist
-
Interactive Volume Rendering based on a "Bubble Model":
http://www.fsz.bme.hu/~cseb/Publications/GI01/paper.pdf
...und auch noch viele weitere interessante Publikationen dieses Instituts:
http://www.cg.tuwien.ac.at/research/publications/
Two-Level Volume Rendering:
http://citeseer.ist.psu.edu/hauser01twolevel.html
http://citeseer.ist.psu.edu/hadwiger03highquality.htmlEtwas zum Shear-Warp Algorithmus, falls Du es schnell haben willst:
http://graphics.stanford.edu/papers/shear/shearwarp.pdf
(...dein Code sieht momentan noch nach einer einfachen achsenparallelen Projektion aus. Da wird dir das noch nichts bringen. Das ist aber gegenüber einem einfachen Raycasting-Algorithmus deutlich schneller. Ansonsten guck Dir mal den Marching-Cubes-Algorithmus an. Der ermöglich auch ne Menge Geschwindigkeit, auch wenn der nicht unter die Kategorie DVR fällt.)
Naja, soviel hatte ich jetzt gar nicht, aber ich glaube, Du hast erstmal genug, heh?!
PS: Du findest ne Menge Testdaten auf www.volvis.org ...falls Du es noch nicht weißt.
-
Dei Beitrag von Gregor wäre was für die FAQ (Titel: Voxel)!
Die Links scheinen sehr brauchbar zu sein
-
kannst du mir vielleicht noch verraten wo diese code zeile hin gehört????
Wäre sehr wichtig!!!
-
Na da wo du dein 3D Array haben willst !
Du solltest schon wissen was eine Variable ist und wie man sie benutzt/erstellst, und zwar bevor du ne Voxel Engine schreibst...
-
wenn ich, dass allerdings so mache bekomme ich folgende fehlermeldung:
invalid use of `qsplatdrr::Voxel'
deswegen habe ich die frage gestellt....
und das problem ist, dass ich dann bei den korrdinaten wv,hv,dv sein sollte.....
und im voxel sturct kein array ist.....
was ich noch gern wissen würde...wodurch kann dieser array die beiden structs verbinden.....vielleicht könntet ihr mir an nem einfach beispiel zeigen,
wenn ich z.b. nur den wert an einer bestimmten stelle haben will...
also quasi ne getvoxel funktion.....z.b. an der stelle wi,hi,di....@ChaosAngel
das weiß ich im prinzip schon, aber hab schon eingies ausprobiert und nichts funktioniert....deshalb bin ich schon leicht verzweifelt....und ich muss diese voxel engine schreiben, machs nicht um spaß!
-
vielleicht wäre der kauf soeiner voxelengine günstiger als das selbstschreiben
aber da du grundlegende probleme hast und nicht mit graphik, verschieb ich den thread mal;)
-
Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Danke fürs verschieben...
ja günstiger wäre es schon...allerdings ist meine aufgabe ein solche eben nicht zu verwenden....