Es wird nur aus dem Fenster rausgeschaut , man hat keine Aussenansicht.
Die Amaturen kann man in n3xtd gut aus 2dSprite herstellen auf dem 3dFenster.
Ein nicht sichtbares Schienensystem kann ich schon verlegen, wo auch die SimLok mit verschiedenen Geschwindigkeiten durchs Gelände fährt, Vorwärts wie Rückwärts.
Es braucht dann nur noch mit Signalen bestückt werden und das Gelände verschönern.
Ein Halbkreis wird durch 18 Schienen hergestellt, also 10Grad eine gebogene Schiene.
Nun brauche ich ein Pixelverhältnis auch zu den geraden Schienen um etwas im Editor darzustellen.
Wenn die Schienen im Editor angesetzt werden, dann brauchen in der Datei eigentlich nur die Schienentypen erscheinen, wie sie hintereinander verlegt werden.
Mein Program setzt die Typen dann in das 3dGelände um.
18 Schienen-gerade....18 Schienen-kurve-re...18 Schienen-gerade...18 Schienen-kurve-liFor zs=1 To 20
schiene_gerade()
Next
For zs=1 To 18
schiene_kurve_re()
Next
For zs=1 To 20
schiene_gerade()
Next
For zs=1 To 18
schiene_kurve_li()
Next
Funktioniert so auch schon wunderbar.
Das heisst, wenn ich nur 4 Schienen-kurve-re verlege so wird auch genau in diesem Winkel die Gerade verlegt,
Wie da oben funktioniert einwandfrei.
Und dieses zusammenstellen wollte ich optisch mit einer Grafik machen, darum brauchi ich nur die Typen die dann wie in der For-Schleife erzeugt werden.
Wer kann mir beim Grafikeditor mal Tipps geben.
Das Programm kann jeder benutzen wenn er möchte als Ansatz mit n3xtd.
Danke.
Code: Alles auswählen
IncludePath "includes"
IncludeFile "n3xtD_PB.pbi"
Global *speicher.l,zz.l,n.l,nn.l,nnn.l,sdx.f,sdz.f,sdw.f,swc.f,weiter.l,xzv.l,xzr.l,gehe.l,zs.l
Global x1.f,z1.f,dx.f,dz.f,wi.f
Global *auto.IMesh,*cam.ICamera
Declare schiene_gerade()
Declare schiene_kurve_li()
Declare schiene_kurve_re()
Declare fahre_vor()
Declare fahre_zur()
Global linie.iVECTOR3
Enumeration
#Window_0
#Container_0
#Button_0
EndEnumeration
*speicher = AllocateMemory(10000000)
OpenWindow(0, 0, 0, 800,600, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#Button_0, 20, 40, 110, 40, "ende")
ContainerGadget(#Container_0, 160, 10, 500,500)
iGraphics3DGadget(500,500, GadgetID(#Container_0))
SetCurrentDirectory("media/")
iTextureCreation( #ETCF_CREATE_MIP_MAPS, #False )
*terrain.IMesh = iCreateCube(1.0)
iPositionNode(*terrain, 0,-0.6,0)
iLoadTextureNode(*terrain, "grille1.bmp")
iScaleMeshBuffer( iMeshGeometry(*terrain), 200,0.1,200)
*bill.IBillboard = iCreateBillboard(3.0, 3.0)
iMaterialFlagNode(*bill, #EMF_LIGHTING, #False)
iMaterialTypeNode(*bill, #EMT_TRANSPARENT_ALPHA_CHANNEL)
iLoadTextureNode(*bill, "grass.bmp")
For i=0 To 200
*bill= iCloneNode(*bill)
iPositionNode(*bill, -100+Random(200),0.8, -100+Random(200))
Next
*cam.ICamera = iCreateCamera( )
iPositionNode(*cam, 0,100,-80)
iRotateNode(*cam, 45,0,0)
swc=0.5
n=0
nn=-4
For zs=1 To 20
schiene_gerade()
Next
For zs=1 To 18
schiene_kurve_re()
Next
For zs=1 To 20
schiene_gerade()
Next
For zs=1 To 18
schiene_kurve_li()
Next
n=n-12
InitKeyboard()
Repeat
Event = WaitWindowEvent(1)
If EventGadget() = #Button_0
End
EndIf
If GetAsyncKeyState_(#VK_K)
imoveNode(*cam, 0,0,swc)
EndIf
If GetAsyncKeyState_(#VK_I)
iMoveNode(*cam, 0,0,-swc)
EndIf
If GetAsyncKeyState_(#VK_U)
iMoveNode(*cam, swc, 0,0)
EndIf
If GetAsyncKeyState_(#VK_O)
iMoveNode(*cam, -swc, 0,0)
EndIf
If GetAsyncKeyState_(#VK_J)
iMoveNode(*cam, 0, swc,0)
EndIf
If GetAsyncKeyState_(#VK_M)
iMoveNode(*cam, 0, -swc,0)
EndIf
If GetAsyncKeyState_(#VK_Q)
Delay(50)
xzv=xzv+12
If xzv > 120
xzv=120
EndIf
gehe=1
EndIf
If GetAsyncKeyState_(#VK_A)
Delay(50)
xzv=xzv-12
If xzv < 0
xzv=0
gehe=0
EndIf
EndIf
If GetAsyncKeyState_(#VK_W)
Delay(50)
xzr=xzr+12
If xzr > 120
xzr=120
EndIf
gehe=2
EndIf
If GetAsyncKeyState_(#VK_S)
Delay(50)
xzr=xzr-12
If xzr < 0
xzr=0
gehe=0
EndIf
EndIf
If gehe=1
fahre_vor()
EndIf
If gehe=2
fahre_zur()
EndIf
irotatenode(*cam,0,sdw,0)
ipositionnode(*cam, sdx,0,sdz)
iBeginScene(200,200,200)
iDrawScene()
iEndScene()
Until Quit=1
iFreeEngine()
End
Procedure schiene_gerade()
For zz=1 To 1000
x1 = Sin(wi * #PI/180) * 0.001
z1 = Cos(wi * #PI/180) * 0.001
dx=dx+x1
dz=dz+z1
PokeF(*speicher+n,wi)
n=n+4
PokeF(*speicher+n,dx)
n=n+4
PokeF(*speicher+n,dz)
n=n+4
Next
EndProcedure
Procedure schiene_kurve_li()
For zz=1 To 1000
wi=wi-0.01
If wi <= -360.0
wi= 0
EndIf
x1 = Sin(wi * #PI/180) * 0.002
z1 = Cos(wi * #PI/180) * 0.002
dx=dx+x1
dz=dz+z1
PokeF(*speicher+n,wi)
n=n+4
PokeF(*speicher+n,dx)
n=n+4
PokeF(*speicher+n,dz)
n=n+4
Next
EndProcedure
Procedure schiene_kurve_re()
For zz=1 To 1000
wi=wi+0.01
If wi => 360.0
wi= 0
EndIf
x1 = Sin(wi * #PI/180) * 0.002
z1 = Cos(wi * #PI/180) * 0.002
dx=dx+x1
dz=dz+z1
PokeF(*speicher+n,wi)
n=n+4
PokeF(*speicher+n,dx)
n=n+4
PokeF(*speicher+n,dz)
n=n+4
Next
EndProcedure
Procedure fahre_vor()
nn=nn+xzv
nn=nn+4
If nn> n
nn=-4
gehe=0
xzv=0
Goto weiter1
EndIf
sdw=PeekF(*speicher+nn)
nn=nn+4
sdx=PeekF(*speicher+nn)
nn=nn+4
sdz=PeekF(*speicher+nn)
weiter1:
EndProcedure
Procedure fahre_zur()
nnn=nnn+xzr
nnn=nnn+4
If nnn > n
nnn=0
nn=-4
gehe=0
xzr=0
Goto weiter
EndIf
sdz=PeekF(*speicher+n-nnn)
nnn=nnn+4
sdx=PeekF(*speicher+n-nnn)
nnn=nnn+4
sdw=PeekF(*speicher+n-nnn)
weiter:
EndProcedure