Minimap-Frage!

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Oetzicool

Betreff: Minimap-Frage!

BeitragSo, Sep 04, 2005 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wieder eine neue Frage von mir Very Happy !
Also folgendes ich habe ne Minimap gebastelt, einfach nur eine 2. Kamera die das Terrain von oben betrachtet! Jetzt will ich das die Kamera die über die Landschaft fliegt z.b. als Punkt auf der Minimap angezeigt wird aber wie mach ich des? Muss ich die Koordinaten der Kamera nehmen und dann auf die Minimap umrechnen also sozusagen über den Bildschirm gemalt oder gibts auch ne andere Möglichkeit?
Danke schonmal!

Cu Oetzicool

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 04, 2005 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Oetzicool, du kannst es so machen, indem du an die Position der ersten Kamera eine kleine Sphere zeichnest. Wenn die Positionen der ersten Kamera und der Sphere gleich sind, wird die Sphere die Sicht der ersten Kamara nicht verhindern, da die Polygone der Sphere von innen herraus nicht sichtbar sind (Ausser "EntityFX Sphere,16" ist eingeschaltet). Wenn du nun mit den Kameras rumfährst dann kannst du mit der zweiten immer sehen wo die erste Kamera ist.
 

Oetzicool

BeitragSo, Sep 04, 2005 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ja aber sagen wir ich baue noch ein paar häuser in mein terrain ein! Und will das sie auch auf der Minimap angezeigt werden aber ich will die nicht rotanmalen damit sie auf der Minimap gesehen werden

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 04, 2005 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Nagut, ich verstehe das Problem nicht. Weil die Häuser und die Sphere dann weiß sind? Vielleicht geht ja das hier.

Wenn die Camera2 (Minimap) oben auf das Terrain der Camera1 zeigt, dabei die Camera2 X und Z Koordinaten der Camera1 mitverfolgt, dann hat doch die Camera2 immer die Camera1 genau im Mittelpunkt! Oder? Somit kannst du einfach nach RenderWorld/UpdateWorld ein 'roten' Punkt als 2D (per Oval/DrawImage) in die Mitte der Minimap zeichnen und dann Flip...
 

Oetzicool

BeitragSo, Sep 04, 2005 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ne also des ist so die kameras sind voneinander unabhängig...d.h. die 2. Kamera verfolgt die erste nicht sie steht nur still über der Map und beobachtet sie und mit der ersten Kann ich über die Map schweben...
 

Oetzicool

BeitragSo, Sep 04, 2005 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe mal deine Idee mit dem Sphere versucht aber sie wird nicht angezeigt hier ist der code vieleicht findest du den fehler:

BlitzBasic: [AUSKLAPPEN]

Graphics3D 640,480,32,2
AppTitle \"3D Test\"
SetBuffer BackBuffer()

;Variablen deklarieren
Global wellenhoehe# = 10
Global minimap_x=3210
Global minimap_y=3200
Global minimap_z=3205
Global camera_x=1000
Global camera_y=800
Global camera_z=1000

;Daten Laden (Terrain,Texturen)

