Fragen zu Xors3D auch hier möglich?

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

Heiko

Betreff: Fragen zu Xors3D auch hier möglich?

BeitragSo, Sep 21, 2008 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht kennt ja der ein oder andere diese Library, für welche es wrapper für Blitz3D und BlitzMax gibt.

Im großen Ganzen wurden die Befehle von BB3D übernommen, und DX9 fähig gemacht.

Hinzugekommen sind Shader etc.

Ich habe mir die Quellcodes angeschaut, und mich würde eine Frage bezüglich der dortigen Backbufferverwendung interessieren, weiß aber nicht, ob ich einfach hier ein Stück code aus den samples dort hier posten kann, um es mir erklären zu lassen.

Link zur Webseite: www.rubux.net

ZaP

BeitragSo, Sep 21, 2008 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Erste Regel beim Fragen stellen: Niemals fragen, ob man fragen darf.
Starfare: Worklog, Website (download)
 

Heiko

BeitragMo, Sep 22, 2008 0:02
Antworten mit Zitat
Benutzer-Profile anzeigen
mmmm okay, warum wird hier im code zwischendurch gerendert und dann setbuffer backbuffer gesetzt, und dannach die shader ausgeführt???


Code: [AUSKLAPPEN]
;========================================================
;=                  Shadow Mapping Demo                 =
;========================================================
Include "b3d_dx9.bb"

;initialization
xAppTitle "Shadow Mapping"
xGraphics3D 800, 600, 32, False, 0

; the size of shadowmap texture
Const SMAP_SIZE = 1024

;setting texture filtering mode
xSetTextureFiltering TF_ANISOTROPIC

;enabling antialiasing
xAntiAlias True
 

;objects loading
test = xLoadMesh("..\media\sm_scene.b3d")
robo = xLoadAnimMesh("..\media\robot2.b3d")
xPositionEntity robo, 30, 0.8, 0
xScaleEntity robo, 5, 5, 5
walk = xExtractAnimSeq(robo, 0, 30)
xAnimate robo, 1, 0.3, walk
xUpdateNormals robo

;creating the camera
cam = xCreateCamera()
xPositionEntity cam, 100, 100, 100
xRotateEntity   cam, 35, 135, 0
pivot = xCreatePivot()
cam2 = xCreateCamera(pivot)
xPositionEntity cam2, 0, 130, -130
xRotateEntity   cam2, 45, 0, 0
xCameraViewport cam2, 0, 0, SMAP_SIZE, SMAP_SIZE
xCameraClsColor cam2, 255, 255, 255
xHideEntity     cam2

;creating the sun ;)
sun = xCreateSphere(16, cam2)
xScaleEntity sun, 5, 5, 5

;font loading
arial = xLoadFont("Arial", 12)

;creating the texture for a shadowmap
smap = xCreateTexture(SMAP_SIZE, SMAP_SIZE, 16 + 32 + 256) ;256 - èñïîëüçîâàíèå float-point òåêñòóðû (D3DFMT_R32F)

;shaders loading
sm_vs1 = xLoadVertexShader("..\shaders\sm_vs1.txt", "main", VS_2_0)
sm_vs2 = xLoadVertexShader("..\shaders\sm_vs2.txt", "main", VS_2_0)
sm_ps1 = xLoadPixelShader("..\shaders\sm_ps1.txt", "main", PS_2_0)
sm_ps2 = xLoadPixelShader("..\shaders\sm_ps2.txt", "main", PS_2_0)

