SimpleDX11 Projekt

Anwendungen, Tools, Userlibs und anderes nützliches.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 Projekt

Beitrag von Nero »

So die neue Version ist online (rev 21).
Habe es nochmal komplett überarbeitet und auf Interfaces umgestellt (keine COM Objekte) damit läst es sich einfacher Arbeiten finde ich.
Ansonsten gibt es nicht viel neues außer eine neue Demo (TexturedTriangle).

Wen es weiter fortgeschritten ist füge ich noch ein Interface hinzu um die verwendung noch weiter zu vereinfachen
aber fürs erste muß es so gehen. :lol:

EDIT:
AH falls es jemanden interessiert ich nutze dieses DX11 Tutorial hier. http://www.rastertek.com/tutdx11.html
Zuletzt geändert von Nero am 25.11.2012 16:07, insgesamt 1-mal geändert.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 Projekt

Beitrag von Nero »

Auch heute ein kleines Update.

Es ist eine neue Demo dabei DiffuseLighting und ich habe die Verzeichnisstruktur etwas geändert
so ist es etwas übersichtlicher.

Hm falls jemand als Code commiter eingetragen werden möchte schickt mir einfach ne PM
mit der EMailadresse eures google Accounts.
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

Re: SimpleDX11 Projekt

Beitrag von mpz »

Hi,

schöne Arbeit. Ich hatte leider in letzte Zeit weniger Zeit sonst hätte ich mich eher gemeldet...

Ich habe noch ein paar Anmerkungen und Verbesserungsvorschläge. Sind aber noch nicht richtig ausgearbeitet. Wollte mich nur melden das von mir noch was kommt...

P.S: unter x64 funktionieren die Demos nich mehr. Vermutlich wieder ein Problem von .l statt .i. Ich werde mal sehen ob ich den Grund finden.

Gruß Michael
Working on - MP3D Engine -
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 Projekt

Beitrag von Nero »

mpz hat geschrieben:Hi,

schöne Arbeit. Ich hatte leider in letzte Zeit weniger Zeit sonst hätte ich mich eher gemeldet...

Ich habe noch ein paar Anmerkungen und Verbesserungsvorschläge. Sind aber noch nicht richtig ausgearbeitet. Wollte mich nur melden das von mir noch was kommt...

P.S: unter x64 funktionieren die Demos nich mehr. Vermutlich wieder ein Problem von .l statt .i. Ich werde mal sehen ob ich den Grund finden.

Gruß Michael
Danke <)

Bin immer offen für Vorschläge, ist wie gesagt mein erstes DX Projekt überhaupt daher jeder Vorschlag hilft :allright:

Hab grad noch nen kleines update hochgeladen und aus der DiffuseLighting eine Ambient & DiffuseLighting Demo gemacht (aber keine neue Zip datei nur Source)
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 Projekt

Beitrag von Nero »

mpz hat geschrieben:P.S: unter x64 funktionieren die Demos nich mehr. Vermutlich wieder ein Problem von .l statt .i. Ich werde mal sehen ob ich den Grund finden.
So habe gerade die neue version (rev 41) hochgeladen dort funktioniert es auch wieder im 64bit mode

Werde die tage anfangen die 2D funktionen einzufügen damit man schon mal was anähernd sinvolles mit machen kann :lol:
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: SimpleDX11 Projekt

Beitrag von DrShrek »

Nero hat geschrieben:
mpz hat geschrieben:Werde die tage anfangen die 2D funktionen einzufügen damit man schon mal was anähernd sinvolles mit machen kann :lol:
Prima. Dann kann ich erste Sachen mit Chipmunk ausprobieren.
Bitte auch Primitives wie Point, Line, Circle, Polygon unterstützen.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
mpz
Beiträge: 497
Registriert: 14.06.2005 15:53
Computerausstattung: Win 10 Pro, 16 GB Ram, Intel I5 CPU und TI1070 Grafikkarte, PB 5.73 / 6.00 beta4
Wohnort: Berlin, Tempelhof

Re: SimpleDX11 Projekt

Beitrag von mpz »

Hi Nero,

ich habe am Wochende erfolglos versucht das Problem mit x64 zu lösen. Super das Du das geschafft hast, teste ich gelich heute abend...

Ich habe noch eien Vorschlag wegen der D3DXMATRIX Structur. Ich habe das in meiner Engine wie folgt gelöst, so das man sehr einfach Matrix Manipulation (z.B. Koordinaten, Grösse etc. etc.) machen kann. z.B. die Koordinaten ändern oder oder. Im Internet findet man auch diese matrix Strukturen, so das diese leichter umzusetzen sind. Hier mein Beispiel:

Gruß Michael

Code: Alles auswählen

