Anpussung eines Entitys an einem 3ds-Objekt

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

BlackZero

Betreff: Anpussung eines Entitys an einem 3ds-Objekt

BeitragDi, Aug 29, 2006 3:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich bin dabei ein kleines Rennspiel zu programmieren und zerreis mir die Harre daran wie ich es am besten hinbekomme, das auto an eine Strecke anzupassen die höhen und tiefen besitzt, d.h. eine Strecke mit auf und abfahrten (Berge etc.)
So nun nach sehr sehr langem Suchen bin ich auf ein Quellcode gestoßen
der eigentlich genau das kann was ich brauche, aber leider nur mit Terrains arbeiten kann, d.h. nicht mit 3ds Objekten.
Ich habe verzweifelt versucht den Code umzuschreiben, aber es klappt einfach nicht.

Habt ihr vielleicht eine Idee wie man den unteren Quellcode ändern müsste damit er auf Entitys reagiert und nicht auf Terrains ? Ich denke das ich nur was in der Hauptschleife ändern müsste oder lieg ich da falsch ?

Ich denke dies hier könnte wichtig sein weil sich bei diesem code das auto an das terrain anpasst, jedoch nicht an meine 3ds strecke

frontheight# = TerrainY(terrain,xnew,y,znew); get the height at new x,y,z

man beachte jetzt nicht den ganzen kamera kram usw. ich möchte lediglich den Code so umändern das er auf Entitys funktioniert und nicht auf Terrains.
naja gut, hier nun der komplette code:

Code: [AUSKLAPPEN]
; ID: 67
; Author: MadJack
; Date: 2001-10-02 08:24:21
; Title: Vehicle pitch and roll without child/pivot entities
; Description: Looks at a mesh as a single object on a terrain and calculates the pitch and roll

; my car test - Phil Jones
; a look at calculating vehicle pitch and roll (on a terrain) without
; child/pivot entities

;set up screen,light & camera
Graphics3D 800,600,16
SetBuffer BackBuffer()
light = CreateLight(1)

;create terrain
terrain = LoadTerrain("heightmap_256.bmp")
TerrainDetail terrain, 3000, True
ScaleEntity terrain, 50,1000,50
PositionEntity terrain,-200,0,-200
terraintex = LoadTexture("boden.bmp")

ScaleTexture terraintex,.4,.4
TerrainShading terrain,1
EntityTexture terrain,terraintex

strecke = LoadMesh("strecke2.3ds")
ScaleMesh strecke, 20,20,20
Const BODY = 1, REIFEN = 2, SZENE = 3
Collisions REIFEN, SZENE, 2, 3
EntityType strecke, SZENE

;create car/plane/tank whatever and centre it local co-ords
car = LoadMesh("kart.3ds")
ScaleMesh car,100,100,100
EntityType car, REIFEN

carlength# = MeshDepth#(car)/2 ; get length from centre to front of car
carwidth# = MeshWidth#(car)/2 ; get length from centre to left or right of car
carheight# = MeshHeight#(car)/2: ; get height from centre To top Or bottom of car
meshh = MeshHeight#(car)/2
FitMesh car, 0-carwidth,0,0-carlength,carwidth*2,carheight*2,carlength*2; just some general recentring to have car sit on plane

pitch# = 0
x# = 200
y# = 600
z# = 480
speed# = 0

frontheight#=0 ; height of terrain at midpoint front of vehicle
backheight#=0 ; height of terrain at midpoint back of vehicle
leftheight#=0 ; height of terrain at midpoint left side of vehicle
rightheight#=0 ; height of terrain at midpoint right side of vehicle
th# = 0 ; height of terrain at centre of vehicle (this will averaged from front/back/left/right)

PositionEntity car,x,y,z ; set up initial pos of car and camera
;RotateEntity car,0,180,0,1

;setup camera
camera = CreateCamera()
PositionEntity camera ,300,350,100
PointEntity camera ,car
CameraRange camera,1,900000


;MAIN LOOP +++++++++++++++++++++++++++++++++

While Not KeyHit(1)

; get current location and overall height of car
x# = EntityX (car)
z# = EntityZ (car)
y# = EntityY (car)

; check for keypress to alter car speed (A,Z)
speed = speed -.5*(KeyDown(208) And speed > -10 ) + .5*(KeyDown(200) And speed < 10 )

; check for keypress to turn car left/right
turn = (KeyDown(203)) - (KeyDown(205))
TurnEntity car,0,turn,0
yaw# = EntityYaw(car)



