Terrain größe problem...
Übersicht

leopunkBetreff: Terrain größe problem... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
ich bin neu hier, ich beschäftige mich seit einiger Zeit mit BlitzBasic, und seit einer Woche ca. mit Blitz3d. Mein Problem ist folgendes: Ich möchte ein möglichst großes terrain aus einer Heightmap laden. Da bei allen heightmaps größer als 128*128 oder scaleentity größer als 100 für x ud z, die Collisionsabfrage bei mir versagt, und meine camera an vielen Stellen durch das terrain fällt, benutze ich zur zeit 4 Terrais mit jeweils einer 128*128 Heightmap. Daher hab ich jetzt versucht einfach weitere 128*128 terrains anzufügen, jedoch fängt dann alles extrem zu ruckeln an. Kan mir evtl wer helfen? Gruß leopunk |
||
- Zuletzt bearbeitet von leopunk am Fr, Aug 17, 2012 11:54, insgesamt einmal bearbeitet
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erst einmal willkommen im Forum.
Damit dein Problem gelöst werden kann, solltest du deinen Programmcode hier hereinstellen. Generell müsste das, was du vorhast, durchaus funktionieren. Ich habe eben ein entsprechendes Programm geschrieben, da macht die Kollision keine Probleme. |
||
leopunk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So hier ist er...
Code: [AUSKLAPPEN] Graphics3D 1024,600,32,1
SetBuffer BackBuffer() trip = 0 ;Sound!!! music=LoadSound("music.mp3") maus = LoadSound ("maus.mp3") SoundVolume maus,0.2 SoundVolume music,0.4 LoopSound music musicchn = PlaySound(music) ;Boden!!! terrain0=LoadTerrain("heightmap0.png") terrain1=LoadTerrain("heightmap1.png") terrain2=LoadTerrain("heightmap2.png") terrain3=LoadTerrain("heightmap3.png") PositionEntity terrain1,12800,0,0 PositionEntity terrain2,0,0,12800 PositionEntity terrain3,12800,0,12800 text0=LoadTexture ("gras0.png") text1=LoadTexture ("gras1.png") text2=LoadTexture ("gras2.png") text3=LoadTexture ("gras3.png") EntityTexture terrain0,text0,0,0 EntityTexture terrain1,text1,0,0 EntityTexture terrain2,text2,0,0 EntityTexture terrain3,text3,0,0 TerrainDetail terrain0,2000,1 TerrainDetail terrain1,2000,1 TerrainDetail terrain2,2000,1 TerrainDetail terrain3,2000,1 ScaleEntity terrain0,100,700,100 ScaleEntity terrain1,100,700,100 ScaleEntity terrain2,100,700,100 ScaleEntity terrain3,100,700,100 EntityType terrain0,2 EntityType terrain1,2 EntityType terrain2,2 EntityType terrain3,2 ;Wasser!!! water=CreatePlane() watertext=LoadTexture ("wasser.bmp",4) ScaleTexture watertext,100,100 EntityTexture water,watertext MoveEntity water,0,300,0 EntityAlpha water,0.6 EntityType water,2 ;Spieler spieler = LoadMesh("warrior.3ds") PositionEntity spieler,1000,700,1300 RotateEntity spieler,0,0,0 EntityType spieler,1 EntityRadius spieler,5 ;Kamera!!! cam=CreateCamera(spieler) PositionEntity cam,1000,800,1000,1 CameraFogMode cam,1 CameraRange cam,1,30000 CameraFogRange cam,3000,10000 CameraFogColor cam,50,50,50 CameraClsColor cam,40,140,255 ;RotateEntity cam,45,0,0 EntityType cam,1 EntityRadius cam,100 ;Himmel skybox = CreateSphere(8,cam) FlipMesh skybox ScaleEntity skybox,10,10,10 himmeln = LoadTexture("wasser.bmp",4) himmel = LoadAnimTexture("psy.bmp",1,200,150,0,14) ScaleTexture himmel,1,1 EntityTexture skybox,himmeln EntityOrder (skybox,10) ;Licht!!! light=CreateLight() LightColor light,192,191,173 TurnEntity light,45,45,0 PositionEntity light,0,2000,0 AmbientLight 192,191,173 Collisions 1,2,2,3 ;Hauptschleife!!! While Not KeyHit(1) ;Get Kamera Position camx = EntityX(cam) camy = EntityY(cam) camz = EntityZ(cam) ;Kamera Bewegung!!! If KeyDown(200) Then If KeyDown(42) Then MoveEntity cam,0,0,30 ChannelPitch musicchn,66150 Else MoveEntity cam,0,0,10 ChannelPitch musicchn,44100 EndIf EndIf If KeyDown(208) Then If KeyDown(42) Then MoveEntity cam,0,0,-30 ChannelPitch musicchn,-66150 Else MoveEntity cam,0,0,-10 ChannelPitch musicchn,-44100 EndIf ElseIf Not KeyDown(42) Then ChannelPitch musicchn,44100 EndIf If KeyDown(203) Then TurnEntity cam,0,1.0,0 EndIf If KeyDown(205) Then TurnEntity cam,0,-1.0,0 EndIf If KeyHit(201) Then MoveEntity cam,0,1000,0 EndIf If Not KeyHit(201) Then MoveEntity cam,0,-20,0 MoveEntity spieler,0,-20,0 EndIf ;Reset Kamera If KeyHit(19) Then PositionEntity cam,1000,800,1000 RotateEntity cam,0,0,0 EndIf ;Play Music!!! If KeyHit(209) Then kanal = PlaySound (maus) EndIf RotateEntity skybox,0,0,0,1 ;Trip If KeyHit(20) Then trip = 1 LightColor light,90,70,70 AmbientLight 130,130,110 ElseIf KeyHit(49) Then trip = 0 EntityTexture skybox,himmeln LightColor light,192,191,173 AmbientLight 192,191,173 EndIf If trip = 1 Then frame=MilliSecs()/100 Mod 14 EntityTexture skybox,himmel,frame EndIf ;Welt berechnen!!! UpdateWorld RenderWorld ;Cam Koordinaten zeigen Text 0,0,"X" + camx Text 0,10,"Y" + camy Text 0,20,"Z" + camz Flip Wend ClearWorld End |
||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe deinen Code getestet, bei mir läuft er jedoch wunderbar, auch dann, wenn ich ein größeres Terrein lade oder es größer skaliere.
Du sagtest, die Kamera falle durch das Terrain. Fällt sie schon anfangs hindurch, oder erst nach einer Bewegung? Fällt die Kamera an den Terrainübergangsstellen oder an sonstigen signifikanten Stellen durch? Sind es eventuell immer die gleichen Stellen, an denen die Kamera durchfällt? Vielleicht ist auch etwas an deiem Terrain-Bild falsch (ich wüsste nur nicht was). Du kannst ein Terrain, durch welches die Kamera in deinem Programm hindurchfällt, mal in folgenden Code hineinladen und schauen, ob es da läuft. Code: [AUSKLAPPEN] Graphics3D 640,480,0,2
SetBuffer BackBuffer() camera=CreateCamera() CameraRange camera,0.1,50000 EntityRadius camera,100,200 EntityType camera,1 MoveEntity camera,500,1400,500 ter=LoadTerrain("Heightmap.png") ScaleEntity ter,200,1400,200 EntityType ter,2 tex=LoadTexture("gras.png") ScaleTexture tex,10,10 EntityTexture ter,tex timer=CreateTimer(40) HidePointer While Not KeyDown(1) MoveEntity camera,0,0,40*(KeyDown(200)-KeyDown(208)) TranslateEntity camera,0,-40,0 TurnEntity camera,MouseYSpeed(),-MouseXSpeed(),0 RotateEntity camera,EntityPitch(camera),EntityYaw(camera),0 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 Collisions 1,2,2,3 UpdateWorld RenderWorld Flip 0 WaitTimer(timer) Wend End |
||
leopunk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Pasiert leider auch hier wenn ich das terrain größer als 100 scale, meistens an Bergen.
Die heightmap hab ich aus nem blitz3d tutorial. Habs auch mit ner 1024*1024 map aus HME probiert bei scale 100, jedoch sid die Maps von dort bei mir immer total kantig. Wie machst du das eigentlich, dass du wenn du geradeaus läufst, an Bergen nicht leichte zur Seite abrutschst? |
||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest das von dir verwendete Terrain mal hier hereinstellen. Mit diesem und einem der beiden Programme sollte dann ja bei einer entsprechenden Skalierung der Fehler grundsätzlich auftreten.
Tritt das Problem eigentlich bei einem Skalierungsfaktor, der 100 nicht überschreitet, überhaupt nicht auf und bei einem Faktor von 101 direkt sehr regelmäßig auf oder lässt sich ein regelmäßiger Anstieg beobachten? Bei deiner abschließenden Frage bin ich mir nicht sicher, was du meinst. Ich weiß nicht, ob ich den Effekt, so wie du ihn meinst, beobachtet habe. |
||
leopunk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Fehler trat mit aufsteigender Intensität auf.
Anscheinen lag er jedoch an den Heightmaps. Benutze jetzt eine 1024*1024 Heightmap die ich mit Photoshopgemacht habe und die funktioniert weitaus besser als die, die ich mit HME erstellt habe. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group