Help!
by VoroneTZ. 10/14/25 05:04
|
|
|
|
|
|
|
|
|
2 registered members (AndrewAMD, Nymphodora),
7,090
guests, and 3
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: drehendes zahnrad ?
[Re: ratz]
#420403
03/25/13 10:16
03/25/13 10:16
|
Joined: Oct 2004
Posts: 900 Lgh
rojart
User
|
User
Joined: Oct 2004
Posts: 900
Lgh
|
For complex physics objects use pXent_addshape, also.
|
|
|
Re: drehendes zahnrad ?
[Re: rojart]
#420568
03/29/13 12:02
03/29/13 12:02
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
bitte ein bisschen ausführlicher, muss ich das beiden objecten geben, oder muss ich das in einer main hinzufügen oder wie ich braüchte mal richtige hilfe und nicht immer nur sporadisch nach dem motto ' "so oder so muss du das machen und nicht so" ich hab das gehühl keiner weis das so wirklich , weil viele physX fragen werden hier im Forum versuch mit sich selbst zu erklären OHNE das jemand wirklich Anhung ("sorry aber ist so") hat. dann wird man ins manuel verlinkt und da steht noch weniger drin -> aufenmal werden irgedwelche codesamples als beispiel angegeben ohne wirklicher beschreiebung was da passiert und wenn man dann sich weiter durchklicken will ist man wieder im gleichen Karpittel auf der Gleichen seite  ODER es ist garnichtmal die Möglichkeit gegeben da zu suchen , weil man so oder so immer auf die gleiche seite geleitet wird -> beste beispiel: PhyX_rotate (nur kurtz im PhysX_move beispiel mit actor.skill eingefügt), add_shape oder sonstiges... ich bin nicht der Typ der sich keine mühe machen will und nur Fertig Codes abkopiert, aber das musste mal echt gesagt werden.. Zitat: "...die zahnräder müssen konvex sein..." -> HÄÄÄÄ ?
Last edited by ratz; 03/29/13 12:19.
|
|
|
Re: drehendes zahnrad ?
[Re: ratz]
#420583
03/29/13 20:28
03/29/13 20:28
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Ist das dein Ernst? Du musst dir selbst helfen, wie jeder andere auch, der tatsächlich Spiele programmieren möchte. Das fängt bei meinem von dir zitierten Satz an, dass Zahnräder nicht konvex seien (wenn dir konvex nichts sagen sollte, dann guck es bitte selbstständig und sofort bei Wikipedia o.ä. nach) und alles bisher vorgeschlagene sich auf konvexe Physikobjekte bezog, weshalb es bis dahin nicht funktionieren konnte. Mit pXent_addshape, welches rojart vorgeschlagen hat, kenne ich mich nicht aus, da ich es noch nie benutzt habe, aber es scheint mir, als könne man daraus nicht-konvexe physikalische Objekte erstellen, indem man diese aus primitiven (konvexen) solchen zusammensetzte. Das hieße bei dir bspw., dass du den Basiskörper mittels eines Zylinders realisierst und die Zacken des Zahnrads mittels Boxen. Warum es nicht einfacher geht? Weil es etwas sehr schwieriges (+ rechenaufwändiges) ist, einen Movementcode für beliebige, nicht-konvexe Objekte zu schreiben.
Ich habe nicht alles in diesem Thread gelesen und weiß daher nicht, welchen Vorteil es hätte, Zahnräder mittels einer Physikengine und nicht mit ein paar Zeilen Skript zu realisieren, vllt machst du das ja auch nur aus Spaß und/ oder Interesse, aber lasse nie aus den Augen, dass es für jedes Problem u.U. eine einfachere Lösung oder Herangehensweise gibt.
"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual Check out my new game: Pogostuck: Rage With Your Friends
|
|
|
Re: drehendes zahnrad ?
[Re: 3run]
#420640
03/30/13 16:19
03/30/13 16:19
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
okey -> dann hätte ich noch eine frage: ist es den möglich physic objecte mit einen Player oder so via c_move zu verschieben ? ich hab mir mal weiter gedanken dazu gemacht und das ist dabei rausgekommen: Eines der Zähnräder kann man jetz drehen und bewegen ich hab mir das mal so gedacht, dass man mit einen event (wenn eine Collision statt findet) das andere zahnrad sich dreht -> dafür hab ich alles mit USE_POLYGON versehn .. okey noch functioniert es nicht aber so hab ich mir das vorgestellt //Fake Physic//
...
function entity_event_()
{
if (event_type == EVENT_SCAN)
{
my.pan += 0.01;
}
}
action easy_wheel()
{
c_setminmax(me);
pXent_settype(me,PH_RIGID,PH_CONVEX);
my.emask |= ENABLE_SCAN;
my.event = entity_event_;
}
action my_wheel()
{
c_setminmax(me);
VECTOR vFeet;
vec_for_min(vFeet,me);
my.skill1 = 40;
my.skill2 = 60;
my.skill3 = 200;
while (1)
{
if (key_w)
c_move (me, vector(-5*time_step, 0, 0),NULLVECTOR,USE_POLYGON);
if (key_s)
c_move (me, vector(5*time_step, 0, 0),NULLVECTOR,USE_POLYGON);
if (key_space)
c_rotate (me, vector(5*time_step, 0, 0),USE_POLYGON);
//
c_trace(my.x,vector(my.x,my.y,my.z-1000),USE_POLYGON);
my.z = hit.z - vFeet.z;
//
c_scan(my.x, my.pan, vector(my.skill1, my.skill2, my.skill3), USE_POLYGON);
wait (1);
}
}
|
|
|
Re: drehendes zahnrad ?
[Re: ratz]
#420647
03/30/13 19:38
03/30/13 19:38
|
Joined: Oct 2004
Posts: 900 Lgh
rojart
User
|
User
Joined: Oct 2004
Posts: 900
Lgh
|
Warum fake Physik, wenn alles so schön mit PhysX funktioniert? Hier Gears.exe demo zum testen.
|
|
|
Re: drehendes zahnrad ?
[Re: rojart]
#420659
03/31/13 07:08
03/31/13 07:08
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
okey  das sieht super aus  ich habs mal runtergeladen und getestet aber davor hab ich 3d3X9_43.dll noch ausen netz gezogen kannst du den code uploaden oder so
|
|
|
Re: drehendes zahnrad ?
[Re: ratz]
#420667
03/31/13 14:16
03/31/13 14:16
|
Joined: Dec 2002
Posts: 3,375 Vindobona (Ostarichi)
Harry Potter
Expert
|
Expert
Joined: Dec 2002
Posts: 3,375
Vindobona (Ostarichi)
|
Was sollen diese Zahnräder denn alles können? Sollen sie sich einfach nur drehen, oder soll diese Zahnradkonstruktion z.B. auch zerstörbar sein, sich verklemmen können, etc., etc.? Warum ich frage: weil für Zahnräder, die sich einfach nur drehen sollen, halte ich PhysX-Berechnungen für den falschen Weg. Weil man kann ja den Drehwinkel eines Zahnrades vom Drehwinkel eines anderen Zahnrades ableiten. Das kann man viel performanter ohne Physik hinbekommen. Zahnräder, die sich einfach nur drehen sollen, mit PhysX zu berechnen, halte ich für genauso sinnvoll, wie wenn man sich einen 40-Tonnen-Sattelschlepper ausborgt, nur um damit 500 Meter weit zum nächsten Supermarkt Brot und Milch einkaufen zu fahren.  Wollte ich nur mal gesagt haben. Weil oft neigt man dazu, Dinge komplizierter oder rechenintensiver zu lösen, als es notwendig wäre. 
|
|
|
Re: drehendes zahnrad ?
[Re: ratz]
#420721
04/01/13 21:02
04/01/13 21:02
|
Joined: Oct 2004
Posts: 900 Lgh
rojart
User
|
User
Joined: Oct 2004
Posts: 900
Lgh
|
Ja stimmt, 3d3X9_43.dll wurde vergessen, weil ich für ackphysX.dll die DX SDK (June 2010) benutze, wenn es mit meine dll Schwierigkeiten geben soll, einfach das originale ackphysX.dll aus dem acknex_plugins ordner mit meine überschreiben und die 3d3X9_43.dll kann auch gelöscht werden. Mit dem Sourcecode fangen wir mal klein an, um zu verstehen wie die physX Intern funktioniert. Nicht alles was glänzt ist Gold, deswegen um zu analysieren was nicht funktioniert nutze ich ein PhysX Visual Debugger (PVD). Du benutzt für die Interne Kollision Erkennung PH_CONVEX was ungefähr wie eine walze ohne Zähne ausseht und in der Simulation ständig miteinander kollidiert, was zu unerwünschten Effekten führen kann. Theoretisch mit PH_SPHERE hull funktioniert tadellos, aber es aussieht unecht und statisch.  Daher die Lösung heißt pXent_addshape und lässt sich eine komplexe Physik-Kollisionsform aus Grundformen zusammenstellen. In diesem Fall nutze ich lediglich eine Box hülle mit der Länge, so wie Durchmesser und eine Breite wie Tiefe von einem Zahnrad, hier die Berechnung:
action base_gear() {
ENTITY* shape1 = ent_create("addShape.mdl",me.x,NULL); // Simple box für die Zähne
set(shape1, INVISIBLE);
pXent_settype(me,PH_RIGID,PH_SPHERE);
// Insgesamt 5 Zähne werden Gebraucht mit 10° anfangs Winkel
var i;
for (i=10; i<360; i+=72) {
shape1.roll = i;
pXent_addshape(me, shape1, PH_BOX);
}
pXent_removeshape(me, 0); // entfernt eine zuvor hinzugefügte PH_SPHERE Form
pXent_setbodyflag(me,NX_BF_KINEMATIC,1); // aktiviert kinematische Steuerung
// Steuerung Schleife
ANGLE angle;
while(1) {
if (key_j) {
angle.roll += -8* time_step;
pXent_rotate(me, nullvector, vector(0,0,angle.roll));
}
if (key_k) {
angle.roll += 8* time_step;
pXent_rotate(me, nullvector, vector(0,0,angle.roll));
}
wait(1);
}
}
 @Harry Potter: Ich gehe mal davon aus, dass es Ihm nur ums Prinzip geht, ob es überhaupt mit physX simulation funktioniert.