; CALCULATE PITCH/ROLL ++++++++++++++++++++++++++++++++
;work out terrainheights at front/back/left/right of car
anglenew# = yaw -90  ; what must be added to yaw to calculate front of vehicle's global x,z co-ords
xnew# = x+Cos(anglenew)*carlength
znew# = z+Sin(anglenew)*carlength
frontheight# = TerrainY(terrain,xnew,y,znew); get the height at new x,y,z

anglenew# = yaw +90 ; what must be added to yaw to calculate back of vehicle's global x,z co-ords
xnew# = x+Cos(anglenew)*carlength
znew# = z+Sin(anglenew)*carlength
backheight = TerrainY(terrain,xnew,y,znew)

anglenew# = yaw  ; what must be added to yaw to calculate midleft of vehicle's global x,z co-ords
xnew# = x+Cos(anglenew)*carwidth
znew# = z+Sin(anglenew)*carwidth
Leftheight = TerrainY(terrain,xnew,y,znew)

anglenew# = yaw + 180 ; what must be added to yaw to calculate midright of vehicle's global x,z co-ords
xnew# = x+Cos(anglenew)*carwidth
znew# = z+Sin(anglenew)*carwidth
rightheight = TerrainY(terrain,xnew,y,znew)

pitchx# = carlength*2 ; need complete length of car for x
pitchy# = (backheight - frontheight); the height dif between the front and rear of car
pitch = ATan2(pitchx,pitchy); atan2 will return the angle from 0,0 to x,y

rollx# = carwidth*2
rolly# = (rightheight - leftheight) ; the height dif between the left and right of car
roll# = ATan2(rollx,rolly); atan2 will return the angle from 0,0 to x,y

RotateEntity car, pitch-90,yaw,roll-90 ; rotate car with offsets to adjust Atan2's calculation

th=(frontheight+backheight+leftheight+rightheight)/4; get average of terrain heights for cars overall height
PositionEntity car,x,th,z ; adjust car height
MoveEntity car,0,0,speed

PositionEntity camera , x+400,y+300,z+200
PointEntity camera,car

UpdateWorld
RenderWorld
Flip

Wend
Stop




Wäre euch wirklich dankbar wenn Ihr eine Idee hättet, wie ich das anstelle

Danke im voraus

Sascha

Edit: Codetags zur Besseren Lesbarkeit ergänzt. Bitte in Zukunft selbst dran denken.
MfG
BladeRunner

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragDi, Aug 29, 2006 3:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du etwa so etwas hier?

https://www.blitzforum.de/foru...o+anpassen

MFG
Blitzmaker
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium
 

BlackZero

BeitragDi, Aug 29, 2006 3:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das habe ich auch schon gesehen,
das Problem bei dem Driver Spiel ist, wenn ich zb eine Strecke hochfahre mit einer Kurve dann rukkelt das ganze Auto, also ich denke das die 4 Räder (beim Driver beispiel sind es 4 unsichtbare kugeln) die an den Vertices hängenbleiben und das sieht echt scheisse aus und bekomme das auch nicht
so umgecodet das es nicht so rukkelhaft aussieht. Sagen wir mal so, ich bleibe fast hängen wenn ich wenige Poligone für die Kurve benutze.
Bei mir ist halt bei diesem Code den ich oben gepostet habe aufgefallen, das die Anpassung des Autos (egal was für ein gelände) flüssig und richtig
gut abläuft (sieht gut aus).
 

Penthouse Pauper

BeitragDi, Aug 29, 2006 10:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach das doch über das 3D-Programm mit einem neuen Surface, was du dann mit nem durchsichtigen Brush füllst...? Oder bin ich zu doof?
 

BlackZero

BeitragDi, Aug 29, 2006 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
nein zu blöd biste nicht,
aber bringen tut mir das garnichts, das sieht ja dann aus als würde das auto
an den kurven über die strecke fliegen Very Happy und das kann ja wohl kaum sinn der sache sein...
ich gebe euch mal den link wo ich diesen code gefunden habe.
es geht mir eigentlich nur darum, man muss doch anstatt "terrainy"
ne möglichkeit haben den code so umzuschreiben das er auf "EntityY+EntityX" reagiert oder liege ich da falsch ????

Bitte helft mir doch Rolling Eyes
 

BlackZero

BeitragDi, Aug 29, 2006 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ehhhmmm sorry hier der link Embarassed



