Terrain größe problem...

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

leopunk

Betreff: Terrain größe problem...

BeitragFr, Aug 17, 2012 8:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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´

BeitragFr, Aug 17, 2012 10:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 17, 2012 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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´

BeitragFr, Aug 17, 2012 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Aug 17, 2012 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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´

BeitragSo, Aug 19, 2012 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Aug 19, 2012 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group