CameraViewport Problem (Terrain kollission geht nicht)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

BlackError

Betreff: CameraViewport Problem (Terrain kollission geht nicht)

BeitragMi, Sep 05, 2007 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

Habe eine kleine Insel mit wasser, Himmel und so gebastelt und wollte nun eine Minimap mit CameraViewport (2. Cam ist ganz weit über Map possitioniert) hinzugefügt.

Nun Kollidiert aber die Kamera nicht mehr mit dem Terrain (was vorher ging). Das Seltsame daran ist allerdings, dass die Kollission mit dem Boden bzw. Wasserbett wunderbar funktioniert Rolling Eyes

Hier mal die wichtigen Codeabschiniite:

Code: [AUSKLAPPEN]

Graphics3D 1440,900,32,1
SetBuffer BackBuffer()


;Position Cam
x# = 9546
y# = 172
z# = 10863


Cam = CreateCamera()
     PositionEntity Cam, x,y,z
     RotateEntity Cam, 0,3,0
     CameraRange Cam, 1,223^3

Cam_Map = CreateCamera()    [b]---->  CAMERA FÜR DIE MINIMAP[/b]
        TurnEntity Cam_Map, 90,0,0
        PositionEntity Cam_Map, 7785,12000,7635
        CameraRange Cam_Map, 1,12000
        CameraViewport Cam_Map, 1200,55,200,200

;-------------------
; Terrain + Himmel |
;__________________________________________________________

;Terrain + Textur
Terrain = LoadTerrain ("Terrain\Highmap.jpg")
ScaleEntity Terrain, 20,500,20
PositionEntity Terrain, -2562.5,0,-2562
TerrainShading Terrain, True
TerrainDetail Terrain, 3000, 1
EntityFX Terrain, 8

Tex_Terrain = LoadTexture ("gfx\Textur_Boden.jpg")
EntityTexture Terrain, Tex_Terrain

;Himmel + Textur
Himmel = CreateSphere(12)
ScaleEntity Himmel, 30000,30000,30000
EntityOrder Himmel, 1
FlipMesh Himmel
EntityAlpha Himmel, 0.25
EntityFX Himmel, 8

Tex_Himmel = LoadTexture ("gfx\Textur_Himmel.jpg")
ScaleTexture Tex_Himmel, 0.25,0.25
EntityTexture Himmel, Tex_Himmel

;Wasserbett
Wasserbett = CreatePlane()
MoveEntity Wasserbett, 0,0.8,0

Tex_Wasserbett = LoadTexture ("gfx\Textur_Boden.jpg")
ScaleTexture Tex_Wasserbett, 300,300
EntityTexture Wasserbett, Tex_Wasserbett

;Wasser
Wasser = CreatePlane()
PositionEntity Wasser, 0,18,0
EntityShininess Wasser, 1
EntityColor Wasser, 100,100,100

Tex_Wasser = LoadTexture ("gfx\Textur_Wasser.jpg", 2)
ScaleTexture Tex_Wasser, 300,300
EntityTexture Wasser, Tex_Wasser

EntityColor Wasser, 0,50,80
EntityAlpha Wasser, 0.8

I = I + 1

[b];Entitytype for Collision[/b]
EntityType Cam, 1
EntityType Terrain, 2
EntityType Wasserbett, 3

EntityRadius Cam, 70


Repeat


 TurnEntity Cam, 0,-MouseXSpeed()/2,0
 TurnEntity Cam, 0,+MouseXSpeed()/2,0

 MoveMouse 400,300

 If KeyDown(17) Then MoveEntity Cam, 0,0,+5
 If KeyDown(31) Then MoveEntity Cam, 0,0,-5
 If KeyDown(30) Then MoveEntity Cam, -5,0,0
 If KeyDown(32) Then MoveEntity Cam, +5,0,0

PositionEntity Map_Position, EntityX (Cam), 500, EntityZ (Cam)


;Wasserbewegung
 MoveEntity Wasser, Sin(I)/3,0,Cos(I)/2
 
 ;Größe der Minimap verändern
 If KeyDown(57)
  CameraViewport Cam_Map, 888,55,512,512
 Else
  CameraViewport Cam_Map, 1200,55,200,200
 End If


  ;____________________________________________________________
 ;Doppeltes Rendern für Anpassen der Minimap

 HideEntity Cam_Map
 ShowEntity Cam
 ScaleTexture Tex_Terrain, 20,20
 HideEntity Map_Position

 If EntityCollided (Cam,2) Then TranslateEntity Cam, 0,-1,0
 If Not EntityCollided (Cam,2) Then TranslateEntity Cam, 0,-15,0

 Collisions 1,2,2,3 [b]--> Cam - Terrain  (Geht nicht )              <------------------------Problem[/b]
 Collisions 1,3,2,3 [b]--> Cam - Wasserbett (Geht!)[/b]

 UpdateWorld
 RenderWorld

 HideEntity Cam
 ShowEntity Cam_Map
 ScaleTexture Tex_Terrain, 200,200
 ShowEntity Map_Position

 RenderWorld


Flip

Until KeyHit(1)
End




Hoffe, Ihr könnt mir helfen. Ich finde einfach nicht den Fehler, da ich immer alles zusammengehalten habe (entitytypes und collissionsabfragen)

Vielen Dank

Gruß

BlackError


Edit: Entschuldigt den Doppelpost. Ich bitte den Webmaster einer der 2 Beiträge zu löschen. Tut mir Leid

BlitzGames

