Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 11.07.2008, 16:09 Titel: 3D-Raster |
|
|
Wie würdet ihr ein 3D Raster mit 16x16x16 Pixel darstellen? Jeder 3D-Pixel kann entweder weiss oder durchsichtig/transparent sein.
Der "Würfel" sollte perspektivisch drehbar sein.. Schnittstelle weitgehend egal.. also ob selbstgemacht oder OpenGL/DirectX oder ähnliches...
Sollte nur möglichst einfach zu realisieren sein und nicht grade im schneckentempo arbeiten.. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 11.07.2008, 16:14 Titel: |
|
|
Nachtrag:
Die Pixel sollten eine Räumliche ausdehnung besitzen.
Also keine 16x2D-Grafiken hintereinander legen. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 11.07.2008, 16:30 Titel: |
|
|
1. Es gibt keine "Punkte" im 3D Raum, die du einfach so zeichnen kannst. Das liegt daran, weil die 3D Schnitstelle keine Tiefen bzw. Breiten und Höheninformationen zu diesem "Pixel" hat.
Du kannst jedoch 3 Dreiecke zu einem "Punkt" verbinden.
Alternativ könntest du, wenn du nur punkte haben willst, einen Punkthaufen bilden, und diesen im Wireframe betrieb zeichnen lassen. Dann würdest du Punkte sehen, jedoch wären sie ohne tiefeninformationen sowie ohne Textur.
was genau hast du vor?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 11.07.2008, 16:43 Titel: |
|
|
Gabs nicht früher mal in manchen spielen sogenannte "Voxel" ?
Ein Punkthaufen ist nicht "dicht" genug wenn ich mir das so vorstelle.. Wenn zwei ausgefüllte punkte neben/übereinander liegen sollte der raum zwischen den beden pixeln "dicht" sein.. also man sollte nicht dazwischen durchschauen können...
Wenn euch Conway's Game of Life was sagt, dann stellt euch das mal in 3D vor
Aber auch für andere Gedankenspiele, die mir so im Kopf rumschwirren könnte ich ein 3D-Raster gut gebrauchen...
Ich stelle mir diese 3D-Pixel wie Quader vor.. nur würden sie dann aus mehreren polygonen bestehen welche die programmierung sicherlich nur noch komplizierter machen würden... schätze ich mal... |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 11.07.2008, 17:18 Titel: |
|
|
http://de.wikipedia.org/wiki/Voxel
http://en.wikipedia.org/wiki/Voxel
Vielleicht wären ja openGLs 3D-Texturen was für dich... (Falls deine Grafikkarte oder openGL Implementation das Unterstützt - in Hardware, versteht sich, weil das in Software dermassen lahm ist, da kannste gleich Opas Diaprojektor rauskramen )
Das dürfte ab openGL 1.2 gehen...
Nachschauen welche openGL Version du hast, kannst du mit fbSysMon, im Report unter Graphics -> openGL version
Was auch wichtig ist, dass alle Masse der 3D-Textur gleich sind, und power of 2 (n^2) groß sind.
Dann kannst du die einfach ne Scheibe der Textur abschneiden ( ), auf ein GL_QUAD oder zwei GL_TRIANGLES tapeziern, die dann im 1er anordnung hintereinander klatschen, glRotatef davor, und glücklich sein
Falls ich dich falsch verstanden habe, und du irgendwas ála Matrizenberechnung mit 3 Spalten machen willst -> Shader (per Multitexturing gewünschte Berechnung durchführen, per glReadPixels Bild auslesen und in gewünschtes Datenformat transformieren) |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 11.07.2008, 18:13 Titel: |
|
|
Mit dem "Pixelhaufen" meine ich eher die Tatsache, das z.B. ein Dreieck aus 3 Vectoren besteht. In DX kann man hier den Wireframe (Lininezeichnung) ein und ausschalten. Wenn du ausschliesslich einen Würfel aus Punkenhaben wilslt, kannst du den "Trick" nutzen, und einfach einen Würfel als Punkthaufen (vektoren) definieren, udn den Wireframe Modus aktivieren. Wenn du diesen Puntkhaufen dannzeichnest, dann wird er nicht als zusammenhängende Linie sondern jeder Vektor als Pixel dargestellt. Egal wie weit er weg ist.
Aber, ich glaube das willst du garnicht. Ich schätze, du willst sowas wie in der WIki unter Voxel zu sehen ist.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Name.and(2)=Andreas
Anmeldungsdatum: 11.07.2008 Beiträge: 14
|
Verfasst am: 11.07.2008, 19:12 Titel: |
|
|
Eig könntest du das ganze doch einfacher haben, indem du ein Array( 16x 16 x 16) erstellst und dann eine skalierung hinzufügst bsp.: du sagt standardmäßig ist ein Punkt 1X1x1 Pixel und dann kannst du das beliebig mit dem skalierungsfaktor s vergrößern, so dass es passt.
( in dem Array kannst du dann die Farbinformationen speichern bsp.,: 1 für weiß; 0 für transparent)
jetzt brauchst du nur noch die formeln, um den würfel auch 3d anzuzeigen, bedien dafür mal google, da hab ich auch was gefunden als ich sowas ähnliches benötigte (sry hab den Link vergessen)
Andreas _________________ Fluchen ist die einzige Sprache, die alle Programmierer wirklich beherrschen! |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 11.07.2008, 19:17 Titel: |
|
|
Die Zeiten in denen jeder seinen eigenen Software-Renderer programmiert hat sind vorbei.
Er kann das ganz einfach handeln, indem er eine 3D-Textur wie ein 3 Dimensionales Array behandelt, und danach durch eine Schleife diese per glCopySubTexImage3D (oder so ähnlich) auf mehrere GL_QUADS bringen.
evtl. glScalef davor, glTranslatef wahrscheinlich auch, und glRotatef für die Perspektive...
(Nat. gluPerspective beim Initialisieren nutzten...)
Wenn du's mit openGL ganz leicht haben willst, hier gibts nen GLFW Basecode, dann brauchst du dich nich mit der fbGFX rumärgern.
Achja, und du brauchst nen aktuellen GLFW Header, hier zu haben... |
|
Nach oben |
|
 |
