funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 18.10.2009, 17:05 Titel: Würfel durch Höhenterrain mit Irrlicht steuern... |
|
|
Habe mal ein Probelauf mit Irrlicht und 2. normalen Screen gestartet mit einem steuerbaren Würfel im Höhenterrain. Der kleine Screen muss aktiv sein(mit Maus reinklicken), damit im Irrrlichtfenster die Steuerungsdaten umgesetzt werden. Den 2. kleinen Screen kann man parallel nutzen um Daten darzustellen von evt den Irrlichtdaten usw.
Tasten für die Cam : q,w,a,s,y,x,e,r,d,f,c,v
Man kann hier schön die Lage der Cam sehen , in welchen Richtungen das Ding gedreht werden kann. Auch schön um eine Flugzeug zu steuern.
Tasten um den Würfel zu drehen : z,i
Tasten um den Würfel vorwärts und rückwärts bewegen : u,j
Irrlicht für FreeBasic zum runterladen:
http://www.freebasic.net/forum/viewtopic.php?t=3584&highlight=irrlciht
Code: |
#include "IrrlichtWrapper.bi"
#include "fbgfx.bi"
USING FB
Const As Double pi = 3.1415926, pi_180 = pi / 180
Declare Sub set_camera()
DIM Shared Terrain as irr_terrain
DIM Shared TerrainNode as irr_node
DIM Shared TerrainTexture0 as irr_texture
DIM Shared TerrainTexture1 as irr_texture
DIM Shared Camera as irr_camera
DIM Shared CameraNode as irr_node
DIM Shared MeshTexture as irr_texture
DIM Shared TestNode as irr_node
dim Shared cxs as Single,cys as Single,czs as Single
Dim Shared tx As Single,ty As Single,tz As Single
Dim Shared nx As Single,nz As single
dim Shared cx as Single,cy as Single,cz as Single
dim Shared ccx as Single,ccy as Single,ccz as Single
Dim Shared nw As Single,x1 As Single,y1 As Single,sw As Single
ScreenRes 300,200,32
SCREENCONTROL SET_WINDOW_POS, 10,200
IrrStart( IRR_EDT_OPENGL, 640, 480, IRR_BITS_PER_PIXEL_32, _
IRR_WINDOWED, IRR_SHADOWS, IRR_IGNORE_EVENTS )
IrrSetWindowCaption( "terrain-test" )
IrrTransparentZWrite
Terrain = IrrAddTerrain( "./media/splatter-height.tga" )
IrrScaleTexture( Terrain, 1.0, 60.0)
TerrainNode = Terrain
IrrSetNodeScale( TerrainNode, 40.0, 2.4, 40.0 )
TerrainTexture0 = IrrGetTexture( "./media/terrain-texture.jpg" )
TerrainTexture1 = IrrGetTexture( "./media/detailmap3.jpg" )
IrrSetNodeMaterialTexture( TerrainNode, TerrainTexture0, 0 )
IrrSetNodeMaterialTexture( TerrainNode, TerrainTexture1, 1 )
IrrSetNodeMaterialFlag( TerrainNode, IRR_EMF_LIGHTING, IRR_OFF )
IrrSetNodeMaterialType ( TerrainNode, IRR_EMT_DETAIL_MAP )
IrrSetNodeMaterialFlag( TerrainNode, IRR_EMF_FOG_ENABLE, IRR_ON )
IrrSetFog ( 64,100,128, IRR_EXPONENTIAL_FOG, 0.0,10000.0, 0.5 )
MeshTexture = IrrGetTexture( "./media/texture.jpg" )
TestNode = IrrAddTestSceneNode
IrrSetNodeScale( testnode, 2,2,2 )
IrrSetNodeMaterialTexture( TestNode, MeshTexture, 0 )
IrrSetNodeMaterialFlag( TestNode, IRR_EMF_LIGHTING, IRR_OFF )
CameraNode = IrrAddCamera( 0,0,0, 0,0,0 )
cxs=1800
cys=500
czs=2500
tx=1500
tz=2000
sw=1
IrrTransparentZWrite
IrrSetCameraClipDistance( CameraNode, 12000 )
IrrSetNodePosition( CameraNode, cxs,cys,czs )
While IrrRunning
Sleep 2
IrrBeginScene( 64, 100, 125 )
If multikey( FB.SC_q ) Then
cx=cx-0.005
set_camera()
End If
If multikey( FB.SC_w ) Then
cx=cx+0.005
set_camera()
End If
If multikey( FB.SC_a ) Then
cy=cy+0.005
set_camera()
End If
If multikey( FB.SC_s ) Then
cy=cy-0.005
set_camera()
End If
If multikey( FB.SC_z ) Then
cz=cz-0.005
set_camera()
End If
If multikey( FB.SC_x ) Then
cz=cz+0.005
set_camera()
End If
If multikey( FB.SC_e ) Then
ccx=ccx+2
set_camera()
End If
If multikey( FB.SC_r ) Then
ccx=ccx-2
set_camera()
End If
If multikey( FB.SC_d ) Then
ccy=ccy+2
set_camera()
End If
If multikey( FB.SC_f ) Then
ccy=ccy-2
set_camera()
End If
If multikey( FB.SC_c ) Then
ccz=ccz+2
set_camera()
End If
If multikey( FB.SC_v ) Then
ccz=ccz-2
set_camera()
End If
If MultiKey( FB.SC_u ) Then
x1=Sin(nw*pi_180)*sw
y1=Cos(nw*pi_180)*sw
nx+=x1
nz+=y1
End If
If multikey( FB.SC_j ) Then
x1=Sin(nw*pi_180)*sw
y1=Cos(nw*pi_180)*sw
nx-=x1
nz-=y1
End If
If multikey( FB.SC_i ) Then
nw=nw+1
End If
If multikey( FB.SC_y ) Then
nw=nw-1
End If
ty = IrrGetTerrainTileHeight( Terrain, tx+nx, tz+nz)
IrrSetNodePosition( testnode, tx+nx, ty+10, tz+nz)
IrrSetNodeRotation(testnode,0,nw,0)
IrrDrawScene
IrrEndScene
WEND
IrrStop
Sub set_camera()
IrrRevolveCamera(CameraNode, cx,cy,cz, ccx,ccy,ccz )
cx=0
cy=0
cz=0
ccx=0
ccy=0
ccz=0
End Sub
|
|
|