camera und collision

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

chi

Betreff: camera und collision

BeitragDo, Aug 24, 2006 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
kann mir mal bitte jemand weiterhelfen? heul...

wie bekomme ich es hin, daß meine playercam 1.6m höhe hat und auch noch durch türen passt die 2m hoch sind.)? ich verwende einen pivot und eine cam, wobei der pivot eine höhe von 1.6 hat (entityradius cam,0.1,1.6). jetzt ist aber die tatsächliche cam-höhe nur 0.8 ;-( und wenn ich den radius 2x so groß mache, stoß ich natürlich an der türe an und komme nicht durch, aber die camerahöhe würde passen. hat jemand einen rat für mich?

danke, chi
 

Ava

Gast

BeitragDo, Aug 24, 2006 16:24
Antworten mit Zitat
Hallöchens,

ich hab jetzt laaange nichts mehr mit B3D gemacht, aber wie wäre es mit einer Box-Kollision?

+ Ava +

StepTiger

BeitragDo, Aug 24, 2006 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
wie wäre es denn, den pivot radius auf 1.6 zu machen und den camradius auf .1

du musst sie ja nur auf pivoty+1.6 setzen
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

chi

BeitragDo, Aug 24, 2006 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
hab ich leider auch schon erfolglos probiert... mit entitybox komm ich nicht mal in die nähe der tür. trotzdem danke für deine antwort
 

antome

!!! gesperrt !!!

BeitragDo, Aug 24, 2006 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ein kleines Beispiel, meinst du sowas, die höhe kann man
bei MoveEntity cam......
einstellen

Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2
                 

piv = CreatePivot()
cam = CreateCamera(piv) 
MoveEntity cam,0,2,0      ;hier die Höhe einstellen
EntityRadius piv,0.8

EntityType piv,2
 

pl = CreatePlane() 
EntityColor pl,200,100,200
MoveEntity pl,0,-1,0   
EntityType pl,1
c1 = CreateCube()
MoveEntity c1,1,0,5 
EntityColor c1,100,100,200   
EntityType c1,1
c2 = CreateCube()
MoveEntity c2,4,0,5 
EntityColor c2,200,100,100   
EntityType c2,1



While Not KeyDown(1) 
   mxs# = 0-MouseXSpeed()/4.0      
   TurnEntity piv,0,mxs#,0
   mys#=MouseYSpeed()/4.0
   MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
   TurnEntity cam,mys,0,0
   
   If MouseDown(2) Then MoveEntity piv,0,-0.01,0.25
   
   Collisions 2,1,2,2
   UpdateWorld
   RenderWorld
   Flip
Wend
antome

Fuchsi

BeitragDo, Aug 24, 2006 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Du setzt einfach den Y-Radius der Kamera hoch und den X-Radius klein.

Code: [AUSKLAPPEN]

EntityRadius camera,1,2

StepTiger

BeitragDo, Aug 24, 2006 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
???

genau das hat er doch beschrieben!

wenn er den radius hoch setzt kommt er nicht unter den türen durch.
niedrig ist er zu nah am boden

@antome
Der code nicht ein bissl lang?
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

chi

BeitragDo, Aug 24, 2006 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
... und wenn ich entityradius camera,1,2 habe dann fällt die camera immer auf die hälft der höhe also 1 runter. wenn die höhe des radius 4 beträgt ist die camerahöhe zwar richtig, die collision ist aber zu hoch um durch die tür zu passen. kann man nicht irgendwie den basepivot vom center verschieben?

danke,chi

(ich weiß is ziemlich konfus was ich da schreibe Embarassed )

StepTiger

BeitragDo, Aug 24, 2006 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso sollte man auch die cam als pivot nutzen?

wenn die cam nen pivot hat dann einfach via:
Translateentity cam,0,1.6,0
verschieben!

wenn du die cam als pivot nutzt, dann wird es eh nie was richtiges
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

chi

BeitragFr, Aug 25, 2006 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ich poste einfach mal den ganzen code. das modell findet ihr hier: http://lunamedia.heim.at/playground.zip

ich muss dazusagen, ich arbeite erst seit 2 wochen mit b3d und bei meiner alten engine hats ne vordefinierten cam gegeben...

Code: [AUSKLAPPEN]

global width=800
global height=500
Global mousespeed#=0.22
Global camerasmoothness#=5.0

Graphics3D width,height,0,2
SetBuffer BackBuffer()
hidepointer
MoveMouse width/2,height/2

player=Createsphere()
 PositionEntity player,0,1.5,-3
 EntityRadius player,.2,1.5      ;richtige camhöhe!
;EntityRadius player,.2,1        ;richtige collision!
 EntityType player,1

camera=CreateCamera(player)
 CameraRange camera,.1,200
 cameraclscolor camera,250,250,245

Global map=LoadMesh("playground.b3d")
 EntityType map,2
 Collisions 1,2,2,2

walksnd=loadsound("footstep.wav")
 SoundVolume walksnd,.1

head_bang_X#=0.015
head_bang_Y#=0.013

Collisions 1,2,2,2

While Not KeyHit(1)
 cls

 if mousedown(1) then shoe_size#=3.6:sp#=.02 else shoe_size#=3.0:sp#=.01
 

 mxs#=CurveValue(MouseXSpeed()*mousespeed,mxs,camerasmoothness)
 mys#=CurveValue(MouseYSpeed()*mousespeed,mys,camerasmoothness)
 MoveMouse width/2,height/2
 camxa#=camxa-mxs Mod 360
 camya#=camya+mys
 If camya<-89 Then camya=-89
 If camya>89 Then camya=89
 RotateEntity player,0,camxa,0
 RotateEntity camera,camya,0,0
 MoveEntity player,0,-.05,0

 walking=0
 If KeyDown(203) Then: MoveEntity player,-sp,0,0 : walking=1: EndIf
 If KeyDown(205) Then: MoveEntity player, sp,0,0 : walking=1: EndIf
 If KeyDown(200) Then: MoveEntity player,0,0, sp : walking=1: EndIf
 If KeyDown(208) Then: MoveEntity player,0,0,-sp : walking=1: EndIf


 If walking=1
  a1#=(a1#+shoe_size) Mod 360
 EndIf
 PositionEntity camera,Cos(a1#)*head_bang_X#,Sin(90+a1#*2)*head_bang_Y#,0,0

 UpdateWorld
 RenderWorld


 If Sin(90+a1*2)<-.85
  If  footstep_needed<>0
   Color 255,255,255
   playsound walksnd
   footstep_needed=0
  EndIf
 Else
  footstep_needed=1
 EndIf
 color 120,120,120
 text 10,10,"Pfeiltasten = gehen, LMaus = rennen"
 VWait
 Flip 0
 delay 1
Wend
clearworld()
End



Function CurveValue#(newvalue#,oldvalue#,increments )

If increments>1 oldvalue#=oldvalue#-(oldvalue#-newvalue#)/increments
If increments<=1 oldvalue=newvalue
Return oldvalue#

End Function


Question
 

Ava

Gast

BeitragFr, Aug 25, 2006 10:25
Antworten mit Zitat
Code: [AUSKLAPPEN]
player=Createsphere()
 PositionEntity player,0,1.5,-3
 EntityRadius player,.2,1
 EntityType player,1

camera=CreateCamera(player)
 CameraRange camera,.1,200
 TranslateEntity camera, 0, 0.5, 0
 cameraclscolor camera,250,250,245
 

chi

BeitragFr, Aug 25, 2006 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
TranslateEntiy verändert bei mir leider auch nix... komm einfach nicht durch die tuer durch wenn die kamera in augenhöhe ist... aber danke
 

antome

!!! gesperrt !!!

BeitragFr, Aug 25, 2006 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe gerade mal dein Beispiel genommen statt des Playground Mesh ein Plane gemacht und 3 Cubes so zusammengestellt das sie in deinem Beispiel eine Tür von 2.0 Höhe / Durchlass ergeben und der Player kommt prima durch.
antome
 

chi

BeitragFr, Aug 25, 2006 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo antome, das problem bei deiner variante ist, dass ich noch wände mit collision habe. und spätesten bei denen würde der player dann anstossen.
jedenfalls danke für deine/eure geduld mit mir Wink

ich hab mal ein kleines bild zusammengestellt mit meinem problem...

abb.1) EntityRadius player, 0.2 , 1 ergib 2m höhe - die cam ist aber beim mittelpunkt also 1m über dem boden -> zu tief aber ich komme durch die tuer
abb.2) EntityRadius player, 0.2 , 1.5 ergibt 3m höhe - cam ist auf richtiger augenhöhe nur ist die collision jetzt zu hoch um durch die tür zu passen
abb.3) wäre der idealfall. EntityRadius wäre genau so gross wie ein mensch somit optimale collision und die cam wäre richtig positioniert!

