Hallo,
ich habe einen (ein bisschen) älteren Rechner. Noch läuft auf ihm XP. Es
soll aber demnächst ein neueres Windows aufgespielt werden. Auf diesem
Rechner habe ich bereits für DirectX_9 programmiert. Nun möchte ich ein
ähnliches Programm erneut schreiben (den alten Code kann ich leider
nicht mehr verwenden).
Jetzt stehe ich allerdings vor der Frage ob ich gleich das DirectX11_SDK
verwenden soll. Schließlich möchte ich vermeiden, irgendwann das ganze
neu schreiben zu müssen, weil sich eventuell die API geändert hat. Ein
neuer Rechner wird schließlich ganz bestimmt mal kommen.
Glaubt ihr es macht Sinn DirectX_11 zu verwenden? Oder bringt das eher
nichts, da ich mit meinem Rechner eh nicht die Funktionen vom neuen
11’er nutzen kann?
Du solltest besser gleich OpenGL benutzen.
Sonst hast du in ein paar Jahren wieder:
>Schließlich möchte ich vermeiden, irgendwann das ganze>neu schreiben zu müssen
OpenGL geht für mich leider nicht. Genau genommen benötige ich (zur
Zeit) nur die Ansteuerung für Joystick und vor allem die Ansteuerung
dessen force-feedback.
Wenn du nur Joystick Ansteuerung machst arbeitest du wohl eher mit
DirectInput statt mit DX9 nehme ich an? Der Nachfolger von DirectInput
heißt XInput aber soweit ich das gesehen habe kann man damit nur Xbox360
Controller ansteuern und nicht irgendwelche Joysticks. DirectInput ist
aber auch noch in Windows 8.1 vorhanden also ein Umstieg von Windows XP
zu etwas neuerem ist kein Grund von DirectInput wegzugehen.
T.roll schrieb:> Du solltest besser gleich OpenGL benutzen.> Sonst hast du in ein paar Jahren wieder:
Steht OpenGL nicht gerade vor einem Komplettumbau (u.A. wegen Mantle)?
Daher würde ich im Moment nicht mit OpenGL einsteigen...
DirectX bietet darüber hinaus ein rundes Gesamtpaket, von der Eingabe
über Audio und Video bis hin zu 3D. Ich würde daher zu DX 11 tendieren.
Boris P. schrieb:> T.roll schrieb:>> Du solltest besser gleich OpenGL benutzen.>> Sonst hast du in ein paar Jahren wieder:>> Steht OpenGL nicht gerade vor einem Komplettumbau (u.A. wegen Mantle)?> Daher würde ich im Moment nicht mit OpenGL einsteigen...
Generell steht da wohl ein Generationenwechsel an. OpenGL wird komplett
umgebaut, und neben Mantle gibt's noch andere neue APIs, die angeblich
erheblich schneller als die Klassiker OpenGL und DirectX sein sollen. Da
wird sich in naher Zukunft wohl so einiges tun. Davon bleibt man bei
DirectX aber vermutlich genauso wenig verschont.
> DirectX bietet darüber hinaus ein rundes Gesamtpaket, von der Eingabe> über Audio und Video bis hin zu 3D.
Dafür allerdings ausschließlich unter Windows. Und OpenGL zusammen mit
SDL kann auch schon einiges, evtl. noch mit OpenAL für den Sound.
Rolf Magnus schrieb:> Dafür allerdings ausschließlich unter Windows. Und OpenGL zusammen mit> SDL kann auch schon einiges, evtl. noch mit OpenAL für den Sound.
Klar, es gibt für alles Alternativen. Aber bei DX folgt zumindest jede
API dem gleichen Programmierkonzept und den gleichen Namenskonventionen.
Das macht das Leben leichter.
Da der TO ja bisher auch auf DX gesetzt hat, scheint Windows-Only ja
kein Problem für ihn zu sein (sonst wäre DX natürlich sofort aus dem
Rennen).
Boris P. schrieb:> ...scheint Windows-Only ja kein Problem für ihn zu sein...
Na ja... ist ein wenig verzwickt :)
Genau genommen habe ich ein Programm in Qt geschrieben. Qt unterstützt
jedoch nicht die Ansteuerung von Joysticks mit Force-Feedback. Ich habe
zwar noch keine Anwendung für ein anderes OS als Windows, hätte es mir
aber gerne offen gehalten.
Nun war mein Gedanke den Joystick per DirecX anzusteuern und die zwei
Programme über local network (nennt sich doch so?), also rein auf dem
Rechner selbst, miteinander kommunizieren zu lassen. Sollte irgendwann
ein anderes OS in Frage kommen, bräuchte ich also nur einen "kleineren"
Teil neu schreiben.
brechbunkt schrieb:> un war mein Gedanke den Joystick per DirecX anzusteuern und die zwei> Programme über local network (nennt sich doch so?), also rein auf dem> Rechner selbst, miteinander kommunizieren zu lassen.
Yikes! Das klingt nicht so besonders geschickt...
Warum willst du das in zwei programme aufteilen?
Du kannst ja auch in deiner Qt Anwendung mit DirectX (XInput) arbeiten.
Aber es gibt sicherlich auch eine portable Lösung um einen Joystick
einzubinden (SDL?)...
Kurzes googlen hat dieses hier gefunden:
http://en.wikipedia.org/wiki/Object_Oriented_Input_System
Kleine C++ library, die unter Linux und Windows diverse Eingabegeräte
unterstützt, einschliesslich Force Feeback. Wird auch von Ogre3D
genutzt.
Von SDL hatte ich zuvor noch nie etwas gehört. Macht aber einen ganz
guten Eindruck. Um die Kommunikation mit dem Qt-Programm würde ich hier
natürlich ebenfalls nicht rumm kommen.
Eigentlich hatte ich mich zuvor mit Google auf die Suche gemacht und war
nun der Meinung, dass XInput nicht in Qt eingebunden wurde. Dank deinen
Hinweis habe ich nun aber noch mal geschaut und ein "Qt XInput Extension
0.0.1" gefunden. Die Versionsnummer macht mir allerdings ein wenig
Bauchschmerzen. Erfahrungsgemäß sind die Kinderkrankheiten anfangs immer
so hoch, dass man immer nur auf Probleme stößt und hier und da mit einer
"Frickel-Lösung" aushelfen muss. Nach bereits bekannten Lösungswegen
googlen hilft dann auch immer nicht viel ;)
So wie ich das sehe, können durch die Einbindung von XInput im Qt zwar
die Achsen und die Buttons eingelesen werden, aber die Ansteuerung für
das force-feedback wurde nicht implementiert.
Warum brauchst du XInput eingebunden in Qt? Verwende doch einfach direkt
XInput in deinen Funktionen, die das brauchen. Oder was soll überhaupt
durch den Joystick gesteuern werden? Wenn man damit die Menüelemente
wählen soll müsste man tatsächlich gucken, wie man die
Joystickbewegungen an Qt weiter gibt aber selbst das müsste machbar
sein. Kommunikation zwischen XInput/DirectInput/SDL und dem Rest deines
Programms findet einfach über Funktionsaufrufe statt. Da noch einen
Netzwerklayer zwischen zu schieben macht alles nur viel komplizierter
und bringt überhaupt nichts.
sebi707 schrieb:> ...Oder was soll überhaupt durch den Joystick gesteuern werden?
Ein kleiner Roboter auf vier Rädern. Wird anhand der Ultraschallsensoren
ein Hindernis in der Nähe erkannt, möchte ich diese durch Rückmeldung
vom force-feedback spürbar machen.
sebi707 schrieb:> Warum brauchst du XInput eingebunden in Qt? Verwende doch einfach direkt> XInput in deinen Funktionen, die das brauchen. ... Kommunikation zwischen
XInput/DirectInput/SDL und dem Rest deines
> Programms findet einfach über Funktionsaufrufe statt.
Ich kann das ganze dann also ganz normal mit Funktionen wie alle anderen
aufrufen? Einfach lib einbinden und los? Da muss ich mich mal schlau
machen wie der Code überhaupt aussehen muss. Werde mal nach ein paar
Beispielen googlen...
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.