Hi!
Habe gerade ein bißchen mit Newton herum experimentiert: Ist ja gar nicht so schwer! *freu*
Nun habe ich gleich mal eine kleine Frage:
Wie bekomme ich mit (oder ohne) Newton die aktuelle Position meines Objektes heraus? Setzen kann man es ja mit NewtonBodySetPosition. Mir fehlt irgendwie sowas wie ein ...GetPosition, das irgendwie die Werte zurück liefert, oder so. Gibt es sowas?
GLG
W.
PS.: Ich werde bestimmt noch ein paarmal nerven, denn ganz so einfach ist Newton dann doch nicht! *lol*
eine Variable ? :D
Scherzkübel! =D
Nein, irgendwas, wo ich direkt von Newton die Position auslesen kann, damit ich auf bestimmte Positionen reagieren kann. --> [Skripten ausführen usw.]
Anbei: Wie gibt man eigentlich Gewicht an? bzw. Masse? Ich frage deshalb, weil ich mit einer gewissen Kraft beschleunigen möchte. Und irgendwie errechnen möchte, wie groß die Beschleunigung ist:
Viel Gewicht --> wenig Beschleunigung
wenig Gewicht --> viel Beschleunigung
So ungefähr! Hat da wer eine Idee für mich?
GLG
W.
NewtonConvexCollisionCalculateInertialMatrix: body_index, mass
Büddö
EDIT:
Position herrausfinden(Nicht getestet):
Somit setzt man ja die Position:
FUNCTION NewtonBodySetPosition: body_index, x,y,z
LOCAL mat[]
NewtonBodyGetMatrix(body_index, mat[])
mat[12]=x; mat[13]=y; mat[14]=z
NewtonBodySetMatrix(body_index, mat[])
ENDFUNCTION
Also sollte man so die Position rausbekommen:
FUNCTION NewtonBodyGetPositionX: body_index
LOCAL mat[]
NewtonBodyGetMatrix(body_index, mat[])
RETURN mat[12]
ENDFUNCTION
USW für Y und Z halt noch ....
Super! Probiere ich gleich mal aus! Danke! Danke! Danke! =)
So jetzt ists getestet und für gut befunden:
FUNCTION NewtonBodyGetPositionX: body_index
LOCAL mat[]
NewtonBodyGetMatrix(body_index, mat[])
RETURN mat[12]
ENDFUNCTION
FUNCTION NewtonBodyGetPositionY: body_index
LOCAL mat[]
NewtonBodyGetMatrix(body_index, mat[])
RETURN mat[13]
ENDFUNCTION
FUNCTION NewtonBodyGetPositionZ: body_index
LOCAL mat[]
NewtonBodyGetMatrix(body_index, mat[])
RETURN mat[14]
ENDFUNCTION
Spitze, danke! Habe gestern Abend noch etwas mit Masse herum experimentiert! Das funktioniert ja spitzenmäßig!
Heute Nachmittag teste ich mal deine Funktion(en) aus. Dann wird es nämlich ziemlich witzig! Das Ding könnten wir nämlich beim R-Type Clon einbauen! =D
Jow mal gucken ^^
Und weiter geht's mit dem Fragen:
Wie realisiert man eigentlich das zusammenfügen mehrerer einzelner Objekte und Newton?
Ich meine damit, daß ich aus mehreren extra Teilen ein Objekt erzeugen möchte (x_Push_matrix / x_pop_matrix). Ist das normal mit Newton möglich? (Also mit der 3d - Objekt - Ausgabe via Newton?)
Schranzor!!!! Du bist da der volle Abchecker! Ich geh' dann mal für 1 Jahr in Urlaub :D
Ja, die Matrix gibt an, wo und wie das Objekt ist. Diese Matrix kann man auch mit X_MULTMATRIX nehmen, um das Ding an seinem Ort zu zeichnen.
Die Matrix sind quasi 4 vektoren:
mat[0], mat[1], mat[2] ist die lokale X Achsen-richtung des Objektes.
mat[3,4,5] Y Achse
und mat[12], mat[13],mat[14] die position.
Wenn man die länge der X-achsen-richtung ändert, kann man das Objekt entlang dieser Achse zoomen. Besser nicht machen ;)
Also, matrix - keine Angst haben. Ist gar net so kompliziert.
Um so eine Matrix zu machen kann man NetwonBuildMatrix nehmen.
Zusammenfügen von Objekten geht mit NewtonCreateCompoundBody()
dann alle "Childs" machen mit NewtonCreateBox usw... Aber die Matrix relativ zum Parent anpassen/verschieben. Mit NewtonCompoiundEnd oder so fertig machen.
Was hab ich den nun wieder gemacht :D ....
Viel spass im Urlaub, und schreib mir mal ne Karte.... ;)
Achja, bevor du gehst, gib mir bitte noch Modrechte, ab und an muss man ja mal ein Auge auf bestimmte Leute werfen, die leichtsam mal spamen ! *PFEIF*
QuoteAber die Matrix relativ zum Parent anpassen/verschieben.
Meinst du damit, daß man die Position des Childs relativ zum Parent anpassen muß?
Alias:
Parent ist auf 50, 0, 0
Child ist auf 0, 0, 0 (relativ gesehen zum Parent?)
So ca.?
Und noch eine Frage:
So wie ich das sehe, funktioniert in diesem Fall X_Rotation auch nicht! *ggg*
Da gibt es bestimmt auch irgendwas von Newton, oder?
Das Parent ist auf 0,0,0 (beim zusammenbauen)
Jetzt ist der Kopf auf 50,0,0, OK?
Also:
NewtonCreateCompoundBody()
NewtonBuildMatrix (0,0,0, 50,0,0, mat[])
NewtonCreateBox (1,1,1, mat[])
...
Der NewtonCreateMatrix kann auch die Rotationen einbauen.
QuoteDer NewtonCreateMatrix kann auch die Rotationen einbauen.
Wie genau? Ich meine, wie funktioniert das? bzw. was genau muß ich da machen bzw. was für Variablen ansprechen usw. ?
Ich frage nur deshalb so genau, weil ich vermutlich ca. 200 Jahre brauchen würde, bis ich selbst drauf komme...
Da wirste wohl um COS und SIN nicht rum kommen ....
Aber mach dir nix drauss, ich könnts auch nicht!
Das sollte nicht das Problem sein!
Bis jetzt weiß ich nämlich bloß, wo ich genau stehe! Mir geht es darum, wo ich hin schaue! Ich könnte ja ein Spiel mit einem Ball machen, bei dem Rotation egal ist, aber bei Raumschiffen sieht die Sache schon etwas anders aus.
Und immer in die selbe Richtung zu schauen, sieht auch blöd aus!
Was brauche ich denn für die rotation? mat[0 - 13] ??? Und falls ja, welche? Oder wie? Oder wo?
hab ich doch gesagt!
SIN COS evtl sogar TAN...Have fun...
Und ob das ein Problem ist !
Nimm NetwonBuildMatrix (rotX, rotY, rotZ, moveX, moveY, moveZ)
hab' ich doch alles schon für euch gemact ;)
Ohhhhhhh........
Wo genau muß ich NewtonBuildMatrix ansetzen? Vor dem Objekt bzw. vor der Objektmatrix ( NewtonCreateCompoundBody() )?
Quote from: GernotFrischDas Parent ist auf 0,0,0 (beim zusammenbauen)
Jetzt ist der Kopf auf 50,0,0, OK?
Also:
NewtonCreateCompoundBody()
NewtonBuildMatrix (0,0,0, 50,0,0, mat[])
NewtonCreateBox (1,1,1, mat[])
...
Der NewtonCreateMatrix kann auch die Rotationen einbauen.
Wer lesen kann.... WP da Shadow
Das schon! Damit verschiebe ich ja untereinander die Einzelteile! Ich meine damit, falls ich das ganze Ding rotieren möchte! Das müßte dann also eigentlich so laufen:
// Rotation für zusammengesetztes Ding
NewtonBuildMatrix (0,0,0, 50,0,0, mat[])
// Zusammengesetztes Ding
NewtonCreateCompoundBody()
NewtonBuildMatrix (0,0,0, 50,0,0, mat[])
NewtonCreateBox (1,1,1, mat[])
Oder?
Versuchs doch einfach mal ^^
Habe doch keinen Rechner hier, auf dem ich es testen könnte! Erst heute Abend. Deshalb frage ich jetzt genau nach, damit ich heute Abend nicht 4 Stunden herum sitze und es dann immer noch nicht funktioniert! (so ungefähr halt...) =D
Das machst Du nachher, mit
NewtonBuildMatrix globRX, .... globX,...., m[]
NewtonBodySetMatrix fertiger_body, m[]
Damit kann man ein Objekt irgendwo platzieren -> Das sollte man aber nicht zwischen dem Lauf machen, weil's sonst instabil werden kann. Sondern nur am Anfang, damit die Objekte da sind, wo sie im Level anfangen.
Kurz zur Erklärung, was ich möchte:
Raumschiff besteht aus verschiedenen Teilen. Jedes Teil hat eine gewisse Masse und der Antrieb hat eine gewisse Kraft, mit der er das Ding voran treibt. --> Summe der Massen vs. Antriebskraft (gewissermaßen)
Und das Ganze möchte ich auf einer großen Fläche (2D) mal austesten, wobei eben die Einzelteile zusammen halten sollten und sich in die Richtung drehen sollten, in die ich das Raumschiff drehen möchte. Also so ca. wie x_push_matrix / x_pop_matrix.
Das ist im Augenblick der Plan. Nicht mehr und nicht weniger. Mein erstes Experiment mit einem Würfel funktioniert ja schon super. Aber der Rest eben noch nicht. Da ist halt noch das Problem...
QuoteDamit kann man ein Objekt irgendwo platzieren -> Das sollte man aber nicht zwischen dem Lauf machen, weil's sonst instabil werden kann. Sondern nur am Anfang, damit die Objekte da sind, wo sie im Level anfangen.
Das ist jetzt ungefähr klar. Also platzieren und ausrichten, gewissermaßen. Würde das dann auch ca. so funktionieren:
NewtonBuildMatrix aktuelle_Position_X, .... aktueller_Winkel_X,...., m[]
NewtonBodySetMatrix fertiger_body, m[]
Also gewissermaßen die aktuelle Position einfach übergeben und den entsprechenden Winkel dazu machen?
Ach so!!! Die Teile sollten getrennt bleiben, wg. Antrieb usw.? Dann musst Du die mit einem Joint verbinden. Jetzt wirds evtl. bisserl knifflig :D
Nicht wirklich getrennt! Sie sollen eigentlich ein fixes ganzes Objekt bilden. Aber ich möchte sie halt getrennt laden. Damit ich einfach einzelne Teile auswechseln kann. (z.B. anderes Cockpit oder so)
Ich modelliere die einzelnen Objekte ja schon so, daß ich sie beim einfügen eigentlich schon an der richtigen Position habe. Eigentlich müssen sie dann nur mehr eingefügt werden und zusammen geklatscht. Aber so, wie ich vorher gemeint habe
QuoteNewtonBuildMatrix aktuelle_Position_X, .... aktueller_Winkel_X,...., m[]
NewtonBodySetMatrix fertiger_body, m[]
müßte ich eigentlich ganz normal die Bewegung bzw. die Rotation hinbekommen, oder?
OK, dann ist der Compound für dich.
Stimmt! Funktioniert nämlich spitze!
Und jetzt habe ich eine Grundlegende Frage, die ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜBERAUS wichtig ist:
X_LOADOBJ "ground.ddd", 0
X_LOADOBJ "cube.ddd", 1
X_LOADOBJ "sphere.ddd", 2
LOADSPRITE "textur.png", 0
LOCAL dtime
LOCAL org[]
LOCAL org2[]
LOCAL force[]
usw.
Wie genau weise ich einem org[] den Wert von Sphere zu? Oder von cube? Wie sage ich:
org[] = cube.ddd
org2[] = sphere
Das verstehe ich bis jetzt noch absolut nicht...
Und noch eine Frage:
Gibt es irgendeine "Abfrageart" bei Newton, bei der nicht eine "grobe" Struktur her genommen wird (Cube, Sphere, ...) sondern die Polygonen des 3D Modells selbst? Irgendwas soll es da ja geben, glaube ich. Also sozusagen, daß das Modell direkt als Kollisionsabfrage genutzt wird. (ungefähr???)
Gute Nacht
W.
Ok, ich vermute, dass ich es ca verstanden habe! Teste mal ein bisschen! Melde mich morgen, falls es doch was geben sollte!
Glg
W.
Ihhhhh ein Doppelpost!
Im BlitzForum würde jetzt schon der ganze Thread getrashed werden :D
Kackforum da :D
hehehe
Hey, ich für meinen Teil bin schon froh, daß ich kapiert habe, wie das Ding funktioniert. Ist ja eigentlich ganz einfach (wenn's nicht so unheimlich komplex wäre). Am Wochenende mache ich ein paar Tests. Wenn es so funktioniert, wie ich es mir vorstelle, dann wird das super...
GLG
W.
Japp Newton ist echt super...
Da hebt man sich schon bei kleinen Games von der Masse ab!
Warte nur ab. Ich hab da nämlich so eine Idee! Falls die eben funzt, dann haben wir das ultimative Weltraumspiel mit Physik. Und zwar in zweifacher Hinsicht bzw. auch Ausführung! =)
Quoteorg[] = cube.ddd
org2[] = sphere
Das kapier ich nicht!?
NewtonCreateDDD() kann aus DDD's Objekte machen. Aber: Die können sich nicht bewegen. Mit NewtonCreateConvexHull kann man mit X_GETFACE Infos sowas machen. So mach ich das in dem CogWork game. Das ist aber schon recht heftig.
QuoteHabe gerade ein bißchen mit Newton herum experimentiert: Ist ja gar nicht so schwer!
warum stellst du soviele fragen , wenn es nicht so schwer ist...lol...
ist auch nicht schwer.
Ganz einfach:
Auf den ersten Blick ist das Ding riesig und wirkt total unübersichtlich und kompliziert. Aber wenn man dann plötzlich das "Pling" macht (und das hat es tatsächlich gemacht) und plötzlich da hab ich's plötzlich verstanden. Reduziert auf die paar Befehle ist das Ganze total durchschaubar und einfach zu bedienen. (Zumindest die Teile, die ich nicht selbst dazu schreiben muß [Die funktionieren nämlich meistens erst irgendwann! *lol*])
Jo. Ein kleines Tutorial wäre evtl. ganz nett. Ich bin nicht viel dazugekommen den Code zu dokumentieren, aber die Beipiele im Newton-Ordner sind alle sehr klein und einfach.
Ich gucke mal, wie ich Zeit habe. Dürfte sich aber gut ausgehen. Schreibe mal was zusammen und schicke dir mal den ersten Entwurf. Falls es dann paßt, dann kannst du den immer noch dazu tun!
Du könntest uns auch noch einen kleinen Gefallen tun, Gernot. Was hälst du davon, wenn du den Teil:
FUNCTION NewtonBodyGetPositionX: body_index
LOCAL mat[]
NewtonBodyGetMatrix(body_index, mat[])
RETURN mat[12]
ENDFUNCTION
FUNCTION NewtonBodyGetPositionY: body_index
LOCAL mat[]
NewtonBodyGetMatrix(body_index, mat[])
RETURN mat[13]
ENDFUNCTION
FUNCTION NewtonBodyGetPositionZ: body_index
LOCAL mat[]
NewtonBodyGetMatrix(body_index, mat[])
RETURN mat[14]
ENDFUNCTION
einfach fix einfügst? Das ist ziemlich brauchbar. Vor allem, weil man dadurch sehr einfach die Position rausbekommt! =D
OK, aber das ist langsam, schon klar? NewtonBodyGetMatrix wandelt 16 floats in double um, und kopiert die dann in das Feld, das vorher alloziiert werden muss.
Ich mach's rein, aber ich werd's nicht nutzen.
Gibt's eine schnellere Methode das zu nutzen??? Und falls ja, wie? (Je schneller, desto besser!!!)
Benutze ich da gleich mat[12], mat[13] und mat[14]???
Eine letzte Frage bleibt noch: Wie setzte ich die Beschleunigung eines Körpers um? Wie man die Gravitation setzt, ist mir klar. Aber wie setzt man Kräfte aus irgendeiner Richtung bzw. eine Kraft, die in irgendeine Richtung treibt? (Habe leider keine Möglichkeit danach zu suchen!!!)
NewtonBodySetForce
NewtonBodyAddForce
;) good luck, ist nicht wirklich schwer ;)
Oder mit NewtonBodyAddImpulse oder so...
Argh..... vergessen :D
Guttttt.... Jetzt ist wirklich alles klar! Danke! *ggg*
PS.: tz tz tz, Schranzi, du läßt doch nicht etwa nach, oder? *lol*
Quote from: WPShadowtz tz tz, Schranzi, du läßt doch nicht etwa nach, oder? *lol*
Ja, mit so kleinen Aussetzern fings bei mir auch an. ;)
Cheers
BOAHHHHHHHHHH :D
5 Trilliarden Abmahnungen :D *Böseguck*
;)
Hi!
Ich habe hier mal wieder eine Frage:
Wie bekomme ich am Besten hin, daß ich X, Y und Z - Koordinate zuweisen kann?
Ich dachte an sowas wie:
NewtonBodySetX (als Kontrast zu NewtonBodyGetX)
aber irgendwie bekomme ich das alleine nicht hin!
Kann mir da jemand helfen?
Gruß
W.
PS.: Schönen Fasching - Dienstag!!! =D
Äh... das ist in der aktuellen Newton.gbas drin, oder!?
Zumindest hätte ich es noch nicht gefunden! Bloß
NewtonBodyGetX
um die Position zu kriegen, aber nicht
NewtonBodySetX
um auf die entsprechende Position zu setzen...
Hab gerade NewtonSDK durchsucht, aber leider nichts gefunden, das mit NewtonBodySetX vergleichbar wäre.
Und das Problem ist, daß ich das mit der Matrix nicht ganz hinbekomme...
netwonbodygetmatrix(body, mat[])
mat[12] = x
newtonbodysetmatrix(body, mat[])
das hatten wir doch erst!
Wenn du mal bei einen Thread bleiben würdest, hättest du das gesehen:
FUNCTION NewtonBodySetPositionX: body_index, posX
LOCAL mat[]
NewtonBodyGetMatrix(body_index,mat[])
mat[12] = posX
NewtonBodySetMatrix(body_index,mat[])
ENDFUNCTION
FUNCTION NewtonBodySetPositionY: body_index, posY
LOCAL mat[]
NewtonBodyGetMatrix(body_index,mat[])
mat[13] = posY
NewtonBodySetMatrix(body_index,mat[])
ENDFUNCTION
FUNCTION NewtonBodySetPositionZ: body_index, posZ
LOCAL mat[]
NewtonBodyGetMatrix(body_index,mat[])
mat[14] = posZ
NewtonBodySetMatrix(body_index,mat[])
ENDFUNCTION
@ Gernot:
Wolltest du das nicht mit in Newton einbauen, beim nächsten Update?
Habe es gestern Nachmittag doch noch gefunden!
NewtonBodySetPosition(body_index, x, y, z)
Entschuldigung! Hatte nicht gründlich genug gesucht...
:D