Einfache Steuerung eines Objektes im Dreidimensionale Raum

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

BB-Fan

Betreff: Einfache Steuerung eines Objektes im Dreidimensionale Raum

BeitragMo, Okt 29, 2007 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe eine Spielfigur und einen Level.

Diese möchte ich wie bei einem ego shooter bewegen.

Also links und rechts und nach vorn und hinten ist klar, wenn man von oben schaut.

Aber wie macht man das, dass man mit der kamera hinter der figur steht und dann relativ zur position der spielfigur sich bewegen kann.

Da ja dann x,y,z nicht mit den globalen positionen übereinstimmen.

Wäre für ein paar Denkanstösse sehr dankbar, oder vielleicht sogar eine Lösung.


Achja, geht das auch ohne winkelfunktionen? weil das is so bisschen meine schwäche.

Und wenn doch, kann mir das dann einer gut erklären, bitte, bitte.

Und bitte nich schimpfen dass ich gefragt hab, okay.

Danke euch allen.

ZaP

BeitragMo, Okt 29, 2007 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Indem du die Kamera als Child des Spielers deklarierst, müsste das gehen.

Code: [AUSKLAPPEN]

  figur = loadmesh("..")
  c = CreateCamera(figur) ;in die Klammern kommt das Parent-objekt
Starfare: Worklog, Website (download)
 

BB-Fan

BeitragMo, Okt 29, 2007 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
ja schon klar, aber wie steuer ich die figur/camera wie auch immer.

bisher hab ich es nur mit den cursortasten und if ... then x=x+1 usw gemacht.

damit kann man die figur auf den globalen koordinaten wunderbar steuern, aber ich brauch die steuerung relativ zur eigenen position/richtung.

also stell dir vor, ich will mit einem auto durch den level fahren.

wie mach ich das?

Tankbuster

BeitragMo, Okt 29, 2007 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm mit MoveEntity Wink
Das kommt ehr in Beginners, und nicht in 3D
Twitter
Download Jewel Snake!
Windows|Android
 

Dreamora

BeitragMo, Okt 29, 2007 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Und darum gemoved.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BB-Fan

BeitragMo, Okt 29, 2007 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Moveentity verschiebt das objekt um werte von x, y, z zur aktuellen position.

wie wende ich das praktisch an?

da ja der level nicht nur eine gerade fläche ist, sondern das objekt soll ja sozusagen durch den level "fahren" und bei kollisions stoppen.

und nun, beim um die kurve fahren, bzw. beim lenken soll es sich auch in die richtung drehen, und dann ist vorn auch immer dort, wo halt beim fahrzeug vorn ist.


translateentity vielleicht.

kann mir nicht jemand dabei helfen.

ein bisschen code wäre super, oder wenigstens erklären wie man sowas theoretisch machen könnte, die passenden befehle such ich mir dann selber bzw. die umsetzung dazu.

bitte, wäre echt lieb.

Tankbuster

BeitragMo, Okt 29, 2007 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Moveentity lässt das Objekt nach vorne fahren^^
Also egal wie du es drehst, es fährt immer nach VORNE. Also wenn du ein Auto hast, wird es immer nach vorne Fahren (wenn du den Befehl richtig anwendest). Egal wie es sich dreht und verschiebt. Vorne ist immer da, wo die Frontscheinwerfer sind^^
Teste damit mal ein bisschen rum Wink

Drehen geht mit TurnEntity.

Les dir am besten die Command Reference bzw die OnlineHilfe durch Wink Da ist jeder Befehl erklärt..

Zitat:
da ja der level nicht nur eine gerade fläche ist, sondern das objekt soll ja sozusagen durch den level "fahren" und bei kollisions stoppen.

Das wird der schwerste Teil, fürchte ich;)
Da musst du mit Collisions und EntityType arbeiten

EDIT: HIER EIN KLEINES CODEBEISPIEL =)
Code: [AUSKLAPPEN]
Graphics3D 640,480
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
RotateEntity light,90,0,0
cube=CreateCube()
PositionEntity cube,2,-5,14

While Not KeyHit(1)
a1=(a1+1) Mod 720
a2=(a2+5) Mod 360
RotateEntity cube,a1/2,0,a2
MoveEntity cube,.5,0,0
RenderWorld
Flip
Wend
End
Twitter
Download Jewel Snake!
Windows|Android
  • Zuletzt bearbeitet von Tankbuster am Mo, Okt 29, 2007 16:33, insgesamt einmal bearbeitet
 

BB-Fan