Name.and(2)=Andreas
Anmeldungsdatum: 11.07.2008 Beiträge: 14
|
Verfasst am: 11.07.2008, 19:27 Titel: |
|
|
Ja das ist wahr, jedoch scheint bei seinem Anwendungsgebiet sowas sinnvoller zu sein, denn er will das ja für verschiedene Anwendungen mit anderen Anforderungen haben, da kann er es dann ja einfach umprogrammieren.
Außerdem...so schwer ist das was ich vorgeschlagen hab nu nicht, in Delphi hat das mal ein Kumpel von mir gemacht, das waren kaum mehr als 150 Zeilen und das ist nun wirklich nicht die Welt.
Andreas _________________ Fluchen ist die einzige Sprache, die alle Programmierer wirklich beherrschen! |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 14.07.2008, 13:24 Titel: |
|
|
@28398: Was ist das denn für ein seltsamer code? .. da ist eine funktion namens main mit irgendwelchen Parametern deren sinn ich nicht verstehe und ganz am ende wird die funktion mit "end function" beendet.. aber dann kommt noch eine Zeile:
End main(__FB_ARGC__, __FB_ARGV__)
Deren sinn erschließt sich mir irgendwie überhaupt nicht..
Soll das einer main-function wie in C/C++ entsprechen? .. wie funktioniert das?? bzw warum wird das da so gemacht?
Sorry für das kurze offtopic... |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 14.07.2008, 16:24 Titel: |
|
|
__FB_ARGC__ und __FB_ARGV__ sind Präprozessorkonstanten, welche zu den Komandozeilenparametern umgesetzt werden. (Siehe: Command Befehl)
Die Rückgabe der main() function wird als "Fehlernummer" an End weitergeleitet.
Und, jo .. das is C Style.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 14.07.2008, 22:57 Titel: |
|
|
Habe das so gehalten, weil das eine (fast) 1:1 Übersetztung von hier ist.
Habe lediglich den Teapot hinzugefügt... |
|
Nach oben |
|
 |
|