3D mit 2D Befehlen
Übersicht

![]() |
FlushBetreff: 3D mit 2D Befehlen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo ![]() ich habe bis jetzt alle 3D Routinen mit den B3D internen 3D Befehlen gecodet. Mich interessiert nun die Darstellung von 3D Objekten (Primitives) mittels der 2D Befehle von B3D. Ich weiß dass ich Projektions-, Transformations-, Rotationsmatrizen oder Quaternionen dazu verwenden muss. Ich habe mir die Finger fast schon wund gesucht ![]() Kennt Ihr da was vernünftiges? ![]() Viele Grüße, Flusher |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Öhm, was willst du da machen?
Wenn du 3D machen willst, dann mach doch mit den dafür vorgesehenen 3D-Befehlen. Wenn du 3D und 2D kombinieren willst (z.B. 3D für die Spielwelt, 2D für das Userinterface), dann mach zuerst RenderWorld() und danach die 2D-Befehle. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht willst du eher Raytracing machen? Glaube nicht das Blitz3D so gut geeignet ist um selber 3D zu implementieren. Das fehlen von richtigen Klassen und Arrays fällt schon bei normalen Spielen störend auf. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube auch, du willst "selbst rendern"... Aber das ist tatsächlich mit B3D ziemlich aussichtslos.
Noobody hat sowas mal gemacht: https://www.blitzforum.de/gallery/1502/ Zitat: Die Renderzeit für dieses Fraktal betrug ca. 3.5 Minuten
EDIT: Da ein noch schöneres Projekt: https://www.blitzforum.de/showcase/228/ |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube, er will einfach einen Software Renderer basteln. Natürlich ist das mit BB relativ umständlich, die Matrixfunktionen muss man erstmal selber schreiben und die 2D-Befehle von BB sind relativ lahm.
Aber eigentlich ist der Rest nur Mathe und auch in BB umsetzbar. Zum Verständnis ist so ein Projekt sehr interessant. Vor Jahren hab ich mich damit auch mal beschäftigt. Vllt finde ich noch was in meinen Archiven. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier ist auchnoch etwas Schönes von Noo:
https://www.blitzforum.de/foru...hp?t=27624 Es macht allerdings nicht viel Sinn. Wenn man die Blitz3D Engine für 3D benutzen kann, sollte man es auch tun, weil es einfach viel schneller ist. Man kann ja durchaus "Retro"-Style Ergebnisse erzielen und trotzdem die effizientere Technik nutzen. Real Time fähig ist diese Raycaster Sache nur bedingt und je höher die Auflösung, desto langsamer wird es. |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube der Großteil meiner Codes ging in den letzten Jahren flöten...
Aber um das Prinzip zu zeigen, hab ich mal schnell was gebastelt: BlitzBasic: [AUSKLAPPEN] Graphics 1024,768,32,2Ist natürlich alles andere als brauchbar, aber vielleicht hilft es dir weiter. Der Schlüssel zur Umrechnung eines 3D Punktes auf 2D Bildschirmkoordinaten liegt in der Projektionsmatrix. Die habe ich mal von hier geklaut. Das Prinzip ist einfach: du multiplizierst die Projektionsmatrix mit dem Vektor im Raum, und gewinnst dadurch den Punkt auf einer Projektionsfläche, die in einem bestimmten Abstand von der Kamera entfernt ist. So ähnlich wie Lochkamera, nur eben mit der Projektion VOR der Öffnung. Die Berechnung von der auf [-1,1] normierten Projektionsfläche auf Bildschirmkoordinaten ist hier ein wenig vereinfacht. Da gibt es auch allgemeinere und elegantere Möglichkeiten mit Viewportmatrizen. Das ist jetzt beliebig erweiterbar, man könnte Objekte einführen und damit lokale/globale Koordinaten. Translationen/Rotationen etc. sind dann auch einfache Matrizenmultiplikationen. Die Translation/Rotation der Kamera selbst muss eigentlich auch gesondert berücksicht werden. Der Z-Buffer ist natürlich noch wichtig. Wobei mit BB wird das eigentliche Problem dann etwas anderes als Wireframe zu kriegen, da Bildermanipulationen einfach viel zu langsam sind. Also wie schon zuvor erwähnt, das sind eher mathematische Fragestellungen. Das zu verstehen und als Code zu organisieren ist die eigentliche Herausforderung ![]() |
||
- Zuletzt bearbeitet von Chester am Mo, Feb 22, 2016 1:30, insgesamt einmal bearbeitet
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du einen Software-Rasterisator (heißen die so? ![]() |
||
![]() |
FlushBetreff: High, |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielen Dank für Eure schnellen Antworten ![]() Also ein Raycaster oder ein eigener vollständiger Renderer soll es nicht werden soweit bin ich mit meinen Prog.Kenntnissen noch nicht. Ich glaube der Source (ich habe erst heute Abend genug Zeit ihn mir genau anzusehen) von Chester kmmt der Sche am nächsten. Ich möchte einfach mit hlife selbst programmierter Matrizen (Projektion, Transformation, Rotation) 3D Primitive (Würfel, Pyramiden, Kugeln etc.) als Drahtgittermodell darstellen. Später möchte ich dann gefüllte Vektoren darstellen. Das ich das ganze mit B3D eigenen 3D Befehlen realisieren kann ist mir schon klar aber. Allerdings lerne ich dabei nicht wirklich viel über 3D Grafik. Das ganze Projekt hat also eigentlich nur learning purposes. Wenn ich alles zusammen habe werde ich ein Tutorial daraus machen. Ich habe schon sehr viele Fragen bezüglich Matrizen, allgemeiner 3D Darstellung von Körpern, und auch Quaternionen gelesen die damit beantwortet werden könnten. Transformation: http://www-lehre.informatik.un...ation.html Projektion: http://www-lehre.informatik.un...0000000000 3D-Rotation: https://www.siggraph.org/educa...3drota.htm Das müsste doch in B3D mit den schnellen 2D Befehlen sehr einfach umsetzbar sein ![]() ![]() Ich hab da leider echte Startschwierigkeiten! ![]() ![]() ![]() Viele Grüße, Flusher |
||
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du brauchst dafür mehrere Vektoren und Matrizen. Die Vektoren müssen 4 Elemente haben und die Matrizen 4x4. Dann brauchst du Funktionen wie z.B. das Multiplizieren von Matrix mit Matrix oder Vektor mit Matrix und Ähnliches.
Ich möchte dir nochmal die DirectX Dokumentation empfehlen. Du musst kein DirectX lernen, hier wird aber beschrieben wie die Matrizen aufgebaut sind. Z.B. hier und hier Hier mal ein kleines Beispiel zum Aufbau, ist auch anders lösbar: BlitzBasic: [AUSKLAPPEN] Global matrixzahl = 99 Beim reinen Rechnen ist Blitz recht schnell, langsam wird es beim Darstellen (einzelne Pixel malen). |
||
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke Kruemelator,
hier noch eine sehr gute (alte) Website. Leider krieg ich die Appletts ums verrecken nicht zum laufen ![]() ![]() ![]() ![]() Die Seiten sind aber jedem wärmstens ans Herz zu legen der 3D besser verstehen möchte. Ich halte euch über den Forgang des Tutorials auf dem Laufenden. http://olli.informatik.uni-old...page1.html Grüße, Flusher |
||
- Zuletzt bearbeitet von Flush am Mo, Feb 22, 2016 18:27, insgesamt einmal bearbeitet
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die 2D-Befehle sind leider alles Andere als schnell, da sie keine Hardware verwenden. Eventuell kommst du weiter, wenn du dir BMax holst, und dort direkt in OpenGL machst. Dort kannst du nämlich die Hardware direkt verwenden für das was du machen willst, so das es auch wirklich einen Sinn macht.
Da kannst du dann sogar auf so coole Sachen wie Shader weiter gehen, das macht dann echt Spaß. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, aber dann habe ich wieder 3D Objekte!!!!
Ich fang mal ganz klein mit der Darstellung und der Rotation eines Würfels an. Ich den Beitrag aktualisieren. Hier und s.o. die Seite von der ich gesprochen habe. http://olli.informatik.uni-old...page1.html Auch ohne Applettdarstellung sehr nützlich. Viele Grüße, Flusher |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nö, hast du nicht. Alles, was es dir von vornhinein gibt, sind die Datenstrukturen für Vertices und Surfaces. Die gesamte Mathematik dahinter kannst du selbst machen. Zumindest, wenn man halbwegs neue OpenGL-Befehle benutzt und nicht die ewig alte fixed function pipeline. | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, das wußte ich nicht, dann ist OpenGl vllt. auch eine Alternative!
Im Bezug auf das Tutorial poste ich den Fortgang, vll. interessiert es den Einen oder Anderen. ![]() ![]() ![]() Viele Grüße, Flusher |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
So wie es mir klingt willst du eine eigene Renderengine schreiben. Das ist eben genau wofür OpenGL gedacht ist, zumindest seit den neueren Versionen. Man hat bei OpenGL die alte Fixed Function Pipeline, die Objekte und Shading und so hat. Und dann gibt es die neuere Pipeline, bei der man alles selber macht, und damit hald deutlich mehr Spielraum und Freiheit hat. Das wäre, was du brauchst. | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group