PB Physic Engine - Entwicklung und Doku
- Makke
- Beiträge: 156
- Registriert: 24.08.2011 18:00
- Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
- Wohnort: Ruhrpott
- Kontaktdaten:
PB Physic Engine - Entwicklung und Doku
Hallo zusammen,
um ein wenig Erfahrungen mit der Physik Engine zu sammeln habe ich eine Bowlingbahn als Testobjekt genommen. Die Maße der Pins, Bahn, Kugel usw. bekommt man relativ leicht über das Internet, aber wie geht es dann weiter ?
Tatsächlich scheitere ich schon beim Physischen Körper, laut Beschreibung soll man die Masse nicht zu hoch setzen, 1 wäre der bevorzugte Wert. Ist hier mit Masse etwas anderes als das Gewicht in Kilogramm gemeint ? Auch Restitution und Reibung sind mir so grundsätzlich klar, aber gibt es irgendwo Beispiele, Dokumentation damit man sich dort einlesen kann ? Oder wie heißt die Physik Engine die genutzt wird ?
Ein paar Tips dazu wären echt toll.
Danke schonmal.
um ein wenig Erfahrungen mit der Physik Engine zu sammeln habe ich eine Bowlingbahn als Testobjekt genommen. Die Maße der Pins, Bahn, Kugel usw. bekommt man relativ leicht über das Internet, aber wie geht es dann weiter ?
Tatsächlich scheitere ich schon beim Physischen Körper, laut Beschreibung soll man die Masse nicht zu hoch setzen, 1 wäre der bevorzugte Wert. Ist hier mit Masse etwas anderes als das Gewicht in Kilogramm gemeint ? Auch Restitution und Reibung sind mir so grundsätzlich klar, aber gibt es irgendwo Beispiele, Dokumentation damit man sich dort einlesen kann ? Oder wie heißt die Physik Engine die genutzt wird ?
Ein paar Tips dazu wären echt toll.
Danke schonmal.
---
Windows 11 (64 bit)
Windows 11 (64 bit)
- Chimorin
- Beiträge: 451
- Registriert: 30.01.2013 16:11
- Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit
Re: PB Physic Engine - Entwicklung und Doku
Gewicht ist glaube ich nur sozusagen das Verhältnis, in welchem die Gewichte zueinander stehen. In anderen Worten:
Da es Pfund, Kilogramm und was weiß ich noch gibt, kannst du deine eigene Einheit erfinden oder einfach Kilogramm nehmen.
Wenn du die 1.0 beibehalten willst, nimmst du die 1.0 einfach als 1t [Tonne].
Nimm einfach Kilogrammwerte
Bei Reibung ist der Widerstandskoeffizient gemeint. Recht einfach gesagt: 0 = kein Reibungsverlust (Kugel wird nicht langsamer) - 1 = völliger Reibungsverlust (Ich glaube Kugel dürfte sich gar nicht bewegen)
Die Restitution ist die Energierückkopplung (Oder wie das heißt). Da bin ich mir nicht so sicher, aber es müsste so sein: 0.0 - 1.0 Prozentsatz, wie viel Energie als Abprallenergie erhalten bleibt (Irgendwie sowas)
Da musst du nach meinem Stichpunkt suchen...
Reibung: Ich denke mal, der wird sich so bei 0.3 für die Bahn und Kugel befinden (Kegel ein bisschen höher, bzw. als Vollobjekt sehr hoch, da sie ja umfallen sollen, sich aber nicht bewegen.)
Restitution: Würde ich auf 0 machen, da ich aber nicht genau weiß, wie es da aussieht, kannst es auch mal auf 0.1 versuchen.
Die Physikengine ist die OGRE Bullet Engine.
P.S.: Das ist doch eher eine 3D-Programmier-Frage, oder?
Da es Pfund, Kilogramm und was weiß ich noch gibt, kannst du deine eigene Einheit erfinden oder einfach Kilogramm nehmen.
Wenn du die 1.0 beibehalten willst, nimmst du die 1.0 einfach als 1t [Tonne].
Nimm einfach Kilogrammwerte
Bei Reibung ist der Widerstandskoeffizient gemeint. Recht einfach gesagt: 0 = kein Reibungsverlust (Kugel wird nicht langsamer) - 1 = völliger Reibungsverlust (Ich glaube Kugel dürfte sich gar nicht bewegen)
Die Restitution ist die Energierückkopplung (Oder wie das heißt). Da bin ich mir nicht so sicher, aber es müsste so sein: 0.0 - 1.0 Prozentsatz, wie viel Energie als Abprallenergie erhalten bleibt (Irgendwie sowas)
Da musst du nach meinem Stichpunkt suchen...
Reibung: Ich denke mal, der wird sich so bei 0.3 für die Bahn und Kugel befinden (Kegel ein bisschen höher, bzw. als Vollobjekt sehr hoch, da sie ja umfallen sollen, sich aber nicht bewegen.)
Restitution: Würde ich auf 0 machen, da ich aber nicht genau weiß, wie es da aussieht, kannst es auch mal auf 0.1 versuchen.
Die Physikengine ist die OGRE Bullet Engine.
P.S.: Das ist doch eher eine 3D-Programmier-Frage, oder?
- NicTheQuick
- Ein Admin
- Beiträge: 8838
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: PB Physic Engine - Entwicklung und Doku
Das wäre aber komische Physik.
Gibt es da nicht einfach Sachen wie Masse und Impulserhaltung berechnet sich dann automatisch? Und Reibung sollte doch zumindest aus Haftreibung und Rollreibung zusammengesetzt sein, oder?
Gibt es da nicht einfach Sachen wie Masse und Impulserhaltung berechnet sich dann automatisch? Und Reibung sollte doch zumindest aus Haftreibung und Rollreibung zusammengesetzt sein, oder?
Re: PB Physic Engine - Entwicklung und Doku
Bananenfreak hat hier und da schon recht.
Allerdings finde ich die Parameter der OGRE-Engine auch recht wenig.
Restitution ist wie Bananenfreak schon sagte, eine Art Elastizität.
Ist der Wert 1.0 verhalten sich die Objekte wie "Gummibälle", verlieren also keine Energie.
Ist der Wert 0.0 verhalten sie sich Knete, bei einem Zusammenstoß, haben beide die gleiche Geschwindigkeit und es geht Energie "verloren", wobei der Gesamtimpult trotzdem erhalten bleibt.
Bei der Parameter Friction also Reibung ist (wie ich finde) leider sehr allgemein gehalten.
Er beinhalten sowohl die Haftreibung, Gleitreibung und Rollreibung, also eine Art Oberflächenbeschaffenheit.
Ist der Wert 0.0, gibt es beim gleiten keine Abbremsung und bei einem Zusammenstoß keine Umwandlung von Translation in Rotation.
Ist der Wert 1.0, so ist die Abbremsung auf einem Material "enorm" und bei einem Zusamenstoß wird der Tangentialgeschwindigkeit zur hälfte in Rotationsgeschwindigkeit umgewandelt.
Hier und da verhält sich die Physikengine aber sehr merkwürdig.
z.B. musse ich schon feststellen, dass Körper nach einer Kollision einfach in ihrer Rotation "erstarren", warum auch immer.
Auch fliegen Objekte einfach durch andere hindurch. zB wenn sie sich zwischen zwei Frames nicht berühren, weil sie zu schnell sind. Allerdings hätte ich von einer "echten Engine" eigentlich gedacht, dass sie mit Strahlen arbeitet, und Prüft, ob zwei Körper sich "in nächster Zeit" berühren werden.
Allerdings finde ich die Parameter der OGRE-Engine auch recht wenig.
Restitution ist wie Bananenfreak schon sagte, eine Art Elastizität.
Ist der Wert 1.0 verhalten sich die Objekte wie "Gummibälle", verlieren also keine Energie.
Ist der Wert 0.0 verhalten sie sich Knete, bei einem Zusammenstoß, haben beide die gleiche Geschwindigkeit und es geht Energie "verloren", wobei der Gesamtimpult trotzdem erhalten bleibt.
Bei der Parameter Friction also Reibung ist (wie ich finde) leider sehr allgemein gehalten.
Er beinhalten sowohl die Haftreibung, Gleitreibung und Rollreibung, also eine Art Oberflächenbeschaffenheit.
Ist der Wert 0.0, gibt es beim gleiten keine Abbremsung und bei einem Zusammenstoß keine Umwandlung von Translation in Rotation.
Ist der Wert 1.0, so ist die Abbremsung auf einem Material "enorm" und bei einem Zusamenstoß wird der Tangentialgeschwindigkeit zur hälfte in Rotationsgeschwindigkeit umgewandelt.
Hier und da verhält sich die Physikengine aber sehr merkwürdig.
z.B. musse ich schon feststellen, dass Körper nach einer Kollision einfach in ihrer Rotation "erstarren", warum auch immer.
Auch fliegen Objekte einfach durch andere hindurch. zB wenn sie sich zwischen zwei Frames nicht berühren, weil sie zu schnell sind. Allerdings hätte ich von einer "echten Engine" eigentlich gedacht, dass sie mit Strahlen arbeitet, und Prüft, ob zwei Körper sich "in nächster Zeit" berühren werden.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: PB Physic Engine - Entwicklung und Doku
Bullet: http://bulletphysics.org
Eingebunden sollte auch die aktuelle Version 2.81 sein.
Eingebunden sollte auch die aktuelle Version 2.81 sein.
- Makke
- Beiträge: 156
- Registriert: 24.08.2011 18:00
- Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
- Wohnort: Ruhrpott
- Kontaktdaten:
Re: PB Physic Engine - Entwicklung und Doku
Danke für die Infos. Habe mal angefangen die Webseite zu durchforsten. So richtig schlau werde ich daraus trotzdem noch nicht.
---
Windows 11 (64 bit)
Windows 11 (64 bit)
Re: PB Physic Engine - Entwicklung und Doku
Hier der Link zum Bullet 2.80 User Manual (PDF).
Ein 2.81 Manual habe ich nicht gefunden und ich hoffe mal, dass die Nummerierung im "PureBasic-Stil" ist. Hanbuch-Links im Bullet-Wiki sind irgendwie alle tot...
Bei mir macht das PDF übrigens beim nutzen der Suchfunktion Probleme. Anstatt dass das gefundene Wort schön (wie es normal ist) hellblau markiert wird habe ich ein großes blaues Quadrat, dass etwa 1/4 des Bildschirms bedeckt und in dem sich irgendwo ein kleiner senkrechter 1 Pixel breiter hellblauerblauer Strich befindet, der das gefundene Wort markiert.
Falls jemand weiß woran das liegen könnte bin ich ganz Ohr.
Ich blicke auch nicht wirklich durch, aber soviel weiß ich:
Restitution ist der COR und kann sogar Werte über 1.0 besitzen. Dann ist die "Rückprallgeschwindigkeit" (ein Königreich für ein Fachwort...) höher als die Aufprallgeschwindigkeit. (Das heißt nicht, dass bereits gefallene Ausagen falsch wären!)
Physikalische Größen sind metrisch (auch wenn oft etwas anderes behauptet wird).
Den Rest habe ich nicht im Kopf (oder nicht verstanden
).
Ich hoffe mal, dass ich jetzt nichts falsches erzählt habe (und noch erzähle), da es schon etwas her ist, da ich mich damit befasst hatte. Theoretisch könnte sich etwas geändert haben.
Was ich noch im Hinterkopf habe ist das Objekte kleiner 20 oder 30 cm angeblich nicht von der Schwerkraft beeinflusst werden. Bin mir aber unsicher, ob ich da etwas falsch verstanden hatte oder hinzugesponnen habe.
Was mich am Anfang irritiert hatte war, dass scheinbar ApplyEntityForce() und ApplyEntityImpulse() scheinbar beide einen Impuls anwenden, da bei einmaligem Aufruf von ApplyEntityForce(0, 123, 0) ja die Entity ewig gen Himmel fliegen müsste, was sie aber nicht macht, sondern wieder zu Boden fällt. Es ist aber tatsächlich KEIN Impuls, sondern ApplyEntityForce() muss einfach nach jedem RenderWorld() neu aufgerufen werden. Anders ausgedrückt: zwischen 2 RenderWorld() wirkt eine kontinuierliche Kraft.
Was mich immer noch total irritiert ist dass man kein Drehmoment direkt anwenden kann und dass man zwar eine exzentrische Kraft anwenden kann, allerdings eben nur eine, so dass man auch daraus kein Drehmoment "basteln" kann. Die einzige Möglichkeit besteht in der Kombo HingeJoint()/EnableHingeJointAngularMotor(), was allerdings bedeutet, dass man zwei Entities benötigt. Ein Marble-Madness-Klon via Physik-Engine (wie ich gerade aus Frust "geparkt" habe) ist also z.B. gar nicht so einfach. (Falls es jemanden interesiert hier der Download (5 MB), leider aber nur als Exe, da der Code zu alt und nicht kompilierbar ist)
Falls jemand Lust hätte einen Spickzettel zusammenzustellen wäre ich dabei! (allerdings nicht bei einem "festen Projekt")
EDIT:
Übrigens: Den COR kann man (bei realen Objekten und solange es keine Bowlingkugel oder Ming Vase ist
) super einfach bestimmen! Einfach etwas fallenlassen und dann grob das Verhältnis Anfangshöhe zu maximaler Höhe nach dem ersten Aufprallen schätzen. Gibt super Ergebnisse! Hatte das mal mit einem Tennisball gemacht.
Ein 2.81 Manual habe ich nicht gefunden und ich hoffe mal, dass die Nummerierung im "PureBasic-Stil" ist. Hanbuch-Links im Bullet-Wiki sind irgendwie alle tot...
Bei mir macht das PDF übrigens beim nutzen der Suchfunktion Probleme. Anstatt dass das gefundene Wort schön (wie es normal ist) hellblau markiert wird habe ich ein großes blaues Quadrat, dass etwa 1/4 des Bildschirms bedeckt und in dem sich irgendwo ein kleiner senkrechter 1 Pixel breiter hellblauerblauer Strich befindet, der das gefundene Wort markiert.
Ich blicke auch nicht wirklich durch, aber soviel weiß ich:
Restitution ist der COR und kann sogar Werte über 1.0 besitzen. Dann ist die "Rückprallgeschwindigkeit" (ein Königreich für ein Fachwort...) höher als die Aufprallgeschwindigkeit. (Das heißt nicht, dass bereits gefallene Ausagen falsch wären!)
Physikalische Größen sind metrisch (auch wenn oft etwas anderes behauptet wird).
- Eine Welteinheit entspricht einem Meter
- Geschwindigkeit sind in m/s gegeben
- Beschleunigung in m/s² (bei der Gravitation)
- Kraft in Newton (...glaube ich)
Den Rest habe ich nicht im Kopf (oder nicht verstanden
Ich hoffe mal, dass ich jetzt nichts falsches erzählt habe (und noch erzähle), da es schon etwas her ist, da ich mich damit befasst hatte. Theoretisch könnte sich etwas geändert haben.
Was ich noch im Hinterkopf habe ist das Objekte kleiner 20 oder 30 cm angeblich nicht von der Schwerkraft beeinflusst werden. Bin mir aber unsicher, ob ich da etwas falsch verstanden hatte oder hinzugesponnen habe.
Was mich am Anfang irritiert hatte war, dass scheinbar ApplyEntityForce() und ApplyEntityImpulse() scheinbar beide einen Impuls anwenden, da bei einmaligem Aufruf von ApplyEntityForce(0, 123, 0) ja die Entity ewig gen Himmel fliegen müsste, was sie aber nicht macht, sondern wieder zu Boden fällt. Es ist aber tatsächlich KEIN Impuls, sondern ApplyEntityForce() muss einfach nach jedem RenderWorld() neu aufgerufen werden. Anders ausgedrückt: zwischen 2 RenderWorld() wirkt eine kontinuierliche Kraft.
Was mich immer noch total irritiert ist dass man kein Drehmoment direkt anwenden kann und dass man zwar eine exzentrische Kraft anwenden kann, allerdings eben nur eine, so dass man auch daraus kein Drehmoment "basteln" kann. Die einzige Möglichkeit besteht in der Kombo HingeJoint()/EnableHingeJointAngularMotor(), was allerdings bedeutet, dass man zwei Entities benötigt. Ein Marble-Madness-Klon via Physik-Engine (wie ich gerade aus Frust "geparkt" habe) ist also z.B. gar nicht so einfach. (Falls es jemanden interesiert hier der Download (5 MB), leider aber nur als Exe, da der Code zu alt und nicht kompilierbar ist)
Falls jemand Lust hätte einen Spickzettel zusammenzustellen wäre ich dabei! (allerdings nicht bei einem "festen Projekt")
EDIT:
Seite 39 im Handbuch. Etwas genauer beschieben, aber auch nicht wirklich...Makke hat geschrieben:Tatsächlich scheitere ich schon beim Physischen Körper, laut Beschreibung soll man die Masse nicht zu hoch setzen, 1 wäre der bevorzugte Wert.
Übrigens: Den COR kann man (bei realen Objekten und solange es keine Bowlingkugel oder Ming Vase ist
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
- Chimorin
- Beiträge: 451
- Registriert: 30.01.2013 16:11
- Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit
Re: PB Physic Engine - Entwicklung und Doku
Hey Regenduft,
vielen Dank für deine ausführliche Hilfe! Hat mir auch super weitergeholfen
vielen Dank für deine ausführliche Hilfe! Hat mir auch super weitergeholfen
Re: PB Physic Engine - Entwicklung und Doku
Klar geht das, dafür sind doch die 3 weiteren Parameter in ApplyEntityForce(#Entity, x, y, z [, PositionX, PositionY, PositionZ]).Regenduft hat geschrieben:Was mich immer noch total irritiert ist dass man kein Drehmoment direkt anwenden kann und dass man zwar eine exzentrische Kraft anwenden kann, allerdings eben nur eine, so dass man auch daraus kein Drehmoment "basteln" kann.
Dabei ist (0,0,0) die Mitte (also der Schwerpunkt).
Eine Verlagerung führt somit zu einem Drehimpuls.
Der Unterschied zwischen ApplyEntityForce() und ApplyEntityImpulse() ist (nach experiemten) der, dass Force wirklich eine Kraft ist (also je nach Masse des Körpers eine unterschiedliche Beschleunigung zur Folge hat) und Impulse in wirklichkeit direkt die Beschleunigung (also unabhängig von der Masse) ist.
Richtig ist, dass beide Funktionen nur pro Frame gelten.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: PB Physic Engine - Entwicklung und Doku
Danke für's Feedback!Bananenfreak hat geschrieben:vielen Dank für deine ausführliche Hilfe! Hat mir auch super weitergeholfen
Beschäftige mich halt auch gerade mal wieder ein wenig mit der Physik-Engine und kenne es aus eigener Erfahrung wie frustrierend es ist, wenn man einfach keinen ordentlichen Ansatzpunkt findet.
Hmmm... da stehe ich gerade auf der Leitung. Vielleicht verstehen wir uns aber auch nur falsch bzw. meinen mit Drehmoment/-impuls etwas unterschiedliches. Ich drücke mich mal bildlich in zwei Beispielen aus:STARGÅTE hat geschrieben:Klar geht das, dafür sind doch die 3 weiteren Parameter in ApplyEntityForce(#Entity, x, y, z [, PositionX, PositionY, PositionZ]).Regenduft hat geschrieben:Was mich immer noch total irritiert ist dass man kein Drehmoment direkt anwenden kann und dass man zwar eine exzentrische Kraft anwenden kann, allerdings eben nur eine, so dass man auch daraus kein Drehmoment "basteln" kann.
Dabei ist (0,0,0) die Mitte (also der Schwerpunkt).
Eine Verlagerung führt somit zu einem Drehimpuls.
1. Was möglich ist, wäre eine Billardkugel, welche mit Effet angespielt wird, d.h. mit dem Queue außerhalb der Mitte angestoßen wird. Die Kugel dreht sich zwar, aber bewegt sich auch horizontal.
2. Was nicht möglich ist, wäre das Schwunggeben eines (idealen) Kreisel (auf einer idealen Oberfläche). Der Kreisel müsste sich drehen, aber horizontal nicht bewegen. Es ist nicht möglich, da man hier mit Daumen und Zeigefinger zwei in der Richtung entgegengesetzte Kräfte an zwei achsensymmetrisch gegenüberliegenden Punkten auf der Oberfläche des Kreiselschaftes anwendet, was PureBasics Physik so nicht kann.
Ist das richtig oder falsch? Habe ich vielleicht einen Denkfehler drin?PureBasic-Hilfe (ApplyEntityForce) hat geschrieben:Der neue Kraft-Wert ersetzt alle bisher auf das Entity angewendeten Kraft-Werte.
Meiner Erfahrung nach stimmt das so nicht ganz. Also ob wann und wie die Masse berücksichtigt wird, weiß ich nicht, da kannst Du schon recht haben! Allerdings liegt der "Kernunterschied" glaube ich in der "Wirkungsdauer". Sorry... mir fehlt gerade das Vokabular. Mal den von mir vermuteten Unterschied in Beispiel-Pseudocodes (Achtung! Reine Spekulation!):STARGÅTE hat geschrieben:Der Unterschied zwischen ApplyEntityForce() und ApplyEntityImpulse() ist (nach experiemten) der, dass Force wirklich eine Kraft ist (also je nach Masse des Körpers eine unterschiedliche Beschleunigung zur Folge hat) und Impulse in wirklichkeit direkt die Beschleunigung (also unabhängig von der Masse) ist.
Dieser Code...
Code: Alles auswählen
Repeat
ApplyEntityForce(#Rakete, 0, 1, 0)
RenderWorld()
FlipBuffers()
ForEverCode: Alles auswählen
Repeat
ApplyEntityForce(#Rakete, 0, 1, 0)
RenderWorld()
Delay(1200) ; <-- !!!
FlipBuffers()
ForEverWenn man in den Beiden Pseudocodes ApplyEntityForce() durch ApplyEntityImpulse() ersetzt, dann hat man zwar such eine unterschiedliche Framerates aber vor allem: Beim ersten Code wird (im theoretischen Idealfall bei 60 Hz Bildwiedeholungsfrequenz mit V-Sync) alle 1/60 Sekunden ein Impuls angewendet, während beim zweiten Code nur alle 12 Sekunden ein Impuls angewendet wird. D.h. einmal fiegt die Rakete und einmal hoppelt sie alle 12 Sekunden einmal (natürlich rechnerisch, nicht sichtbar).
Solltest Du mit "Kraft" und "Beschleunigung" recht haben, dann klingt das für mich eher sogar nach einem Bug, da in der Hilfe ja ausdrücklich auf die "Impulskraft" bzw. "impulse force" Bezug genommen wird, womit wohl der physikalische Impuls gemeint ist und dieser per Definition die Masse berücksichtigt.
Kraft -> N = kg*m/s²
Impuls -> N*s = kg*m/s
Aber auch hier: Vielleicht habe ich ja einen Denkfehler drin (Du bist ja was Mathematik und Physik angeht deutlich fitter als ich).
Leider ist es schon wieder recht spät und ich habe noch einiges vor, sonst hätte ich es gleich getestet (will mich gerade nicht zu sehr verspielen
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)