http://www.blitzmax.com/codear...hp?code=67

BladeRunner

Moderator

BeitragDi, Aug 29, 2006 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte benutze den Edit-button. Danke.
Um das Ruckeln zu beheben sollte es ausreichen sein eine Art "Glattbügeln" einzubauen, d.h. Du merkst Dir vorhergehenden pitch , jaw und roll und addierst ihn partiell zum aktuellen Wert, somit wird die Bewegung ruhiger
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
 

BlackZero

BeitragMi, Aug 30, 2006 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Bitte benutze den Edit-button. Danke.
Um das Ruckeln zu beheben sollte es ausreichen sein eine Art "Glattbügeln" einzubauen, d.h. Du merkst Dir vorhergehenden pitch , jaw und roll und addierst ihn partiell zum aktuellen Wert, somit wird die Bewegung ruhiger


lol bin neu hier, was fürn edit button ?
ach ja, könntest du das ein bisschen genauer erklären ?
benutze das beispiel von "driver" aus dem samples ordner


OK sorry hab den button gefunden lol

D2006

Administrator

BeitragMi, Aug 30, 2006 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Unterhalb des Datums deines Postings. Das Icon mit dem Schraubenschlüssel.
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
 

BlackZero

BeitragMi, Aug 30, 2006 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
Unterhalb des Datums deines Postings. Das Icon mit dem Schraubenschlüssel.


ja hab ihn gefunden Wink

aber kann mir denn wirklich niemand helfen ??
ich möchte halt so ne art rennspiel machen wo man halt auch steilkurven etc. fährt.

hab soweit alles hinbekommen, lenkung, schwerkraft, schatten, beschleunigen, bremsen usw.. jetzt scheiterts echt nur noch daran das das auto flüssig steilkurven hochkommt "heul"

die "wheels" die beim driver spiel benutzt werden habe ich genommen, also die alpha spheres, aber die rukkeln sich halt einen ab wenn ich ne steilkurve hochfahre, weil die an den vectoren von der strecke hängenbleiben und nur ruckartig hochgleiten. wie könnte man diese den flüssiger hinbekommen, bzw das sich das auto vielleicht ein bisschen verzögert auf die spheres ausrichtet bzw. flüssiger.

Ansonsten wäre halt wie gesagt das obige beispiel für mich vollig ausreichend, wenn ich das auch auf entitys benutzen könnte nicht nur auf terrains
 

Dreamora

BeitragMi, Aug 30, 2006 7:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht eigentlich nur über richtigen physikalischen Einfluss in Form von 4 Federn welche das Auto mit den Rädern verbinden, so das die Räder auf den Untergrund reagieren können, zwischen Auto und Rädern jedoch ein Spielraum besteht.

ODE dürfte da sicher ein praktisches Instrument sein.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BlackZero

BeitragMi, Aug 30, 2006 7:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Das geht eigentlich nur über richtigen physikalischen Einfluss in Form von 4 Federn welche das Auto mit den Rädern verbinden, so das die Räder auf den Untergrund reagieren können, zwischen Auto und Rädern jedoch ein Spielraum besteht.

ODE dürfte da sicher ein praktisches Instrument sein.


Ja du hast es gesagt !
Das geht mir auch schon die ganze Zeit durch den Kopf...
Aber das mit den 4 Federn, genau das hab ich mir auch so
gedacht. Ich wollte eigentlich vermeiden nur wegen diesen
4 Federn eine Physik-Engine einzubauen, weil ich eigentlich
nur die Physik für das eine Auto brauche für nix anderes.

Naja habe mir jetzt mal Tokamak installiert und funktioniert auch
alles, nur ich habe keine Ahnung wie ich in Tokamak einsteigen soll.

Die ganzen Links usw.. auf diesem Forum sind Tot, vorallem
soll es ja so ein Tut gegeben haben für Tokamak auf deutsch ich glaub auf der seite www.makegame.de nur die gibts auch nicht mehr.

Was mach ich jetzt ??
Wie komm ich da jetzt rein ?

Und die Docs von Tokamak sind ja wohl mehr als schlecht, da sie gerade
mal die Befehle kurz und knapp beschreiben und nicht mal drinsteht wie man
überhaupt ertsmal anfängt HEUL

Ich wäre euch sehr dankbar wenn mir jemand hier Links oder Tutorials zu Tokamak posten könnte, vielleicht hat ja auch jemand von euch noch alte
Tutorials von den toten Seiten

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group