BeitragDo, Sep 06, 2007 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Schwer zu sagen, schätze mal, dass liegt an dem "HideEntity Cam".. lass diese HideEntity's von Kameras mal alle besser raus..
www.blitzcase.com
www.anpfiff-spiel.de
www.fernsehtycoon.de
 

BlackError

BeitragDo, Sep 06, 2007 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antwort.

Lass ich diese (wohl wichtigen) faktoren beiseite, funktioniert zwar die Kollision, jedoch werden alle texturen falsch skaliert und das programm läuft VERDAMMT langsam und ruckelig Sad

Das Doppelte rendern habe ich ja gerade deswegen verwendet, da die Wasser und Bodentextur auf der Minimap (wegen der grossen entfernung der Cam) zu "gekachelt" ausgesehen haben.

Deshalb habe ich einmal die Hauptkamera (Spieler) mit der richtigen Skalierung der Texturen gerendert, und einmal nur die Camera der Minimap (mit viel grösserer Skalierung der Texturen), damit das ganze schön aussieht.

Das seltsame ist jedoch, dass die collisson kurz funktioniert, bis ich mich bewege. dann Fällt die Cam einfach durch das Terrain. Also ist ja wohl eine teilweise Kollision vorhanden Question

Der fehler liegt wohl auf jedenfall hier:

Code: [AUSKLAPPEN]

---------------------------------------------------------------
-------Rendern und Updaten der Hauptcam mit Kollision

HideEntity Cam_Map
 ShowEntity Cam
 ScaleTexture Tex_Terrain, 20,20
 HideEntity Map_Position

 If EntityCollided (Cam,2) Then TranslateEntity Cam, 0,-1,0
 If Not EntityCollided (Cam,2) Then TranslateEntity Cam, 0,-15,0

 Collisions 1,2,2,3
 Collisions 1,3,2,3

 UpdateWorld
 RenderWorld

------------------------------------------------------------
---------Rendern der Minimap ohne Kollisionsabfrage

 HideEntity Cam
 ShowEntity Cam_Map
 ScaleTexture Tex_Terrain, 200,200
 ShowEntity Map_Position

 UpdateWorld
 RenderWorld



Das "Show/Hide -Entity Map_Position" ist eigentlich unwichtig, da es nur die Positionsanzeige auf der Minimap durch einen cube darstellt.

Ich hoffe, mein Problem wurde ein wenig ersichtlicher

Hoffe auf weitere Antworten

BlitzGames

BeitragFr, Sep 07, 2007 9:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal vor Jahren auch eine Minimap in einem Rennspiel programmiert (was ich im übrigen nie veröffentlichte).. da habe ich das etwas anders gemacht..(SCHNELLER!) kannst Du Dir ja auch überlegen:
Die Minimap war bei mir die Terraintextur - sprich: ein Cube oder eher eine Platte, die am unteren Bildschirmrand relativ zur Kamera immer mitschwebte. Auf diesen Cube wurde die Texturposition immer relativ zur realen Position auf dem Terrain (X,Y) verschoben.. an der Spielerposition hatte ich damals noch ein "X" dargestellt (ich glaube durch einfache Grafik über dem Cube, der ja immer an der gleichen Position blieb.)

Diese Lösung ist extrem viel Ausprobieren.. aber so dürfte Dein Problem besser zu realisieren sein. Mehrere Kameras würde ich so viel es geht vermeiden.
www.blitzcase.com
www.anpfiff-spiel.de
www.fernsehtycoon.de
 

BlackError

BeitragSo, Sep 09, 2007 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, eigentlich will ich bei meiner Methode bleiben, da ich sowieso schon viel zeit reingesteckt habe und der Fehler auffindbar sein müsste.

Hoffe, dass mir noch jemand helfen kann, Bevor dieser Threat wieder in Vergessenheit gerät

Danke

ozzi789

BeitragDi, Sep 11, 2007 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab dat inetwa gleiche problem aber ich glaube du darfst nicht 2 mal update world u.s.w machen sons is es zu langsam


... im trying to understand... Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

Dreamora

BeitragMi, Sep 12, 2007 9:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Da hat der wehrte Herr recht.

UpdateWorld brauchst du zum aktualisieren der Welt, das hat nix mit dem Rendern zu tun.
Entferne UpdateWorld bei der Minimap Kamera und du solltest keine Probleme mehr haben.
Aber sei dir bewusst, dass du deine Framerate halbierst weil du die Welt 2x renderst!
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BlackError

BeitragMi, Sep 12, 2007 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Hab nun das 2. Updateworld entfernt. Das hat leider auch nicht funktioniert. An was könnte denn dieses dumme Problem noch liegen?

Trotzdem Danke
 

Matthias

BeitragMi, Sep 12, 2007 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay. Ich weiß jetzt nicht pb diese idee so functioniert aber ich würde warscheinlich einen anderen Weg gehen.

Also ich würde ersteinmal die MiniMapCam Rendern.

Code: [AUSKLAPPEN]

AltY=EntityY(Cam):AltYaw=EntityYaw(Cam)....
;Alle Rollwinkel und Positionen merken

positionEntity Cam,0,1000,0:RotateEntity Cam,0,90,0
CameraViewport Cam,0,0,100,100
renderWorld
GrabImage MiniMap,0,0


Und dann beim 2ten Rendern die einstellungen wieder Rückgängig machen.

Code: [AUSKLAPPEN]

CameraViewport Cam,0,0,800,600
PositionEntity Cam,0,AltY,0:RotateEntity Cam,0,AltYaw
renderworld


So jetzt müste dein Terrain im MiniMap drin sein das du nun hin setzen kannst wo du wilst.
Mfg Matthias.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group