wie schaffe ich es einen EntityRadius wie in abb.3 zu bekommen also mit versetztem mittelpunkt?

user posted image
 

antome

!!! gesperrt !!!

BeitragFr, Aug 25, 2006 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch mal mit MoveEntity Camera,0,ywert Plus oder minus,0
antome
 

chi

BeitragFr, Aug 25, 2006 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
geht leider auch nicht. durch die fakegravitation MoveEntity player,0,-.05,0 ziehts den player immer auf die eingerichtete radiushöhe
 

antome

!!! gesperrt !!!

BeitragFr, Aug 25, 2006 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber cam ist doch ein Child von player, das kann man unabhängig davon auf die richtige höhe setzen
antome
 

chi

BeitragFr, Aug 25, 2006 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
gewusst wie? ich hab keinen plan mehr! leider. hab die letzten paar tage nur nach diesem problem im inet gesucht und nix gefunden (((
 

antome

!!! gesperrt !!!

BeitragSa, Aug 26, 2006 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Frage: muss dein Player eine Sphere sein ? Wenn nein, dann versuch mal einen Pivot statt ner Sphere zu nehmen, evtl. multipliziert sich die Größe der Sphere mit EntityRadius
antome
 

Dreamora

BeitragSa, Aug 26, 2006 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls du Avas code genommen hast:
Code: [AUSKLAPPEN]
camera=CreateCamera(player)
 CameraRange camera,.1,200
 TranslateEntity camera, 0, 0.5, 0
 cameraclscolor camera,250,250,245


müsste +- zu

Code: [AUSKLAPPEN]
camera=CreateCamera(player)
 CameraRange camera,.1,200
 PositionEntity camera, 0, 0.75, 0
 cameraclscolor camera,250,250,245


werden.
Damit hast du eine Höhe in etwa 3/4 über dem Kugelmittelpunkt, falls diese einen Radius von 1 hat.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group