Zittern 3dObjekte
Übersicht

primeroBetreff: Zittern 3dObjekte |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi
Folgendes Problem habe ich derzeit: wenn ich die Kamera an ein Objekt binde (child funktion) und dieses Objekt dann bewege beginnt es zu ruckeln. sobald die Kamera aber gelöst ist ist das Ruckel fort. es geht im Grund um den Code Code: [AUSKLAPPEN] Global timer
Global kugel Global kamera Graphics3D 1024,600,32,1 SetBuffer BackBuffer() SeedRnd MilliSecs() timer=CreateTimer(30) kugel=CreateSphere(64) ScaleMesh kugel,100000,100000,100000 kamera=CreateCamera(kugel) MoveEntity kamera,100010,0,0 CameraRange kamera,1,1000 WireFrame 1 While Not KeyHit(1) WaitTimer(timer) TurnEntity kugel,0.0001,0,0 MoveMouse 300,300 TurnEntity kamera,0,-MouseXSpeed(),0 TurnEntity kamera,MouseYSpeed(),0,0 If KeyDown(31) Then MoveEntity kamera,0,0,-10 If KeyDown(17) Then MoveEntity kamera,0,0,10 UpdateWorld RenderWorld Flip Wend End woran liegtdies und wie kann man es abschalten\umgehen? |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke mal, das liegt an deinen riesigen Dimensionen, also die Größe der Kugel, bzw. die Position der Kamera. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
primero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke
hab es ja befürchtet. Nun ja, muss ich mir was überlegen wie es zu umgehen ist. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jap, das liegt an den großen Dimensionen. Da dann eine ungenauigkeit bei den Floats entsteht.
Ist ja auch klar, es geht nicht eine Float Zahl wie 100000.4234532 darzustellen. Je größer ein Float wird, desto mehr Nachkommastellen gehen eben verloren. 0.00006 lässt sich noch gut darstellen, während 10000.00006 einfach nichtmehr geht. In 4 Bytes kann man eben nicht alles reinpacken. Da ist es ganz klar, dass die Kamera nicht korrekt positioniert wird. Code: [AUSKLAPPEN] Nun ja, muss ich mir was überlegen wie es zu umgehen ist.
Eventuell solltest du einfach alles kleiner Skalieren? |
||
Twitter
Download Jewel Snake! Windows|Android |
primero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nun, die Floatwerte usw. sind schon klar. darum habe ich im eig. Programm einen Punkt erstellt und an den die Kamera gebunden.
nun sollte man annehmen dass eine xentfernung zu dem Punkt relativ egal ist wenn man diesen eben nur um die x Achse dreht, sprich im endefeckt die Kamera um sich selbst. wenn die Kamera an den Punkt gebunden ist (der zugleich der Mittelpunkt der Kugel darstelt) zittert die Kugel bei der drehung. ist die Kamera getrennt -sprich dreht sich nicht mit, bewegt sich die Kugel problemlos. Code: [AUSKLAPPEN] ... punkt=createpivot() kugel=CreateSphere(64,punkt) ScaleMesh kugel,100000,100000,100000 kamera=CreateCamera(punkt) ... TurnEntity punkt,0.0001,0,0 ... womit die Kamera unabhängig von der Kugel gedreht wird (tehoretisch, praktisch werden beide durch den selben Punkt gedreht) Da es jeweils die x-Achse ist sollte die Entfernung keine Rolle Spielen. Ich vermute jedoch dass aufgrund der Größe der Kugel die Kamera zu nahe am Objekt ist. ansonsten kann ich mir das Ruckeln nicht erklähren. EDIT: letztlich beibt effect und wohl Uhrsache gleich, darum habe ich im Beispielprogramm im ersten Beitrag den Punkt nicht erstellt Die Größe ist zwingend vorgegeben, andernfalls muss ich andere Objekte eben kleiner skalieren was den Effect aufhebt. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ...
punkt=createpivot() kugel=CreateSphere(64,punkt) ScaleMesh kugel,100000,100000,100000 kamera=CreateCamera(punkt) MoveEntity kamera,100010,0,0 ... TurnEntity punkt,0.0001,0,0 ... Die Kamera dreht sich nicht um sich selbst, sondern um den punkt. Die Entfernung kannst du nicht so einfach wegnehmen. Die Kamera rotiert nicht nur, sondern wird durch die Rotation des Mittelpunktes auch jede Schleife anders Positioniert. Schau dir das mal an: Code: [AUSKLAPPEN] Graphics3D 640, 480, 0, 2
SetBuffer BackBuffer() camera = CreateCamera() light = CreateLight(1) RotateEntity light, 90, 0, 0 planet = CreateSphere(8) EntityColor planet, 200, 200, 250 PositionEntity planet, 0, 0, 5 RotateEntity planet, 10, 10, 10 moon1 = CreateSphere(8) EntityParent moon1, planet, 0 ScaleEntity moon1, .2, .2, .2 MoveEntity moon1, 0, 0, 2 moon2 = CreateSphere(8) EntityParent moon2, planet, 0 ScaleEntity moon2, .4, .4, .4 MoveEntity moon2, 0, 0, - 3 While Not KeyDown(1) TurnEntity planet, 0, 1, 0 RenderWorld Flip Wend End Deine Kamera macht im Prinzip das gleiche wie diese Monde. |
||
Twitter
Download Jewel Snake! Windows|Android |
primero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nicht ganz.
Habe mal den Punkt direkt an die Kameraposition gesetzt und dann die kamera mit der selben umdrehungsgeschwindigkeit wie die Kugel gedreht Code: [AUSKLAPPEN] punkt=createpivot() kamera=createkamera(punkt) moveentity punkt, "oberkantekugel" ... turnentity kugel,0.01,0,0 turnentity punkt,0.01,0,0 ... Gleichbleibende Kugelgröße usw. Effekt: Gitter der Kugel zittert wenn die kamera ein child des Punktes ist, zittert nicht und dreht sich geschmeidig wenn die kamera kein child ist. Die Kamera dreht sich im Grund so wie die Monde wenn du sie so drehen lässt: Code: [AUSKLAPPEN] ... TurnEntity planet, 0, 0, 1 ... Das Problem besteht so weit ich es bisher raus habe mehr in der relativen nähe zur Kugel im Verhältniss zu ihrer Größe. meint: G=größe E=Entfernung Kugel-Kamera E\G= 1.0001 -> zittern E\G=1.5 -> kein Zittern bzw. nicht mehr sichtbar d.h. da ich die Kamera bei einer kleinerne Kugel näher ranlegen müsste ist die Idee in der momentanen Form wohl gestorben. Zumindest bis ich einen Ausweg gefunden hab^^. Aber danke für die raschen Antworten. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was willst du eigentlich genau machen? Es gibt eigentlich immer irgendwelche Alternativen. | ||
Twitter
Download Jewel Snake! Windows|Android |
primero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Grundgedanke ist ein Planetenmodell. daher auch die zwingende Größenvorgabe der Kugel - Planet im Verhältniss zu den jeweiligen objekten darauf.
dreht sich die Kamera nicht mit würde der Planet sich unter ihr einfach "durchdrehen" was den Effect des "sich darauf befinden" zerstört. |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt soweit ich weiß keine Möglichkeit mit normalen Grafikengines ein reales Größenverhältnis bei einem Planetensystem, geschweige denn einem einzelnen Planeten, darzustellen. Dafür rechnen Computer in realtime 3D viel zu ungenau | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group