Forcefeedbackunterstützung zum testen (DX9-Windows)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
mpz
Beiträge: 505
Registriert: 14.06.2005 15:53
Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
Wohnort: Berlin, Tempelhof

Forcefeedbackunterstützung zum testen (DX9-Windows)

Beitrag von mpz »

Hallo Leute,

ich beschäftige mich sein einiger Zeit mit ner 3D Engine auf Basis von DX9 unter Windows...

Ich habe jetzt meine Forcefeedback Unterstützung fertig und benötige ein paar Rückmeldungen ob das auch bei euren Forcefeedback Joystick funktioniert. Man muss erst die Effekte z.B. auf die Tasten laden und diese dann per Joysticktastendruck zu aktivieren, oder laden und über die separaten Startbefehle starten. Die Stärke habe ich auf "Stärkste Effekte" gestellt, also Joystick festhalten sonst hüpft er...

Hinweis: Gamepads haben meist nur "eine Achse Forcefeedback". Daher funktioniert hier vermutlich nur der X oder Y Effekt

Hier mein Beispiel als 60KB Purebasic.exe Datei (habe ich auf Rapidshare gepackt, da ich keine Website etc. besitze.)
http://rapidshare.com/files/139429280/M ... 2.exe.html

Gruß Michael

EDIT: Joystickinfo dazugepackt

Code: Alles auswählen


;- Init

If MP_Graphics3D (640,480,0,3);MP_Graphics3D (640,480,0,3)

  If CreateMenu(0, WindowID(0)) ; Menü erstellen
    MenuTitle("Datei")
      MenuItem( 1, "&Laden eines DirectX 3D Objektes...")
      MenuItem( 2, "&Laden einer Grafik als Textur...")
      MenuBar()
      MenuItem( 3, "&Ende")
    MenuTitle("JorcefeedbackEffekte")
      MenuItem(4, "X-Achsen Effekt auf Taste 1 legen")
      MenuItem(5, "Y-Achsen Effekt auf Taste 2 legen")
      MenuBar()
      MenuItem(6, "Effekt der Taste 1 löschen")
      MenuItem(7, "Effekt der Taste 2 löschen")
      MenuBar()
      MenuItem(8, "4 Dauer Effekte erzeugen")
      MenuItem(9, "1.X-Achsen Effekt 2 Sekunde")
      MenuItem(10, "2.X-Achsen Effekt 5 Sekunde")
      MenuItem(11, "3.Y-Achsen Effekt 2 Sekunde")
      MenuItem(12, "4.Y-Achsen Effekt 5 Sekunde")
    MenuTitle("Hilfe")
      MenuItem(13, "Über den Joystick")
  EndIf

Else

  End

EndIf


camera=MP_CreateCamera() ; Kamera erstellen

light=MP_CreateLight(1,1,1,1) ; Es werde Licht


mesh1 = MP_Create3DText ("Times", "MP 3D Engine", 40) ; Erstes Mesh erstellen aus Schriftart Times

If CreateImage(0, 255, 255) ; Etwas Farbe selber erzeugen
   MP_ImageFarbverlauf(0,0,RGB($FF,$FF,$00),RGB($FF,$FF,$FF),RGB($FF,$00,$00),RGB($00,$00,$FF)) ; 
   MP_EntityTexture (mesh1, MP_ImageToTexture(0))
   FreeImage(0)
EndIf


x.f=0
y.f=0
z.f=6


