IrrLicht3D , Node ausrichten

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

IrrLicht3D , Node ausrichten

Beitrag von tft »

Hallo ...

weis einer wie ich mit Irrlicht eine SceneNode auf einen punkt im 3D Raum ausrichten kann?

MfG TFT
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Beitrag von Max_der_Held »

hm.. bei OPEN Gl hats mal nen befehl gegeben, der die camera dreht... wenn man des umschreibt, könnte man die entstehende formel zum drehen vom OBjekt hernehmen.. viel spaß :ironie:

Code: Alles auswählen

piover180.f = (ATan(1)*4)/180 

gluLookAt__(-CameraX, -CameraY, -CameraZ, -(CameraX + Sin(CamrotY*piover180)*10), 0, -(CameraZ + Cos(CamrotY*piover180)*10)+1, 0.0, 1.0, 0.0)
beschreibung des befehls (alles aus nem opengl tutorial):
  • ; Mit gluLookAt definieren wir den Standort der Sicht. Die ersten drei Parameter sind die Position. Die zweiten drei ist die GuckPOSITION. Die dritten sind der UpVektor(fast immer 0.0, 1.0, 0.0)
mfg, max
  • [EDIT] wenn du's mal irgendwie rauskriegst, dann postes bitte.. ich such sowas auch, eigentlich (laser-schuss-mesh in schussrichtung ausrichten)
    [/edit]
Zuletzt geändert von Max_der_Held am 29.12.2007 22:01, insgesamt 1-mal geändert.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hi ...

danke für die Antwort... leider blicke ich da nicht durch .... mal sehen was ich draus machen kann.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Hier ne C++ Funktion - siehst mal die Mathe dahinter. Baue die noch ein ( einfachheitshalber ).... Aber irgendwo hatte ich das schon mal beantwortet hier... puh scheissgrippe .. immernoch schlepp ich die rum.

Code: Alles auswählen

; void faceTarget(irr::core::vector3df targetPos) {
;   core::vector3df nodePos = targetPos - myNode->getPosition();
;   myRotation.Y = ATan(nodePos.Z/nodePos.X) * (180.0f / irr::core::PI);
;   If((targetPos.X - myNode->getPosition().X) > 0) {
;     myRotation.Y = 90 - myRotation.Y;
;   } Else If((targetPos.X - myNode->getPosition().X) < 0) {
;     myRotation.Y = -90 - myRotation.Y;
;   }
;   myRotation.Y -= 90;
;   myNode->setRotation(myRotation);
; }
vector3df = vector 3d float
resp. ( findest du im include file )

Code: Alles auswählen

Structure IRR_VECTOR
    x.f
    y.f
    z.f
EndStructure
Damit sollts eigentlich einfach sein.
Neue Version wird noch n Command dazu kommen ( Geplant ist auch ein "Newbie" set das DarkBASIC alike simple ist... - aber erst mal muss ich etwas feddich kriegen - typisch widermal an 10 sachen dran hier :)

Falls partu ned weiterkommst schreib ichs um die Tage mal...

Thalius
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
SirCus
Beiträge: 182
Registriert: 10.09.2004 11:44
Wohnort: München
Kontaktdaten:

Beitrag von SirCus »

gibts da nich schon ne Funktion? Hab da was in erinnerung. In der Hilfe war als Beispiel eine Rakete genannt, die sich aufs Ziel ausrichtet.. hab grad Irrlicht nich hier..
2D Game H.E.R.A. (Entwicklung eingefroren)
www.chamaeleo-fx.de.vu

- mein Lieblingszitat
"die Informationsumwelt wird von einer fürchterlichen Menge an Unsinn und Lügen verschmutzt" (Stanislaw Lem, Lokaltermin, 1954 (!) )
http://www.stanislaw-lem.de/zitate/zitate.shtml
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Yup für den Pitch:


** schnipp **
// Especially wanted from Xperience2003
// Usefull for all out there
// Author : Xaron

/**
* @brief guided missile steering helper function
*
* @param missilePosition - current absolute position of the missile
* @param missileRotation - current absolute rotation of the missile
* @param targetPosition - current absolute target position
* @param oversteer - oversteer factor in degrees
*
* @return targetPitchRoll - delta pitch (x) and delta roll (z) values to the target
*

Code: Alles auswählen


NAME
    IrrGetToTargetPitchRoll - 
 SYNOPSIS
   IrrGetToTargetPitchRoll(*sourceNode.l, *targetNode.l, *x.f, *y.f, *z.f)
 INPUTS
   *sourceNode.l     - pointer to a Scene Node that act as Source (maybe the Rocket)
   *targetNode.l     - pointer to a Scene Node to point at (maybe a enemy)
   *x.f,*y.f,*z.f    - targetPitchRoll : delta pitch (x) and delta roll (z) values to the target
 FUNCTION
   guided missile steering helper function
 EXAMPLE
   IrrGetToTargetPitchRoll(*rocketNode,*destinationNode, @x.f,@y.f,@z.f )
 RESULT
   nothing
 NOTES
   This wraps a Method, found in the Irrlicht-Forum
   Author of the Method is : Xaron
** schnapp **

Thalius
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Und die C++ Funktion übersetzt:

IrrFaceTargetNode()

Siehe hier:
http://www.purebasic.fr/english/viewtopic.php?t=30500

Thalius
"...smoking hash-tables until until you run out of memory." :P
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Beitrag von D4uS1 »

Wenn ich das richtig vertsehe willst du das das Objekt in eine richtige Richtung schaut. Am besten du löst das ganze mit trigonometrie [cos, tan, sin] ( mach ich auch immer so ).

Bsp.

Code: Alles auswählen

Procedure.f Objektneigung(Bahn.f, StreckeX.f, StreckeY.f, StreckeZ.f, Achse.b)

 If Achse = #ACHSE_X
  
 ElseIf Achse = #ACHSE_Y
  If StreckeZ < 0
   ProcedureReturn (ACos(StreckeX/Bahn)*360)/(2*#PI)
  Else
   ProcedureReturn 360-(ACos(StreckeX/Bahn)*360)/(2*#PI)
  EndIf
 ElseIf Achse = #ACHSE_Z
  
 EndIf
 
EndProcedure
Du musst die dementsprechenden Befehle für die anderen Achsen ergänzen, ich weiß ja nicht in welche Richtung dein Objekt standardmäßig schaut. Das hier ist nur ein Beispiel.

Bahn ist die Bahnegschwindigkeit, also im Grunde die Hypothenuse.

Und gib Acht, PB benutzt in Sachen Winkelberechnungen das Bogenmaß und Irrlicht das Gradmaß, man muss erst umrechnen.


lg
Andreas
Solltet ihr Rechtschreibfehler finden, dürft ihr diese natürlich gerne behalten ;).
Antworten