Software-Renderer

Übersicht Sonstiges Projekte

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Devils Child

Betreff: Software-Renderer

BeitragMo, Sep 19, 2005 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!

ich bin grad dabei nen software.-renderer zu schreiben und hier unten ist ne kliene demo Wink

http://xware.chat-blitz.de/software-renderer.zip

features:
-matritzen basierendes dynamisches entitysystem
-camera gamma ohne blitzbasic-befehle wie "SetGamma"
-FOV und Zoom system
-farben und multi-color auf entitys(und cameras)
-18 3D - Befehle wie in blitz3d(z.b. moveentity)
-4 priomitives(cube,cylinder,sphere,cone)
-ladefunktion für meshes
-polygonares system(was auch befehle wie flipmesh erlaubt)

TO DO:
- zBuffer
-texturen
-vertex-colors
-3ds/b3d/x lader

achja: lest mal was oben steht und probiert die tasten 1 bis 3 aus!!

bevor blöde kommentare kommen: es ist alles 2D ohne 3d befehle, könntet ihr sicher nicht so schön hinkriegen
Mr. Green
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN
 

David

BeitragMo, Sep 19, 2005 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Zitat:

bevor blöde kommentare kommen: es ist alles 2D ohne 3d befehle, könntet ihr sicher nicht so schön hinkriegen


Wenn du schon mit sowas ankommst, sind dumme Kommentare doch vorprogrammiert!

Sieht schon nett aus das ganze. Es ist allerdings kein Softwarerenderer, weil du DirectX zum Rendern verwendest?!?

Und ich wette du bist nicht der einzigste der das so schön hinbekommt! Razz

grüße

maximilian

BeitragMo, Sep 19, 2005 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ansich eine feine Idee, aber spätestens beim Texture Mapping wird das Ding viel zu große Slowdowns erleiden. Unter anderem musst du dafür deine Poly-Füll-Routinen komplett umbauen.
Variety is the spice of life. One day ignore people, next day annoy them.

Devils Child

BeitragMo, Sep 19, 2005 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
LordChaos hat Folgendes geschrieben:
Unter anderem musst du dafür deine Poly-Füll-Routinen komplett umbauen.

ich weiss Wink

ausserdem benutzt ich da kein directx oder opengl, seht ihr ein "Graphics3D" oder "CreateCamera".
NEIN. da benutzt ich nur 2d befehle!
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

frigi

BeitragMo, Sep 19, 2005 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist doch schnurze. Du nimms auf alle fälle Grafikbefehle, dass reicht doch....
frigi.designdevil.de

Devils Child

BeitragMo, Sep 19, 2005 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
die einzigen grafikbefehle die ich da benutze sind "Text" und "Rect" und die basieren net auf D3D! Razz
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

frigi

BeitragMo, Sep 19, 2005 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Genauso schnurze: DirectX (in diesem Fall) ist die "Grafikschnittstelle". Wenn du was auf dem Bildschirm sehen willst, was bei dir ja wohl eindeutig der Fall ist, dann musst du es auch benutzen. Oder halt OpenGL, aber das unterstützt BB ja nicht.
frigi.designdevil.de

Devils Child

BeitragMo, Sep 19, 2005 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für die aufklärung aber ich weiss wie ein computer funktioniert! Twisted Evil
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

frigi

BeitragMo, Sep 19, 2005 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
OT: Rolling Eyes
Dann sag doch nicht, dass du es nicht benutzt, wnn du anscheinend ganu weist, dass du es tust...
frigi.designdevil.de
 

David

BeitragMo, Sep 19, 2005 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Devils Child hat Folgendes geschrieben:
vielen dank für die aufklärung aber ich weiss wie ein computer funktioniert! Twisted Evil


Weist es wohl doch nicht. Denn BlitzBasic verwendet bei den 2D Befehlen DirectDraw. Was wiederum heist, das da nichts per Software gerendert wird.
Einzig das bisschen rumgerechne machst du allein. Smile

grüße

Devils Child

BeitragMo, Sep 19, 2005 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
softwarerenderer von spielen wie half-life und so, die benutzten warscheinlich auch directdraw oder so... auf jeden fall ist das was ich da oben hab NUR mit 2d befehlen.
dake!
tschü 8)
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN
 

David