BeitragMo, Okt 29, 2007 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
für den anfang wär ich froh die steuerung hinzubekommen.

Tankbuster

BeitragMo, Okt 29, 2007 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hoffe der Code hilft, sonst PM mich und ich schick dir einen besseren Code. Der oben ist aus der OnlineHilfe Laughing *faulsei*
Twitter
Download Jewel Snake!
Windows|Android
 

BB-Fan

BeitragMo, Okt 29, 2007 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
also mit rotateentity dreh ich das objekt und die relativen achsen drehen sich mit.

daher ist bei moveentity vorn auch immer die richtung, wo die nase vorn ist, sozusagen, richtig?


was hat mod 720 und 360 zu bedeuten?

Tankbuster

BeitragMo, Okt 29, 2007 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
daher ist bei moveentity vorn auch immer die richtung, wo die nase vorn ist, sozusagen, richtig?

Jo Genau!

rotateentity würde ich zum "lenken" nicht nehmen, sondern TurnEntity.
Das ist im Prinzip so ähnlich wie MoveEntity. Also wenn du nach rechts lenken willst, dreht sich das Entity immer rechtsrum. Es ist nicht von den Globalen Achsen abhängig Wink
Twitter
Download Jewel Snake!
Windows|Android

The_Nici

BeitragMo, Okt 29, 2007 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@BB-Fan: MOD ermittelt den Restwert von einer Division. In diesem Fall 720/360

BladeRunner

Moderator

BeitragMo, Okt 29, 2007 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wert mod 720 macht Wert durch 720 und gibt den Rest aus.

Also zB:
761 mod 720 = 41
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

X-tra

BeitragMo, Okt 29, 2007 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist aber eher subtraktion oder?

The_Nici

BeitragMo, Okt 29, 2007 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm...nein? Ist 40 MOD 3 = 40-3? Nein. 40 MOD 3 würde 1 geben. (40/3=13 Rest 1)

Eingeproggt

BeitragMo, Okt 29, 2007 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
vlt wirds dadurch klarer:
1481 Mod 720=41

Also es wird subtrahiert, aber eben

Code: [AUSKLAPPEN]
Zahl-Int(Zahl/Teiler)*Teiler
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

D2006

Administrator

BeitragMo, Okt 29, 2007 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie man es häufig verwendet, so auch hier:

Code: [AUSKLAPPEN]
a = (a+1) Mod 360


sorgt dafür, dass a immer zwischen 0 und 359 ist. Denn 360 Mod 360 ist 0 und dann fängts wieder von vorne an. Das geht so aber nicht, wenn a negativ ist.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

BB-Fan

BeitragMo, Okt 29, 2007 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay alles verstanden.

Habs jetzt sogar hinbekommen die steuerung.

Nur mit der camera das klappt nicht so.

Im moment hab ich die camera eigentlich einfach nur hinter das Objekt plaziert und es bewegt sich halt synchron mit, also auch bei einer rotation, was ja eigentlich völliger Quatsch ist.

Wie macht man sowas am günstigsten?

Also Objekt1 ist das Raumschiff oder wasauchimmer, und die Kamera hängt hintendran.

Wenn ich jetzt Objekt1 drehe, dreht sich die Kamera mit, aber der Blickwinkel haut nicht hin.

Also theoretisch reicht eine mitdrehung nicht aus, sondern die kamera müsste sich direkt hinten dran hängen.

Also starr sozusagen.

So, und damit ich nicht alles erfragen muss, hab ich mal geschaut.

Kommt da Pivot in Frage?

Wenn ja, wie mach ich das.

Nur einen Pivot kreieren, dann beim laden des Objekt mit dranhängen, und dann?

Wie lass es das ganze praktisch aussehen, seh da nicht wirklich durch, weil ja das pivot egentlich das objekt sein müsste und die kamera dranhängt.


So, jetzt bin ich total durcheinander.
Mist

Tankbuster

BeitragMo, Okt 29, 2007 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach nur ein Befehl :
Zitat:
EntityParent Wink
Twitter
Download Jewel Snake!
Windows|Android
 

BB-Fan

BeitragMo, Okt 29, 2007 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
aha, und der hängt dann das child starr hinten dran, werd ich später gleich probieren

hab jetzt einfach mal entityparent probiert, klappt auch, nur dass jetzt das objekt nicht mehr zu sehen ist, nur noch die camera.

hat das jetzt die gleichen koordinaten.

soll da jetzt nochmal ein move mit rein, um nen abstad zu haben?

aber das geht sicher einfacher, oder?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group