Software-Renderer
Übersicht

![]() |
Devils ChildBetreff: Software-Renderer |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi!
ich bin grad dabei nen software.-renderer zu schreiben und hier unten ist ne kliene demo ![]() 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 ![]() |
||
*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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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! ![]() grüße |
||
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
LordChaos hat Folgendes geschrieben: Unter anderem musst du dafür deine Poly-Füll-Routinen komplett umbauen.
ich weiss ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist doch schnurze. Du nimms auf alle fälle Grafikbefehle, dass reicht doch.... | ||
frigi.designdevil.de |
![]() |
Devils Child |
![]() Antworten mit Zitat ![]() |
---|---|---|
die einzigen grafikbefehle die ich da benutze sind "Text" und "Rect" und die basieren net auf D3D! ![]() |
||
*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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielen dank für die aufklärung aber ich weiss wie ein computer funktioniert! ![]() |
||
*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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
OT: ![]() Dann sag doch nicht, dass du es nicht benutzt, wnn du anscheinend ganu weist, dass du es tust... |
||
frigi.designdevil.de |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Devils Child hat Folgendes geschrieben: vielen dank für die aufklärung aber ich weiss wie ein computer funktioniert!
![]() 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. ![]() grüße |
||
![]() |
Devils Child |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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-XBetreff: ...... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
der source code kimmt in 2 tagen wenn ich(mit hilfe von vertex ![]() |
||
*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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
frigi: Jo, shit, ich meinte David ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Devils Child hat Folgendes geschrieben: der source code kimmt in 2 tagen wenn ich(mit hilfe von vertex
![]() 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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group