[Blitz 3D] Hohlzylinder (Rohr erstellen (auch teilweise)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

AMY

Betreff: [Blitz 3D] Hohlzylinder (Rohr erstellen (auch teilweise)

BeitragDo, Jan 19, 2017 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal ein Funktion geschrieben mit der man einfach ein Rohr oder auch nur Abschnitte davon erstellen kann.
Da ich ungerne mit Modellierprogrammen arbeite, und man sowas ja doch mal brauchen kann, ist dies (zumindest für mich) eine große Bereicherung.

Ich habe noch die zweite Funktion zu Erstellung einer Scheibe ebenfalls mit Loch (also ein 2 Dimensionales Objekt) mit eingefügt, damit man dies auch für 2D-Spiele unter B3D verwenden kann.

Würde mich über Feedback freuen.

BlitzBasic: [AUSKLAPPEN]
Graphics3D(1920,1080,32,2)
camera=CreateCamera()
camlight=CreateLight(2,camera)
MoveMouse 400,300

f=CreateCylinderPart(10,8,270)
g=CreateCylinderPart(10,4,170)
h=CreateCylinderPart(6,1,350)
i=CreateCylinderPart(10,0,350)
j=CreateCylinderPart(10,9,200)

PositionEntity f,00,0,30
PositionEntity g,25,0,30
PositionEntity h,50,0,30
PositionEntity i,75,0,30
PositionEntity j,100,0,30
Repeat
Movement(camera,1,0.1)
If KeyHit(2) Then WFMode=1-WFMode
WireFrame WFMode
RenderWorld
Text 0,0,TrisRendered()
Text 0,20,scale
Flip
Until KeyDown(1)
End


Function CreateCirclePart(aussenradius,innenradius,degrees)
CP=CreatePivot()
mesh=CreateMesh()
surface=CreateSurface(mesh)
Local VertexPoints[360];360grad * 4 ecken pro abschnitt
For I=0 To degrees
MoveEntity CP,aussenradius,0,0
VertexPoints[I]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP))
MoveEntity CP,-(aussenradius-innenradius),0,0
VertexPoints[I+degrees]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP))
MoveEntity CP,-innenradius,0,0
TurnEntity CP,0,1,0
Next

For I=1 To degrees-1
AddTriangle(surface,VertexPoints[I],VertexPoints[I+1],VertexPoints[I+1+degrees])
AddTriangle(surface,VertexPoints[I],VertexPoints[I+1+degrees],VertexPoints[I+degrees])
Next
End Function
Function CreateCylinderPart(aussenradius,innenradius,degrees,detail=80);1-100 empfohlen nicht unter 30
detail=101-detail
;VertexPoints 0-359 Aussenpunkte Vorne
;VertexPoints 360-719 Innenpunkte Vorne
;VertexPoints 720-1079 Aussenpunkte Hinten
;VertexPoints 1080-1439 Innenpunkte Hinten
CP=CreatePivot()
PositionEntity CP,0,-1,0
mesh=CreateMesh()
surface=CreateSurface(mesh)
Local VertexPoints[1440];360grad * 4 ecken pro abschnitt
For I=0 To degrees/detail
MoveEntity CP,aussenradius,0,0
VertexPoints[I]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP))
MoveEntity CP,-(aussenradius-innenradius),0,0
VertexPoints[I+(360)]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP))
MoveEntity CP,-innenradius,0,0
TurnEntity CP,0,detail,0
Next
PositionEntity CP,0,1,0
RotateEntity CP,0,0,0
For I=720 To 720+(degrees/detail)
MoveEntity CP,aussenradius,0,0
VertexPoints[I]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP))
MoveEntity CP,-(aussenradius-innenradius),0,0
VertexPoints[I+360]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP))
MoveEntity CP,-innenradius,0,0
TurnEntity CP,0,detail,0
Next
For I=0 To (degrees/detail)-1
AddTriangle(surface,VertexPoints[I],VertexPoints[I+1],VertexPoints[I+1+360])
AddTriangle(surface,VertexPoints[I],VertexPoints[I+1+360],VertexPoints[I+360])
AddTriangle(surface,VertexPoints[I+720],VertexPoints[I+1+360+720],VertexPoints[I+1+720])
AddTriangle(surface,VertexPoints[I+720],VertexPoints[I+360+720],VertexPoints[I+1+360+720])
AddTriangle(surface,VertexPoints[I],VertexPoints[I+720+1],VertexPoints[I+1])
AddTriangle(surface,VertexPoints[I],VertexPoints[I+720],VertexPoints[I+720+1])
AddTriangle(surface,VertexPoints[I+360],VertexPoints[I+360+1],VertexPoints[I+360+1+720])
AddTriangle(surface,VertexPoints[I+360],VertexPoints[I+360+1+720],VertexPoints[I+360+720])
Next

AddTriangle(surface,VertexPoints[0],VertexPoints[360],VertexPoints[1080])
AddTriangle(surface,VertexPoints[0],VertexPoints[1080],VertexPoints[720])

AddTriangle(surface,VertexPoints[0+(degrees/detail)],VertexPoints[1080+(degrees/detail)],VertexPoints[360+(degrees/detail)])
AddTriangle(surface,VertexPoints[0+(degrees/detail)],VertexPoints[720+(degrees/detail)],VertexPoints[1080+(degrees/detail)])

Return mesh
End Function
Function Movement(camera,speedfast#=3,speedslow#=1)
mspeedx=MouseXSpeed()
mspeedy=MouseYSpeed()
msensivityX#=mspeedx/2
msensivityY#=mspeedy/2
If mspeedy<>0 Then TurnEntity camera,msensivityy,0 ,0
If mspeedx<>0 Then TurnEntity camera,0,-msensivityX,0
If KeyDown(54) Or KeyDown(42) Then movespeed#=speedslow Else movespeed=speedfast
If KeyDown(32)=True Then MoveEntity camera, movespeed, 0, 0;205
If KeyDown(30)=True Then MoveEntity camera,-movespeed, 0, 0;203
If KeyDown(201)=True Then MoveEntity camera, 0, movespeed, 0;201
If KeyDown(209)=True Then MoveEntity camera, 0,-movespeed, 0;209
If KeyDown(31)=True Then MoveEntity camera, 0, 0,-movespeed;208
If KeyDown(17)=True Then MoveEntity camera, 0, 0, movespeed;200
MoveMouse 512,384
End Function
Projekte: www.amyscbi.de , Wallpapers: www.wallpapers.berlin

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group