;main loop
While Not xKeyDown(1) Or xWinMessage("WM_CLOSE")

   ;rendering the scene to the shadowmap
   xSetBuffer xTextureBuffer(smap)
   
   ;switching the cameras
   xHideEntity cam
   xShowEntity cam2
   
   ;setting the shaders for shadowmap rendering
   xSetEntityVertexShader test, sm_vs1
   xSetEntityPixelShader test, sm_ps1
   xSetEntityVertexShader robo, sm_vs1
   xSetEntityPixelShader robo, sm_ps1
   
   ;setting the constants
   xSetVertexShaderMatrixSemantic test, "matWorldViewProj", WORLDVIEWPROJ
   xSetVertexShaderMatrixSemantic robo, "matWorldViewProj", VIEWPROJ
   
   ;actually rendering
   xRenderWorld
   
   ;setting the backbuufer as a rendertarget
   xSetBuffer xBackBuffer()
   
   ;switching the cameras back
   xHideEntity cam2
   xShowEntity cam
   
   ;setting the shaders for a final rendering
   xSetEntityVertexShader test, sm_vs2
   xSetEntityPixelShader test, sm_ps2
   xSetEntityVertexShader robo, sm_vs2
   xSetEntityPixelShader robo, sm_ps2
   
   ;writing the view and projection matrices of the second camera to the additional matrix
   xSetAdditionalMatrix(cam2, 0, ADDVIEW)
   xSetAdditionalMatrix(cam2, 1, ADDPROJ)
   
   ;setting the constants
   xSetVertexShaderMatrixSemantic test, "matWorldView", WORLDVIEW
   xSetVertexShaderMatrixSemantic test, "matProj", PROJ
   xSetVertexShaderMatrixSemantic test, "matLightView", ADDITIONAL1
   xSetVertexShaderMatrixSemantic test, "matLightProj", ADDITIONAL2
   xSetVertexShaderMatrixSemantic test, "matViewInv", VIEWINVERSE
   xSetPixelShaderTexture test, "samShadow", smap
   xSetPixelShaderInt test, "SMAP_SIZE", SMAP_SIZE
   xSetPixelShaderVectorF test, "vLightPos", xEntityX(cam2, True), xEntityY(cam2, True), xEntityZ(cam2, True)
   xSetPixelShaderMatrixSemantic test, "matView", VIEW
   xSetPixelShaderEntityTexture test, "texBase"
   
   xSetVertexShaderMatrixSemantic robo, "matWorldView", VIEW
   xSetVertexShaderMatrixSemantic robo, "matProj", PROJ
   xSetVertexShaderMatrixSemantic robo, "matLightView", ADDITIONAL1
   xSetVertexShaderMatrixSemantic robo, "matLightProj", ADDITIONAL2
   xSetVertexShaderMatrixSemantic robo, "matViewInv", VIEWINVERSE
   xSetPixelShaderTexture robo, "samShadow", smap
   xSetPixelShaderInt robo, "SMAP_SIZE", SMAP_SIZE
   xSetPixelShaderVectorF robo, "vLightPos", xEntityX(cam2, True), xEntityY(cam2, True), xEntityZ(cam2, True)
   xSetPixelShaderMatrixSemantic robo, "matView", VIEW
   xSetPixelShaderEntityTexture robo, "texBase"
   
   ;camera moving
   If xKeyDown(KEY_W)    Then xMoveEntity cam,  0,  0,  1
   If xKeyDown(KEY_S)    Then xMoveEntity cam,  0,  0, -1
   If xKeyDown(KEY_A)    Then xMoveEntity cam, -1,  0,  0
   If xKeyDown(KEY_D)    Then xMoveEntity cam,  1,  0,  0
   If xKeyDown(KEY_PGUP) Then xMoveEntity cam,  0,  1,  0
   If xKeyDown(KEY_PGDN) Then xMoveEntity cam,  0, -1,  0
   ;camera rotating
   If xKeyDown(KEY_UP)    Then xTurnEntity cam, -1,  0,  0, True
   If xKeyDown(KEY_DOWN)  Then xTurnEntity cam,  1,  0,  0, True
   If xKeyDown(KEY_LEFT)  Then xTurnEntity cam,  0,  1,  0, True
   If xKeyDown(KEY_RIGHT) Then xTurnEntity cam,  0, -1,  0, True
   
   ;light source rotating
   xTurnEntity pivot, 0, -0.1, 0
   
   ;updating and rendering the world
   xUpdateWorld
   xRenderWorld
   
   ;fps and triangle counter
   xText 10, 10, "FPS: " + xGetFPS()
   xText 10, 30, "TrisRendered: " + xTrisRendered()
   xText 10, 60, "Up\Down\Letf\Right - rotate camera"
   xText 10, 80, "W\A\S\D - move camera"
   ;drawing the scene
   xFlip

Wend
 

klepto2

BeitragMo, Sep 22, 2008 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Relativ simpel:

Am anfang wird eine Textur erstellt, die die sogenannte Shadowmap (ode rauch Depthmap) enthält.
Im mainloop wird jetzt als erstes die Depthmap in die Textur gerendert (aus der Sicht der Lichtquelle). Danach wird die Scene normal in den Backbuffer gerendert, um dabei den Schatten zu erstellen, wird nun ein Shader hinzugeschaltet, der die Tiefeninformationen aus der Depthmap mit der aktuellen Scene vergleicht und je nachdem Teile im Bild schattiert oder normal zeichnet.