|
|
|
Re: drehendes zahnrad ?
[Re: rojart]
#420911
04/06/13 11:59
04/06/13 11:59
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
 okey okey , ich hab jetzt alles so gemacht wie es sollte: eine sphere erstellt (rad) ein block (für den zahn) und den aus dem code schnippsel versucht ein sample zu machen
///////////////////////////////
#include <acknex.h>
#include <default.c>
#include <ackphysX.h>
///////////////////////////////
function main()
{
physX_open();
level_load("room.WMB");
}
action easy_wheel()
{
c_setminmax(me);
ENTITY* shape1 = ent_create("add_shape.mdl",me.x,NULL); // Simple box für die Zähnr
set(shape1, SHOW);
pXent_settype(me,PH_RIGID,PH_SPHERE);
var i2;
for (i2=10; i2<360; i2+=72)
{
shape1.roll = i2;
pXent_addshape(me, shape1, PH_BOX);
}
pXent_removeshape(me, 0); // entfernt eine zuvor hinzugefügte PH_SPHERE Form
pXent_setbodyflag(me,NX_BF_KINEMATIC,1); // aktiviert kinematische Steuerung -> keine graviation
}
action my_wheel()
{
c_setminmax(me);
ENTITY* shape2 = ent_create("add_shape.mdl",me.roll,NULL); // Simple box für die Zähne
set(shape2, SHOW);
pXent_settype(me,PH_RIGID,PH_SPHERE);
// Insgesamt 5 Zähne werden Gebraucht mit 10° anfangs Winkel
var i;
for (i=10; i<360; i+=72) {
shape2.roll = i;
pXent_addshape(me, shape2, PH_BOX);
}
pXent_removeshape(me, 0); // entfernt eine zuvor hinzugefügte PH_SPHERE Form
pXent_setbodyflag(me,NX_BF_KINEMATIC,1); // aktiviert kinematische Steuerung
// Steuerung Schleife
ANGLE angle;
while(1)
{
if (key_j) {
angle.roll += -8* time_step;
pXent_rotate(me, nullvector, vector(0,0,angle.roll));
}
if (key_k) {
angle.roll += 8* time_step;
pXent_rotate(me, nullvector, vector(0,0,angle.roll));
}
wait(1);
}
}
nun habe ich das problem das egal wie ich den code verändere, bearbeite keine collision mit dem oberen rad habe, desweiteren wird der zahn nur einmal dargestellt trotz for-schleife "i=360" -> daher habe ich mal den befehl: set_minmax(me) hinzugefügt aber das kommt bei mir raus:  keine Collision  hier mein Level: http://www.file-upload.net/download.php?...y_fail_gear.zipbitte den kleinen download button mittig rechts drücken NICHT DIE GROßEN !
|
|
|
|