CameraViewport Problem (Terrain kollission geht nicht)
Übersicht

BlackErrorBetreff: CameraViewport Problem (Terrain kollission geht nicht) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group