Wahrscheinlich keine ganzgenaue Beschreibung, aber der Weg sollte stimmen. Ich kenne mich mit den internas der Xors3D Engine nicht aus, daher nur ne grobe Analyse.
Matrix Screensaver
Console Modul für BlitzMax
KLPacker Modul für BlitzMax

HomePage : http://www.brsoftware.de.vu
 

Heiko

BeitragDi, Sep 23, 2008 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
na immerhin schon eine etwas aussagekräftige erklärung.
ist halt bisschen schwer hier etwas zu posten, eine seperate xors3d section wäre natürlich toll.
mir schon klar, dass es im ersten moment nicht im sinn des forums ist, aber wer sich mit xors3d ein wenig beschäftigt, dem wird klar, dass es in erster linie FÜR Blitz3D erschaffen wurde.

Auch wenn ich selbst jetzt Xors3D nicht in Verbindung mit BB3D nutze, so ist die Syntax doch fast identisch.

Jedenfalls wäre es einen seperaten Bereich hier wert.

coolo

BeitragDi, Sep 23, 2008 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Solange du das ganze mit Blitz XXX schreibst kannst du alles hier fragen, Xors3d ist doch nur eine Alternative 3d Engine, das ist genauso, wie wenn jemand eine Frage über die Sprite candy schreibt Wink
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat
 

Heiko

BeitragDi, Sep 23, 2008 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist mir schon klar, ich würde ja hier auch nur bb3d code posten, aber für alle die es nutzen würden wollen, und vielleicht auch ein paar dazu kommen, wäre etwas seperates vielleicht sinnvoll.
Ein bereich zu xors3d würde ja reichen

peacemaker

BeitragDi, Sep 23, 2008 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Du bist einer der ersten der xors3D-Fragen stellt. Gleich ein neues Subforum zu machen? Ich weiss ja nicht.
~Tehadon~
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
 

Heiko

BeitragDi, Sep 23, 2008 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
nein nicht gleich, ich meinte das im allg. wenn sich noch ein paar finden.

schauts euch doch einfach mal an www.rubux.net

ist noch beta, aber der developer ist fixer als silby....
 

Mau

BeitragMo, Mai 17, 2010 9:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Um dieses Thema mal wieder hochzuholen: ich beschäftige mich jetzt auch schon eine Weile mit der Xors3D-Erweiterung und bin eigentlich begeistert! Shocked Ich denke schon, das es sehr, sehr hilfreich wäre, wenn es hier einen Bereich, oder vielleicht erst mal nur einen Sammelthread zu Fragen über Xors3D und vor allem Shaders (HLSL) gäbe.

Gerade die Möglichkeit, endlich Shaders zu benutzen (und eigene zu schreiben!) finde ich als langjähriger B3D-Nutzer einfach nur bahnbrechend. Da ich mich als B3Dler nie sonderlich mit Shader auseinandergesetzt habe, waren diese anfangs für mich eigentlich nur "optischer Schmuck". Inzwischen ist mir aber klar geworden, das sich damit auf oft sehr einfache Weise und mit guter Performance Dinge realisieren lassen, von denen man als B3Dler bisher nur vage träumen konnte und die anders eigentlich gar nicht möglich sind.

Ich habe z.B. vorher wochenlang an einem Terrain-Editor gearbeitet, der nahtlose Überblendungen von Texturen erlaubt. Mit Xors3D und einem passenden Texture Splatting Shader war das im Nullkommanix möglich, ohne zusätzliche Vertices. Tiefenunschärfe-Effekte, Schatten, realistisches Wasser, alles endlich kein Problem mehr. Und die Engine scheint tatsächlich sehr kompatibel zu sein.

Ich bin mir ganz sicher, das sich die Erweiterung durchsetzt. Der Entwickler scheint sehr fix zu sein und nimmt auch gerne Anregungen entgegen, die dann oft auch sehr zügig umgesetzt werden.

Laut x-pressive soll es in Kürze auch nen Sprite Candy Port für Xors3D geben.

Ich denke schon, das man Xors3D einen Platz einräumen sollte, denn je grösser der Xors-Benutzerkreis wird, desto mehr ist allen geholfen.
Alles muss, nichts kann!

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group