While Not MP_KeyDown(#PB_Key_Escape) ; Esc abfrage

 Select MP_WindowEvent()  ; WindowsEvent abfrage
      Case #PB_Event_Menu
        Select EventMenu()  ; Welches Menü?

          Case 1 ; 3D Objekt als Directx File laden
              Pattern$ = "Direct x Files(*.x)|*.x"
              directory$ = "C:\Programme\PureBasic\Dreamotion3D\SamplesDM3D\media\"
              File.s = OpenFileRequester("Bitte Datei zum Laden auswählen", directory$, Pattern$,  0)
              If File
                  If mesh1:mp_freeentity(mesh1):EndIf ; Altes Mesh löschen
                  mesh1=MP_LoadMesh(File.s)            ; Neues Mesh laden
              EndIf

          Case 2 ; Textur für Mesh laden
              Pattern$ = "Grafikdateien |*.jpg;*.bmp;*.tga;*.png;*.dds;*.ppm;*.dib;*.hdr;*.pfm"
              File.s = OpenFileRequester("Bitte Grafikdatei zum Laden auswählen", "", Pattern$, 0)
              If File.s
                 Textur = MP_LoadTexture(File.s)
                 MP_EntityTexture (mesh1, Textur) 
              EndIf
          Case 3 ; Ende
             End
          Case 4
             Effekt1 = MP_InitForcefeedbackEffect(1,1,-1,10,1) ; Knopf 1, Axe Y  
             ;DI_InitForcefeedback(Effektart.l,Button.l,Dauer,Stärke,Axe)  
          Case 5 
             Effekt2 = MP_InitForcefeedbackEffect(1,2,-1,10,0)  ; Knopf 2, Axe X  
          Case 6
              MP_ForcefeedbackComand(Effekt1,3) ; Effekt löschen :Status =  1 Start, 2 Stop, 3 Löschen 
          Case 7
              MP_ForcefeedbackComand(Effekt2,3)  
          Case 8 
             Effekt3 = MP_InitForcefeedbackEffect(1,0,2,10,0) ; Axe X  Effekt erzeugen          
             Effekt4 = MP_InitForcefeedbackEffect(2,0,5,10,0) ; Axe X  
             Effekt5 = MP_InitForcefeedbackEffect(3,0,2,10,1) ; Axe Y  
             Effekt6 = MP_InitForcefeedbackEffect(1,0,5,10,1) ; Axe Y  
          Case 9 
              MP_ForcefeedbackComand(Effekt3,1) ; Effekt starten
          Case 10 
              MP_ForcefeedbackComand(Effekt4,1)
          Case 11 
              MP_ForcefeedbackComand(Effekt5,1)
          Case 12 
              MP_ForcefeedbackComand(Effekt6,1)
          Case 13 ; Über
             info.s = "Forcefeedback Demo mit MP_Engine"+Chr(10)+Chr(10)
             info.s = info.s + "Joystick gefunden: "+Str(MP_JoystickInfo(1))+Chr(10)
             info.s = info.s + "Forcefeedback gefunden: "+Str(MP_JoystickInfo(5))+Chr(10)
             info.s = info.s + "Anzahl der Buttons: "+Str(MP_JoystickInfo(3))+Chr(10)
             info.s = info.s + "Anzahl der Achsen: "+Str(MP_JoystickInfo(2))+Chr(10)
             info.s = info.s + "Anzahl der POVs: "+Str(MP_JoystickInfo(4))+Chr(10)
             MessageRequester("Info", info.s, 0)
         EndSelect
      Case #PB_Event_CloseWindow
         End
EndSelect

 ; nen bishen apielen und das Objekt drehen
 If MP_KeyDown(#PB_Key_Left)=1 : x=x-1 : EndIf ;links Debug #PB_Key_Left
 If MP_KeyDown(#PB_Key_Right)=1 : x=x+1 : EndIf ;rechts #PB_Key_Right
 If MP_KeyDown(#PB_Key_Down)=1 : y=y-1 : EndIf ;Runter #PB_Key_Down
 If MP_KeyDown(#PB_Key_Up)=1 : y=y+1 : EndIf ;rauf #PB_Key_Up
 If MP_KeyDown(#PB_Key_Z)=1  : z=z-0.1 : EndIf ;y Vertauscht bei y-z bei deutscher tastatur
 If MP_KeyDown(#PB_Key_A)=1  : z=z+0.1 : EndIf ;a #PB_Key_A

 If mesh1 ; Objekt drehen
     MP_PositionEntity (Mesh1,0,0,z)
     MP_RotateEntity (Mesh1,x,y,0)
 EndIf

    MP_RenderWorld ()
    MP_Flip ()
Wend

Working on :lol: - LibSGD - MP3D Engine - 8)
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Beitrag von KatSeiko »

Ich bekomme ne Fehlermeldung...
MP_dx9_demo2.exe

Die Anwendung konnte nicht gestartet werden, weil d3sx9_38.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben.
Mag daran liegen, dass ich Vista x64 habe... Aber das kann eigentlich noch mit DX9 umgehen...
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Dann lad dir doch diese Datei herunter und packe sie in ein System Ordner.
Benutzeravatar
mpz
Beiträge: 505
Registriert: 14.06.2005 15:53
Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
Wohnort: Berlin, Tempelhof

Beitrag von mpz »

Hallo KatSeiko,

diese Meldung mit "d3dx9_3x.dll" (x = 0 oder höher) erscheint meinem Wissen nach wenn man DX9 nicht installiert hat. Daher sollte es funktionieren wenn man DX9 unter Vista zusätzlich installiert. Es reicht aber auch aus die folgende Datei runterzuladen und in den c:\Windows\System Ordner oder Startordner der MP_dx9_demo2.exe zu kopieren.

Ich bin auch dabei eine DX10 Engine zu erstellen, aber das dauert...

http://www.dll-files.com/dllindex/dll-f ... l?d3dx9_38

Gruß Michael
Working on :lol: - LibSGD - MP3D Engine - 8)
Antworten