BeitragMo, Sep 19, 2005 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Devils Child hat Folgendes geschrieben:
softwarerenderer von spielen wie half-life und so, die benutzten warscheinlich auch directdraw oder so... auf jeden fall ist das was ich da oben hab NUR mit 2d befehlen.
dake!
tschü 8)


Nein, tuen sie nicht. Ist ja aber auch egal, sieht schonmal ganz nett aus.

grüße

Vertex

BeitragMo, Sep 19, 2005 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Möp SoftwareRendering, frigi! Devils Child hat völlig Recht!

Devils Child: Sehr schön! Z-Buffer ist nicht schwer:
Code: [AUSKLAPPEN]
(Xe Ye Ze We) = (Xo Yo Zo Wo) x ModelViewMatrix
(Xc Yc Zc Wc) = (Xe Ye Ze We) x ProjectionMatrix
(Xd Yd Zd) = (Xc/Wc Yc/Wc Zc/Wc)
Xw = ViewportWidth/2*Xd+(ViewportX+ViewportWidth/2)
Yw = ViewportHeight/2*Yd+(ViewportY+ViewportHeight/2)
Zw = ((f-n)/2)*Zd+(n+f)/2


(Xo Yo Zo Wo) = Objekt-Koordinaten
(Xe Ye Ze We) = Eye-Koordinaten
(Xd Yd Zd) = Normalized Device Koordinaten
(Xw Yw Zw) = Window Koordinaten
f = Farclipping Plane (Far bei CameraRange)
n = Nearclipping Plane (Near bei CameraRange)

Zw müsstest du dann eigentlich in ein Float-Array(müsste dann z. B. 640*480 groß sein) eintragen. Beim Löschen des DepthBuffers setzt du alle Werte auf Inifinity. Dann lässt du alle Fragment durch, die ein größeren Wert haben, als der im Array an dieser Position.

Solche Sachen wie StencilBuffer oder ClippingPlanes lassen sich recht einfach umsetzen in einem Softwarerenderer.

mfg olli
vertex.dreamfall.at | GitHub
 

BIG BUG

BeitragMo, Sep 19, 2005 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir zwar vorgenommen, bei keinem Devilthread mehr zu posten, aber ich halte es diesmal einfach nicht aus. Das Kind richtet mich noch nervlich zu Grunde.
Zitat:

es ist alles 2D ohne 3d befehle, könntet ihr sicher nicht so schön hinkriegen

btw sei angemerkt, dass nach seinen Codefragen hier der größte Teil eh von Helfern aus dem Forum stammt...

So, zurück zu Ignore = True
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Suco-X

Betreff: ......

BeitragMo, Sep 19, 2005 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, das hier ist doch ein Codearchiv?
Ich seh da aber nur einen Beispielcode, der ohne die Lib aber überflüssig ist. Somit hat dieser Thread im Codearchiv nichts zu suchen.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Devils Child

BeitragDi, Sep 20, 2005 0:10
Antworten mit Zitat
Benutzer-Profile anzeigen
der source code kimmt in 2 tagen wenn ich(mit hilfe von vertex Laughing ) nen zbuffer reingemanscht hab!
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

frigi

BeitragDi, Sep 20, 2005 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
@Vertex: Ich habe mich da auf die Aussage von im bezogen, dass er gesagt hat, er würde überhaupt kein DirectX nehen.
Wenn er was Anderes gemeint haben sollte, auch ok. Für mich war dass dann allerdings nicht klar genug ausgedrückt.
frigi.designdevil.de

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Sep 21, 2005 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Um es noch ein bisschen komplizierter zu machen, könnte man alle Pixel direkt in den Grafikspeicher schreiben. Dann hat man (so denke ich) alle Schnittstellen umgangen. Ob BB das zulässt, bleibt eine andere Frage. Mit meinem uralten PowerBasic konnte ich so was machen. Da konnte ich im ersten MB meines Speichers alles auslesen und beschreiben. Oft ist der Rechner dabei abgestürzt wenn man irgendwelche Bytes verändert hat… Aber das beschreiben des Grafikspeichers war immer wieder lustig. Oder mal kurz den DOS-Font verändern... Ansonsten finde ich das Beispiel ganz gut. Ist zwar für Spiele nicht zu gebrauchen, aber es ist immer wieder gut zu wissen, daß einige Leute auch verstehen wollen wie etwas funktioniert. Man könnte daraus zB ein Renderprogramm erstellen. Da kommt es auf Geschwinigkeit nicht so an...