; Beispiel Macro
 Macro D3DXMatrixIdentity(pOut)
    pOut\_12 = 0.0
    pOut\_13 = 0.0
    pOut\_14 = 0.0
    pOut\_21 = 0.0
    pOut\_23 = 0.0
    pOut\_24 = 0.0
    pOut\_31 = 0.0
    pOut\_32 = 0.0
    pOut\_34 = 0.0
    pOut\_41 = 0.0
    pOut\_42 = 0.0
    pOut\_43 = 0.0
    pOut\_11 = 1.0
    pOut\_22 = 1.0
    pOut\_33 = 1.0 
    pOut\_44 = 1.0
 EndMacro
 
 CompilerIf Defined(D3DXMATRIX, #PB_Constant) = #False ; Kann man machen, muss aber nicht
   
   Structure D3DXMATRIX
      _11.f : _12.f : _13.f : _14.f
      _21.f : _22.f : _23.f : _24.f
      _31.f : _32.f : _33.f : _34.f
      _41.f : _42.f : _43.f : _44.f
    EndStructure

CompilerEndIf

ProcedureDLL MP_PositionMatrix (pOut.matrix, x.f, y.f, z.f) ; verschiebt eine Matrix an eine bestimmte x,y,z Position
  
       pOut\_41 ; x Position
       pOut\_42 ; y Position
       pOut\_43 ; z Position
       
 EndProcedure
Working on - MP3D Engine -
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 Projekt

Beitrag von Nero »

mpz hat geschrieben:Hi Nero,

ich habe am Wochende erfolglos versucht das Problem mit x64 zu lösen. Super das Du das geschafft hast, teste ich gelich heute abend...

Ich habe noch eien Vorschlag wegen der D3DXMATRIX Structur. Ich habe das in meiner Engine wie folgt gelöst, so das man sehr einfach Matrix Manipulation (z.B. Koordinaten, Grösse etc. etc.) machen kann. z.B. die Koordinaten ändern oder oder. Im Internet findet man auch diese matrix Strukturen, so das diese leichter umzusetzen sind. Hier mein Beispiel:

Gruß Michael

[/code]
Du glaubst gar nicht wie lang ich gesucht habe bis ich es gefunden hatte :lol:
Das offensichtliche Problem war ja das fehlende padding in den Strukturen danach hat er ja den Cube angezeigt nur komplett
falsch als ob nen offset im Vertexbuffer hätte (wie falsch ich doch lag :oops: )
Erst als ich GPU PerfStudio an geschmissen habe und den Shaderinput debuggt habe ist es mir wie ne wütende Katze mit ausgefahrenen krallen ins Gesicht gesprungen :o
Die Indices waren falsch ..... :coderselixir:
Der Fehler war so offensichtlich das man ihn übersehen musste

Code: Alles auswählen

Dim Indices(35)
das muss natürlich ein Long Array sein also .l angehängt und es funktionierte >_<

Wegen der D3DMATRIX, stimmt _11, _21 .... ist wohl einfacher als \c[0]\r[0] etc. werde es die tage mal ändern
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 Projekt

Beitrag von Nero »

Hiho,

Ja nach langer pause habe ich mich diesen Wochenende mal entschlossen mal wieder weiter am SimpleDX11 zu arbeiten.
Es ist nicht viel neues dazu gekommen nur ein paar Funktionen wie ExamineScreenModes usw. ansonsten nicht viel.
Die wichtigste Änderung ist das ich es in ein Modul gepackt habe und fast alle internen prozedurnamen geändert habe.

Habe es ins SVN hochgeladen eine passende Zip gibt es erst wieder wen mehr Funktionen vorhanden sind, bis dahin nur noch SVN Updates. (aktuel rev: 45)

Mal so nebenbei Module sind echt ne feine Sache :lol: wen man die mit Interfaces kombiniert dann kann man auch endlich echte Public und Privates deklarieren.:allright:
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: SimpleDX11 Projekt

Beitrag von Nero »

Hiho,

Hab mich die Tage mal hingesetzt und hab SDX nochmal etwas abgeändert.
Es hat mir nie wirklich gefallen das ich DX11 selbst implementieren muss um einen eigenen Screen erstellen und somit auch keine Möglichkeit habe das Spritesystem von PB zu nutzen.
Na ja das hat sich mit dieser Version geändert :lol:
Ab sofort kann man ganz normal per OpenWindowedScreen() den Screen öffnen und wie gewohnt nutzen plus ein bisschen 3D.
Allerdings kann man zwar Sprites und 3D in einem Screen verwenden aber nicht untereinander. Also mann kann keine Texturen aus Sprites erstellen usw.

Hier mal ein Demo code. (Nicht vergessen das DirectX11 Subsystem zu aktivieren sonst gibt es ein paar Polink Errors)

Code: Alles auswählen

;/////////////////////////////////////////////////////////////;
;                                                             ;
;           SimpleDX11 Demo 3_1 (Lighting and Sprites)        ;
;                                                             ;
;                   (c) 2013 SimpleDX Team                    ;
;                                                             ;
;                         License: MIT                        ;
;                                                             ;    
;/////////////////////////////////////////////////////////////;

; Initialize the PB Spritesystem and use the DirectX11 subsystem
InitSprite()

;Include the SimpleDX11 main file (change the pathes in there before using it)
XIncludeFile "../../SimpleDX11.pbi"


; Initialize Keyboard
If Not InitKeyboard()
  MessageRequester("Error", "Could not initialize the keyboard!")
  End  
EndIf


; Open a Window
#Window = 0
If OpenWindow(#Window, 50, 200, 800, 600,"SimpleDX11 initialization",#PB_Window_SystemMenu | #PB_Window_SizeGadget)
  If OpenWindowedScreen(WindowID(#Window), 0, 0, WindowWidth(#Window), WindowHeight(#Window))  
      CreateSprite(0, 50, 50)
      If StartDrawing(SpriteOutput(0))
        Box(0, 0, 50, 50, RGB(255, 0, 155))
        Box(5, 5, 40, 40, RGB(155, 0, 255))
        StopDrawing()
      EndIf    
  Else  
    MessageRequester("Error", "Could not open the Screen!")
    End    
  EndIf  
Else  
  MessageRequester("Error", "Could not open the Window!")
  End
EndIf

; Must be used after OpenScreen / OpenWindowedScreen
UseModule SimpleDX11

Define *Screen3D.Screen3D = New_Screen3D()


; Add a camera
Define *Camera.Camera = New_Camera(*Screen3D) 
*Camera\SetPosition(0.0,0.0,-9.0)

; Add a light
*Light.Light = New_Light() 
*Light\SetDirection(1.0, 0.0, 0.0)
*Light\SetDiffuseColor($FF48D33F)
*Light\SetAmbientColor($FF48473F)
*Light\SetSpecularColor($FF48473F)

; Add a model
*Model.Model = New_Model(*Screen3D, #SDX_Vertex_Normals | #SDX_Vertex_UVMap)
*Texture = *Model\LoadTexture("..\Models\textures\tex_1.dds")
*Model\AddCube(1.0) 
*Model\SetModel()


*vShader.Shader = New_Shader(*Screen3D, #VertexShader)
If *vShader\CompileShaderFile("Shader\Vertex.vs", "VShader", "vs_5_0") 
   *vShader\Release() : *Model\Release() : *Camera\Release() : *Screen3D\Release() : End
  End 
EndIf

*pShader.Shader = New_Shader(*Screen3D, #PixelShader)
*pShader\AddTexture(*Texture)
*pShader\AddLighting()
If *pShader\CompileShaderFile("Shader\Pixel.ps", "PShader", "ps_5_0")    
  *pShader\Release() : *Model\Release() : *Camera\Release() : *Screen3D\Release() : End
  End 
EndIf

Define Rotation.f, direction.i = 2, x.i, y.i

Define ShaderDataDesc.Shader_DataDescription
ShaderDataDesc\Camera = *Camera
ShaderDataDesc\Light  = *Light
CopyMemory(*Screen3D\GetWorldMatrix(), ShaderDataDesc\WorldMatrix, SizeOf(D3DMATRIX))
CopyMemory(*Screen3D\GetProjectionMatrix(), ShaderDataDesc\ProjectionMatrix, SizeOf(D3DMATRIX))


Repeat  
  ExamineKeyboard()
  Event.l = WindowEvent()  
     
  ClearScreen($799FFF)  

  DisplaySprite(0, -y + 500 , -y +400)
  y + direction
  If y > 240 : direction = -2 : EndIf
  If y < 0   : direction =  2 : EndIf
  
  
  *Screen3D\Start3D()
    *Camera\Render()

    Rotation + (#PI * 0.005)
    If Rotation >= 360.0
      Rotation = 0.005
    EndIf   
    D3DXMatrixRotationY(ShaderDataDesc\WorldMatrix, Rotation) 
  
    ; Set the shader data
    *vShader\SetShaderData(ShaderDataDesc)
    *pShader\SetShaderData(ShaderDataDesc)
    
    ; Render all the shader and vertexbuffer ....
   	*vShader\Render()
   	*pShader\Render()   
   	*Model\Render()  
   	
  *Screen3D\Stop3D()
  
  DisplaySprite(0, x + 300, x + 150)
  x + direction
  If x > 240 : direction = -2 : EndIf
  If x < 0   : direction =  2 : EndIf  
  
  FlipBuffers()
  
  Delay(1)
Until Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)

; Release SimpleDX11 from Memory
; Do not forget this!
*Light\Release()
*Camera\Release()
*vShader\Release()
*pShader\Release()
*Screen3D\Release()
UnuseModule SimpleDX11

CloseScreen()
Zuletzt geändert von Nero am 30.08.2013 14:04, insgesamt 1-mal geändert.
Antworten