Abprallwinkel im 3D-Raum [ist erledigt]
Übersicht

![]() |
NescioBetreff: Abprallwinkel im 3D-Raum [ist erledigt] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe folgende Situation: Ich hab einen großen Würfel und eine Kugel. (Alles in 3D) Jetzt möchte ich, dass sich die Kugel im Würfel bewegt und an den Wänden abprallt. Allerdings ohne 3 speed-variablen, damit ich weiter MoveEntity verwenden kann. Daraus ergeben sich jetzt mehrere Probleme: 1.) Wie testen, an welcher Wand die Kugel ist (Kollision oder Koordinaten prüfen?) 2.) Wie muss man die Kugel dann drehen ? Ich würde gern bei Befehlen wie MoveEntity und TurnEntity bleiben (also nicht x=x+xspeed und das PositionEntity). Ich hab leider bei der Suche (noch) nichts vernünftiges gefunden zu dem Thema. Aber ich werde weiter suchen. Danke für Hilfe jeder Art |
||
Quod est faciendum? Nescio! |
- Zuletzt bearbeitet von Nescio am Fr, Dez 15, 2006 20:37, insgesamt einmal bearbeitet
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das wird dann recht schnell komplex. Am einfachsten (und wohl auch am realistischsten) für Dich wäre es wohl, das ganze eine Physik-Engine wie Tokamak oder Newton machen zu lassen.
Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
anhand den Punkten der Kollision und dem Mittelpunkt des Objektes sollte es sich doch eigentlich relativ leicht berechnen lassen oder nicht? | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn der Würfel immer "gerade steht" (also so gedreht, wie bei der Erstellung), ginge es so:
Code: [AUSKLAPPEN] MoveEntity kugel,xspeed,yspeed,zspeed If EntityX(kugel) < EntityX(wuerfel) - wuerfelkantenlaenge/2 + kugelradius xspeed=-xspeed If EntityX(kugel) > EntityX(wuerfel) + wuerfelkantenlaenge/2 - kugelradius xspeed=-xspeed If EntityY(kugel) < EntityY(wuerfel) - wuerfelkantenlaenge/2 + kugelradius yspeed=-yspeed If EntityY(kugel) > EntityY(wuerfel) + wuerfelkantenlaenge/2 - kugelradius yspeed=-yspeed If EntityZ(kugel) < EntityZ(wuerfel) - wuerfelkantenlaenge/2 + kugelradius zspeed=-zspeed If EntityZ(kugel) > EntityZ(wuerfel) + wuerfelkantenlaenge/2 - kugelradius zspeed=-zspeed Dann hättest du trotzdem 3 Speed-Variablen ![]() Aber es wird nur das Vorzeichen geändert... Wenn sich der Würfel aber auch noch drehen soll, wirst du um ein paar mehr Variablen aber nicht herumkommen... |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
Nescio |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke schonmal für die Antworten. Aber ich glaub, mit ner Physik-Engine wird das zu komplex, ich wollte lieber irgendne einfache Formel (sogar ohne Schwerkraft). Und speed-Variablen wollt ich nicht, weils dann aussieht, als ob sich der Ball schneller oder langsamer bewegt.
Ich bin jetzt grad was am testen mit Winkeln (also Pitch, Yaw und Roll). Da müsste sich doch was tun lassen. Meld mich, wenn ich Erfolg hab. |
||
Quod est faciendum? Nescio! |
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm... gerade _mit_ einer Physik-Engine bleibt es doch einfach!
Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
![]() |
Nescio |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, aber dann muss man erst noch eine DLL einbinden usw. (nix jetzt gegen dich oder gegen Physik-Engines)
Ich wollte eigentlich nur ein paar kurze Formeln wie z.B. Code: [AUSKLAPPEN] If x<-9.5 then pitch=pitch+90
Die Formel stimmt jetzt nicht, aber es muss doch solche Formeln geben (Ich bin auf der Suche). Es soll einfaches "Einfallswinkel gleich Ausfallswinkel" gelten und der Würfel bleibt auch Lokal. Danke für eure Hilfe weiterhin. *************EDIT********************* OK, ICH HAB DIE LÖSUNG: Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2
SetBuffer BackBuffer() SeedRnd MilliSecs() Global yaw_x_korrekt,yaw_z_korrekt Global kugel=CreateSphere() EntityColor kugel,255,0,0 ScaleEntity kugel,0.5,0.5,0.5 EntityFX kugel,1 TurnEntity kugel,-50,30,0 cube=CreateCube() EntityColor cube,0,127,255 ScaleEntity cube,10,10,10 EntityFX cube,17 EntityAlpha cube,0.3 cam=CreateCamera() PositionEntity cam,15,15,-15 PointEntity cam,kugel Repeat Kugelbewegen() ; PointEntity cam,kugel Cls RenderWorld Flip Until KeyHit(1) End Function Kugelbewegen() x#=EntityX(Kugel) y#=EntityY(Kugel) z#=EntityZ(Kugel) pitch#=EntityPitch#(Kugel) yaw#=EntityYaw#(Kugel) If x>-9.5 And x<9.5 Then yaw_x_korrekt=0 If z>-9.5 And z<9.5 Then yaw_z_korrekt=0 If yaw_x_korrekt=0 Then If x<-9.5 Or x>9.5 Then yaw=-yaw : yaw_x_korrekt=1 If yaw_z_korrekt=0 Then If z<-9.5 Or z>9.5 Then yaw=180-yaw : yaw_z_korrekt=1 If y<-9.5 Or y>9.5 Then pitch=-pitch RotateEntity kugel,pitch,yaw,0 MoveEntity Kugel,0,0,0.4 End Function Das wichtigste ist die Funktion Kugelbewegen() !! So, danke, ich glaub, das war's. THX |
||
Quod est faciendum? Nescio! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group