terrain=LoadTerrain(\"heightmap.bmp\")
text1=LoadTexture(\"terraintext1.bmp\")
text2=LoadTexture(\"terraintext2.bmp\")
text3=LoadTexture(\"cam.bmp\")

;Cam1 Punkt
sphere=CreateSphere(8)
ScaleEntity sphere,2,2,2,1

;Geladene Daten anpassen
EntityTexture terrain,text1,0,0
EntityTexture terrain,text2,0,1
ScaleEntity terrain,50,290,50
ScaleTexture text1, 50,50
ScaleTexture text2, 3,3
TerrainDetail terrain,5000,1

;Wasser erstellen
water=CreatePlane()
watertext=LoadTexture(\"wassertext.bmp\",4)
EntityTexture water,watertext
ScaleTexture watertext,20,20
MoveEntity water,0,100,0
EntityAlpha water,0.5

;Kameras initialisieren
cam=CreateCamera()
cam2=CreateCamera()
MoveEntity cam,1000,800,1000
MoveEntity cam2,x,y,z
CameraFogMode cam,1
CameraRange cam,1,30000
CameraRange cam2,1,30000

;Licht initialisieren
light=CreateLight()
TurnEntity light,45,45,0

;Programmschleife starten
While Not KeyHit(1)


;Richtung ändern
If KeyDown(205) Then yaw#=yaw#-1
If KeyDown(203) Then yaw#=yaw#+1
If KeyDown(200) Then pitch#=pitch#-1
If KeyDown(208) Then pitch#=pitch#+1
RotateEntity cam,pitch#,yaw#,0,0
If KeyDown(75) Then camera_x=camera_x-5
If KeyDown(77) Then camera_x=camera_x+5
If KeyDown(72) Then camera_y=camera_y-5
If KeyDown(80) Then camera_y=camera_y+5
If KeyDown(78) Then camera_z=camera_z-5
If KeyDown(156) Then camera_z=camera_z+5

PositionEntity cam,camera_x,camera_y,camera_z

RotateEntity cam2,90,0,0,1

;Minimap initialisieren und einstellen
CameraViewport cam2,25,300,150,150
PositionEntity cam2,minimap_x,minimap_y,minimap_z
PositionEntity sphere,camera_x,camera_y,camera_z
EntityTexture sphere,text3,0
ScaleTexture text3,20,20


;Unterwasser
If EntityY(cam) < EntityY(water) Then
CameraFogRange cam,50,200
CameraFogColor cam,1,75,150
CameraClsColor cam,1,75,150
EndIf
If EntityY(cam) > EntityY(water) Then
CameraFogRange cam,100,4000
CameraFogColor cam,40,140,255
CameraClsColor cam,40,140,255
EndIf

;Kamerageschwindigkeit
MoveEntity cam,0,0,2

;Kollision <--------------------NICHT BEACHTEN FUNKTIONIERT NICHT
EntityType cam,1
EntityType terrain,1
EntityRadius cam,1
EntityRadius terrain,1
Collisions 1,2,2,2


RenderWorld
;Infodaten
Text 20,20, \"Yaw:\"+yaw#
Text 20,40, \"Pitch:\"+pitch#
Text 20,60, \"Kamera Koordinaten:\"
Text 20,80, \"X:\"+camera_x
Text 20,100, \"Y:\"+camera_y
Text 20,120, \"Z:\"+camera_z
Flip
Wend
ClearWorld
End

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 04, 2005 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok jetzt kappier ich es... Falls du möchtest das die Camera2 zwar still steht, aber mitschwenken soll, dann mach AlignToVector mit der Camera2. Falls sie sich garnicht bewegen soll, dann kommst du meiner Meinung nach ohne kleine Umrechnungensformeln nicht rum. Du hast aber Glück, daß die 3D-Grafikkarten eigentlich kein richtiges 3D Berechnen (sondern son billigen abklatsch davon) welches zumal für dieses Beispiel es etwas einfacher macht. Wenn Camera2 genau 90° zu den Achsen der Map steht, dann kannst du die X und Z Position der Camera1 in die Minimap in form X und Y als 2D per Skallierung umrechnen. Wegen den billigen abklatsch reicht es die 3D X/Z Koordinaten in 2D X/Y einfach zu Skallieren. Denn richtigen Faktor musst du dann durch Annäherungen herrausfinden, oder rechnest dir das mal mit dem Taschenrechner aus.
 

Oetzicool

BeitragSo, Sep 04, 2005 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ok alles klar ich werds mal versuchen aber hast du rausgefunden was an meinem code falsch war

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 04, 2005 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe dein Code mal ausprobiert. Schönes ding. Hier mal meine Antwort... Mach mal <ScaleEntity sphere,60,60,60,1> dann klappts auch... 60 ist vielleicht ein bischen zuviel, aber es funzt.
 

Oetzicool

BeitragSo, Sep 04, 2005 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
also hab rumgetüfftelt und ne formel gemacht aber irgenwie funzt es nicht so ganz die block bewegt sich zwar in die richtung aber viel zu langsam wenn ich am ende der karte bin ist der block noch nichtmal in der mitte der Minimap!
Hier der Code:
BlitzBasic: [AUSKLAPPEN]

Graphics3D 640,480,32,2
AppTitle \"3D Test\"
SetBuffer BackBuffer()

;Variablen deklarieren
Global wellenhoehe# = 10
Global minimap_x=3210
Global minimap_y=3200
Global minimap_z=3205
Global camera_x=1000
Global camera_y=800
Global camera_z=1000

;Daten Laden (Terrain,Texturen)

terrain=LoadTerrain(\"heightmap.bmp\")
text1=LoadTexture(\"terraintext1.bmp\")
text2=LoadTexture(\"terraintext2.bmp\")


;Geladene Daten anpassen
EntityTexture terrain,text1,0,0
EntityTexture terrain,text2,0,1
ScaleEntity terrain,50,290,50
ScaleTexture text1, 50,50
ScaleTexture text2, 3,3
TerrainDetail terrain,5000,1

;Wasser erstellen
water=CreatePlane()
watertext=LoadTexture(\"wassertext.bmp\",4)
EntityTexture water,watertext
ScaleTexture watertext,20,20
MoveEntity water,0,100,0
EntityAlpha water,0.5

;Kameras initialisieren
cam=CreateCamera()
cam2=CreateCamera()
MoveEntity cam,1000,800,1000
MoveEntity cam2,x,y,z
CameraFogMode cam,1
CameraRange cam,1,30000
CameraRange cam2,1,30000

;Licht initialisieren
light=CreateLight()
TurnEntity light,45,45,0

;Programmschleife starten
While Not KeyHit(1)


;Richtung ändern
If KeyDown(205) Then yaw#=yaw#-1
If KeyDown(203) Then yaw#=yaw#+1
If KeyDown(200) Then pitch#=pitch#-1
If KeyDown(208) Then pitch#=pitch#+1
RotateEntity cam,pitch#,yaw#,0,0
If KeyDown(75) Then camera_x=camera_x-5
If KeyDown(77) Then camera_x=camera_x+5
If KeyDown(72) Then camera_y=camera_y-5
If KeyDown(80) Then camera_y=camera_y+5
If KeyDown(78) Then camera_z=camera_z-5
If KeyDown(156) Then camera_z=camera_z+5

PositionEntity cam,camera_x,camera_y,camera_z

RotateEntity cam2,90,0,0,1

;Minimap initialisieren und einstellen
CameraViewport cam2,25,250,200,200
PositionEntity cam2,minimap_x,minimap_y,minimap_z

;Minimap Positionen berechnen <-----------------------------HIER DIE FORMEL
minimap_x_pos#=225-(camera_x/200)
minimap_y_pos#=450-(camera_z/200)

;Unterwasser
If EntityY(cam) < EntityY(water) Then
CameraFogRange cam,50,200
CameraFogColor cam,1,75,150
CameraClsColor cam,1,75,150
EndIf
If EntityY(cam) > EntityY(water) Then
CameraFogRange cam,100,4000
CameraFogColor cam,40,140,255
CameraClsColor cam,40,140,255
EndIf

;Kamerageschwindigkeit
MoveEntity cam,0,0,2

;Kollision
EntityType cam,1
EntityType terrain,1
EntityRadius cam,1
EntityRadius terrain,1
Collisions 1,2,2,2


RenderWorld
Text 20,20, \"Yaw:\"+yaw#
Text 20,40, \"Pitch:\"+pitch#
Text 20,60, \"Kamera Koordinaten:\"
Text 20,80, \"X:\"+camera_x
Text 20,100, \"Y:\"+camera_y
Text 20,120, \"Z:\"+camera_z
Text 20,140, \"Minimap Y:\"+minimap_z_pos#
Color 255,255,255
Rect minimap_x_pos#,minimap_y_pos#,10,10,1
Flip
Wend
ClearWorld
End

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 04, 2005 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du mein Beispiel vorhin mal ausprobiert? Falls du es denoch auf 2D machen möchtest, musst du den Wert ausrechnen oder durch Annäherung ermitteln. Ich finde aber das die Sphere ganz Okay aussieht. Problem bei der 2D-Methode ist, daß immer wenn du was änderst (zB. ScaleEntity Terrain, Gesammtgröße Terrain, Sichtbare größe Minimap) du die Werte für die Umrechnung umändern musst. Eine Idee hätte ich da noch, falls dir beide nicht zusagen...

Nehmen wir an die Map währe 1000 Einheiten breit und 1000 Einheiten tief. Die Kamera für die Minimap währe zB 1000 Einheiten hoch, also auf Position 500,1000,500. Wenn du dann ein Sprite immer auf mittlerer Höhe (500) stellt, und zwar so das man es nur von oben sieht (Backfaces ausgeschaltet) Dann reicht es die Position des Sprites die hälfte der Position X,Y,Z der Kamera am Boden zu stellen. Wenn Camera1 dann 300,100,730 hat, dann positionierst dann das Sprite auf 1000-(1000-300)/2,1000-(1000-100)/2,1000-(1000-730)/2 = 650,550,865... Somit kann es nicht passieren das, wie bei der Sphere diese von einem Objekt zB einem Haus auf der Minimap verdekt wird, da alle Objekte wohl nicht mal halb so hoch sein werden wie die Map groß ist. Das Sprite stört nicht in der 3D-Welt, falls Multiplayer integriert werde sollen.

Ich kann dir mal ein beispiel proggen... mom.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 04, 2005 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
So jetzt hab ich mal ein Beispielcode dafür... Deine Map ist 12800 Einheiten breit und 12800 Einheiten tief. Wenn die Cam2 auf höhe 6400 gesetzt wird, dann hat mal alles GENAU im Blickfeld (da die Kameras +/- 45° einfangen). Ich habe ein Sprite gestellt welches im Verhältnis 9/10 Höhe positioniert wird. Mapmitte ist X=6400, Z=6400. Wegen des Verhältnisses zu 10 ist dadurch die Spritehöhe auf 5760 (Cam2 Y=6400-(6400/10) festgelegt. Egal wo du mit der Kamera hinfährst, das Sprite stellt die Position im Viewport richtig an. Bedingt durch die Spritehöhe ist es äusserst unwahrscheinlich das Gebäude oder andere Gegenstände überhaupt diese Hähe erreichen können, welche es verdecken könnten. Hier der Code...
Code: [AUSKLAPPEN]
Graphics3D 640,480,32,2
AppTitle "3D Test"
;SetBuffer BackBuffer()

;Variablen deklarieren
Global wellenhoehe# = 10
Global minimap_x=3210
Global minimap_y=3200
Global minimap_z=3205
Global camera_x=6400
Global camera_y=400
Global camera_z=6400

;Daten Laden (Terrain,Texturen)

;########SPRITE#LADEN########
PSprite=CreateSprite()
TSprite=LoadTexture("data\moss.bmp",1)
EntityTexture PSprite,TSprite
SpriteViewMode PSprite,2
RotateEntity PSprite,90,0,0
ScaleSprite PSprite,20,20
;########SPRITE#LADEN########

terrain=LoadTerrain("data\hm2.bmp")
text1=LoadTexture("data\moss.bmp")
text2=LoadTexture("data\tx1.bmp")
text3=LoadTexture("data\wood_b.tga")

;Geladene Daten anpassen
EntityTexture terrain,text1,0,0
EntityTexture terrain,text2,0,1
ScaleEntity terrain,50,290,50
ScaleTexture text1, 50,50
ScaleTexture text2, 3,3
TerrainDetail terrain,5000,1

;Wasser erstellen
water=CreatePlane()
watertext=LoadTexture("data\hm1.bmp",4)
EntityTexture water,watertext
ScaleTexture watertext,20,20
MoveEntity water,0,100,0
EntityAlpha water,0.5

;Kameras initialisieren
cam=CreateCamera()
cam2=CreateCamera()
PositionEntity cam2,6400,6400,6400;########MITTE#MAP########
RotateEntity cam2,90,0,0,1;########HIERHER#VERSCHOBEN########
CameraFogMode cam,1
CameraRange cam,1,30000
CameraRange cam2,1,30000

;Licht initialisieren
light=CreateLight()
TurnEntity light,45,45,0

;Programmschleife starten
While Not KeyHit(1)

;Richtung ändern
If KeyDown(205) Then yaw#=yaw#-1
If KeyDown(203) Then yaw#=yaw#+1
If KeyDown(200) Then pitch#=pitch#-1
If KeyDown(208) Then pitch#=pitch#+1
RotateEntity cam,pitch#,yaw#,0,0
If KeyDown(75) Then camera_x=camera_x-5
If KeyDown(77) Then camera_x=camera_x+5
If KeyDown(72) Then camera_y=camera_y-5
If KeyDown(80) Then camera_y=camera_y+5
If KeyDown(78) Then camera_z=camera_z-5
If KeyDown(156) Then camera_z=camera_z+5

PositionEntity cam,camera_x,camera_y,camera_z

;########SPRITE#ZEICHNEN########
PositionEntity PSprite,6400-(6400-camera_x)/10,5760,6400-(6400-camera_z)/10
;########SPRITE#ZEICHNEN########

;Minimap initialisieren und einstellen
CameraViewport cam2,25,300,150,150

;Unterwasser
If EntityY(cam) < EntityY(water) Then
CameraFogRange cam,50,200
CameraFogColor cam,1,75,150
CameraClsColor cam,1,75,150
EndIf
If EntityY(cam) > EntityY(water) Then
CameraFogRange cam,100,4000
CameraFogColor cam,40,140,255
CameraClsColor cam,40,140,255
EndIf

;Kamerageschwindigkeit
MoveEntity cam,0,0,2

;Kollision <--------------------NICHT BEACHTEN FUNKTIONIERT NICHT
EntityType cam,1
EntityType terrain,1
EntityRadius cam,1
EntityRadius terrain,1
Collisions 1,2,2,2


RenderWorld
;Infodaten
Text 20,20, "Yaw:"+yaw#
Text 20,40, "Pitch:"+pitch#
Text 20,60, "Kamera Koordinaten:"
Text 20,80, "X:"+camera_x
Text 20,100, "Y:"+camera_y
Text 20,120, "Z:"+camera_z
Flip
Wend
ClearWorld
End


[EDIT] Sorry, musst dir deine Dateinamen wieder eintragen...
 

Oetzicool

BeitragSo, Sep 04, 2005 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok also hab auch weiter am Code getüfftelt ist zwar nicht 100% auf den selben Koordinaten wie die Cam aber passt im Grunde auch!
Kannst ja mal ausprobieren werd deinst auch gleich mal testen:

BlitzBasic: [AUSKLAPPEN]

Graphics3D 640,480,32,2
AppTitle \"3D Test\"
SetBuffer BackBuffer()

;Variablen deklarieren
Global minimap_x=3210
Global minimap_y=3200
Global minimap_z=3205
Global verdana=LoadFont(\"Verdana\",24,1,0,0)
Global verdana2=LoadFont(\"Verdana\",12,0,0,0)



;Daten Laden (Terrain,Texturen)

terrain=LoadTerrain(\"heightmap.bmp\")
text1=LoadTexture(\"terraintext1.bmp\")
text2=LoadTexture(\"terraintext2.bmp\")


;Geladene Daten anpassen
EntityTexture terrain,text1,0,0
EntityTexture terrain,text2,0,1
ScaleEntity terrain,50,290,50
ScaleTexture text1, 50,50
ScaleTexture text2, 3,3
TerrainDetail terrain,5000,1

;Wasser erstellen
water=CreatePlane()
watertext=LoadTexture(\"wassertext.bmp\",4)
EntityTexture water,watertext
ScaleTexture watertext,20,20
MoveEntity water,0,100,0
EntityAlpha water,0.5

;Kameras initialisieren
cam=CreateCamera()
cam2=CreateCamera()
MoveEntity cam,3030,200,350
CameraFogMode cam,1
CameraRange cam,1,30000
CameraRange cam2,1,30000

;Licht initialisieren
light=CreateLight()
TurnEntity light,45,45,0

;Programmschleife starten
While Not KeyHit(1)


;Richtung ändern
If KeyDown(203) Then yaw=yaw+1
If KeyDown(205) Then yaw=yaw-1
If KeyDown(200) Then pitch=pitch+1
If KeyDown(208) Then pitch=pitch-1
RotateEntity cam,pitch,yaw,0,1
RotateEntity cam2,90,0,0,1

;Minimap initialisieren und einstellen
CameraViewport cam2,25,250,200,200
PositionEntity cam2,minimap_x,minimap_y,minimap_z

;Minimap Positionen berechnen
minimap_x_pos=25+(EntityX(cam)/32)
minimap_y_pos=450-(EntityZ(cam)/32)
If minimap_x_pos<=25 Then minimap_x_pos = 25
If minimap_x_pos>=225 Then minimap_x_pos = 225
If minimap_y_pos<=250 Then minimap_y_pos = 250
If minimap_y_pos>=440 Then minimap_y_pos = 440
If minimap_x_pos=25 Or minimap_x_pos=225 Or minimap_y_pos=250 Or minimap_y_pos=440 Then out=1
If minimap_x_pos>25 And minimap_x_pos<220 And minimap_y_pos>250 And minimap_y_pos<440 Then out=0

;Unterwasser
If EntityY(cam) < EntityY(water) Then
CameraFogRange cam,50,200
CameraFogColor cam,1,75,150
CameraClsColor cam,1,75,150
EndIf
If EntityY(cam) > EntityY(water) Then
CameraFogRange cam,100,4000
CameraFogColor cam,40,140,255
CameraClsColor cam,40,140,255
EndIf

;Kamerageschwindigkeit
MoveEntity cam,0,0,2

;Kollision
EntityType cam,1
EntityType terrain,1
EntityRadius cam,1
EntityRadius terrain,1
Collisions 1,2,2,2


RenderWorld

Color 255,255,255
SetFont verdana2
Text 20,20, \"Terrain test v1.0\"
Color 242,221,102
Oval minimap_x_pos,minimap_y_pos,10,10,1
Color 255,0,0
SetFont verdana
If out<>0 Then Text 450,15,\"Out of Terrain\"
Color 255,255,255
If MouseX()>minimap_x_pos And MouseX()<minimap_x_pos+10 And MouseY()>minimap_y_pos And MouseY()<minimap_y_pos+10 Then Rect 500,40,100,50,1
SetFont verdana2
Color 0,0,0
If MouseX()>minimap_x_pos And MouseX()<minimap_x_pos+10 And MouseY()>minimap_y_pos And MouseY()<minimap_y_pos+10 Then Text 505,45,\"Player\"

Flip
Wend
ClearWorld
End

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 04, 2005 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenigstens antwortest du, nichts ist nerviger als wenn man sich um die Probleme anderer bemüht und dann keine Antwort bekommt ob man denen helfen konnte oder nicht.

[EDIT]Dein Code ist nicht schlecht. Die Cam2 zeigt aber nicht die ganze Map an! Ich kann also aus dem Cam2-Bereich raus obwohl die Map (Cam1) noch weiteres Terrain darstellt. Positioniere die Cam2 auf Mitte X und Z des Terrains und auf die hälfte der Höhe wie dein Terrain breit bzw. tief ist (+/- 45° Blick)... Ansonsten würde ich ein Sprite in der 3D-Welt bevorzugen, da es meiner Meinung nach einfacher zu handhaben ist... Sorry, wegen des späteren Vorschlags Embarassed Hatte es auch noch nicht zuvor gemacht.
  • Zuletzt bearbeitet von hectic am So, Sep 04, 2005 18:00, insgesamt einmal bearbeitet
 

Oetzicool

BeitragSo, Sep 04, 2005 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
klar ich bin dafür dankbar
also ich habe deine methode probiert aber bei mir kam immer der fehler das die Textur des Sprites nicht gefunden werden konnte obwohl ich alles korrekt eingegeben habe!

Kannst du mir vieleicht noch bei anderen Sachen helfen oder zumindest sagen wo ich dazu beiträge finde oder tutorials hab schon überall gesucht:

- Wenn man außerhalb der Map geht das man stehen bleibt also nicht mehr weiterlaufen kann
- Kollision zwischen Kamera und Terrain (nicht das ich einfach durchlaufen kann
- Rich)tiges wasser a(lso wellenbewegungen oder so)
- Ein Himmer (vieleicht mit Sonne die auf das Terrain strahlt)

Danke schonmal

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 04, 2005 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
1.) Ausserhalb der Map kannst du mit der If-Anweisung machen. beispiel:Code: [AUSKLAPPEN]
If camera_x>12800 then camera_x=12800
If camera_z>12800 then camera_z=12800
If camera_x<0 then camera_x=0
If camera_z<0 then camera_z=0
oderCode: [AUSKLAPPEN]
If camera_x>12800 or camera_z>12800 or camera_x<0 or camera_z<0 then (alle Bewegungen stopen und einen Schritt zurrück (sonst kommt man da nicht mehr raus))


2.) Beispiel:Code: [AUSKLAPPEN]
If camera_y < TerrainY(terrain,camera_x,camera_y,camera_z)+2 then camera_y = TerrainY(terrain,camera_x,camera_y,camera_z)+2


3.) Mit ModifyTerrain. Du kannst dazu aber Plane nehmen (ist ja flach!). Du must dann ein zweites Terrain erstellen und die Wellenbewegungen mit Sin/Cos machen. Ist aber nicht sonderlich schnell. Solltest also auf jeden Fall die Sin- und Cos-Tabelle vorher in ein Array ablegen (äusserste Präzision ist hier nicht erforderlich (0-360° in einzelschritten reicht hier völlig)). Beispiel:Code: [AUSKLAPPEN]
wellen=wellen+1
for y=0 to 254
 for x=0 to 254
  modifyTerrain Wasserterrain,x,y,sin(wellen+x*10)*cos(wellen+y*10)*2,1
 next
next


4.) Gute Effekte erreichst du schon mit...Code: [AUSKLAPPEN]
AmbientCollor 96,96,96 ;Umgebungslicht eindämmen
LightCollor light,255,255,212 ;Richtungslich leicht gelblich
TurnEntity light,70,0,0 ;statdessen Richtungslicht



Ich hab jetzt die Werte nicht überprüft. Können also Fehler vorhanden sein. Habe Besuch, kann also heute nicht mehr weiter machen. Werde dir mal ein Beispiel zusenden was ich schon mal gemacht habe... Morgen aber.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Sep 05, 2005 3:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ein Beispiel für Wasserbewegung in 3D...
Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

;Umgebung schaffen
cam=CreateCamera()
lig=CreateLight()
RotateEntity lig,70,0,0
PositionEntity cam,16,4,0

;Terrain erstellen
terrain=CreateTerrain(32)
TerrainDetail terrain,2000,True
texture=LoadTexture("data\tx1.bmp")
EntityTexture terrain,texture
ScaleEntity terrain,1,1,1




While Not KeyHit(1)
 If KeyDown(203) Then TurnEntity cam,0,+1,0
 If KeyDown(205) Then TurnEntity cam,0,-1,0
 If KeyDown(200) Then MoveEntity cam,0,0,+.1
 If KeyDown(208) Then MoveEntity cam,0,0,-.1

 wl#=wl+1

 For y#=1 To 31
  For x#=1 To 31
   ModifyTerrain terrain,x,y,0.5+Sin(wl+(x*10)+(y*10))*0.5
  Next
 Next

 RenderWorld
 Flip
 Wend
End
 

Oetzicool

BeitragMo, Sep 05, 2005 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie kriege ich des problemlos in meinen Code eingebaut?
Wenn ich es versuche wird kein Wasser angezeigt!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Sep 05, 2005 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Oetzicool, du hast bereits ein Terrain namens terrain, du mußt daher dem 'Wasser'terrain ein anderen Namen geben...

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group