Vertex

BeitragMi, Sep 21, 2005 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
frigi: Jo, shit, ich meinte David Smile

Ansonsten Devils Child: Werde wohl doch nicht dazu kommen, mal einen zu schreiben. Wie gesat, les dir mal ein wenig die OpenGL Specs durch. Da steht das nochmal beschrieben, wie die Vertices durch die Renderpipeline gejagt werden.

Vertices -> [VertexShader] -> [Rasterization] -> [FragmentShader] -> Resultat.

Der VertexShader bekommt als Parameter die Position des Vertex(lokale Koordianten, sogenannte Objektkoordinaten), Normalkooridnaten(VertexNormal in B3D), Farbe des Vertex (VertexColor in B3D) und Texturkooridnaten(VertexTexCoords in B3D).
Zusätzlich stehen ihm die globalen States wie ModelViewMatrix, ProjectionMatrix, Lightargumente(Position, Atenuation, Farbe, Shiningness) sowie Materialargumente(änlich der von Lights) zur Verfügung.

Daraus berechnet er die resultierende Vertexposition(Clipcoordinates, siehe Formel), die resultierenden Normalkooridnaten(Normalkooridnaten x inverse ModelViewMatrix), die resultierende Farbe(hier geht Lighting mit ein). Zusätzlich werden noch die Texturkooridnaten berechnet, wenn z. B. Spheremapping, CUbemapping oder änliches ansteht.

Jeder Vertex wird also einzeln durch den VertexShader geschickt. Die resultierenden Parameter werden dann an den Rasterer(wird der so genannt?) übergeben. Dieser lässt dann aus den 3 Vertices das Triangles füllen. Aus den Clipkoordinaten der 3 Vertices berechnet er zu erst die Bildschirmkoordinaten. Liegen die Vertices ausherlab des Bildschirms(also außerhalb des Frustums), wird das Triangles verworfen. Jetzt kann er das Triangles füllen lassen. Hierzu wird ein Scanlinealgorithmus verwendet. Er sortiert erst die Vertices nach der Y Kooridnaten und fährt vom obersten bis zum untersten Vertex eine Scanline ab. Pro Linie findet er die linke und rechte Begrenzung des Triangles. Jetzt interpoliert er für jedes einzelne Fragment in diesem Triangle die Farbe, die Texturkooridnaten, sowie auch die Bildschirmkoordinaten(im Grunde muss er das ja schon beim rastern machen). Jetzt wird in den ZBuffer geschaut, ob schon ein Fragment das gerade berechnete verdecken würde, wenn ja, wird es verworfen, wenn nein wird es an den FragmentShader weitergeleitet.

Jedenfalls werden dann die interpolierten Bildschirmkoordinaten, Texturkoordinaten sowie Farbe des Fragments an den FragmentShader geschickt. Als erstes liest er aus, welche Farbe der Texel hat, wo die Textukoordinaten gerade drauf zeigen. Diese Farbe wird mit der eingehenden Farbe je nach dem verrechnet. Bei GL_ADD würde er z. B. die jeweiligen Farbanteile addieren. Die resultierende Farbe des Fragments wird dann ausgegeben.

Diese Farbe wird dann mit dem Inhalt des Fragmentbuffers verrechnet. Hat man kein Alpha drin, so wird einfach das Fragment an dieser Stelle eingetragen, ansonsten wird es mit einem bestehenden Fragment z. B. verrechnet.

Wie gesagt, das Thema ist zu komplex, als es hier ausführlich zu behandeln. Hier oben habe ich nur sehr sehr grob das ganze veranschaulicht, wie du in etwa überhaupt den Renderer aufbauen musst. Dazu wollte ich schon immer mal ein Buch schreiben in Zusammenhang mit OpenGL.

mfg olli
vertex.dreamfall.at | GitHub

Triton

BeitragMi, Sep 21, 2005 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Devils Child hat Folgendes geschrieben:
der source code kimmt in 2 tagen wenn ich(mit hilfe von vertex Laughing ) nen zbuffer reingemanscht hab!


Gut. Wenn nicht, muss ich das aus diesem Forum entfernen.
Aber wäre es nicht insgesamt klüger, das als Projekt zu betiteln?


Zum Beispiel: sieht schon nicht schlecht aus, ich vermisse "nur" Smoothshading und perspektivische Verkürzung.
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group