Funktions Plotter 3D

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Markus2

Betreff: Funktions Plotter 3D

BeitragSa, Okt 14, 2006 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Cursor Tasten Oben/Unten für Funk. ändern
Links/Rechts Camera drehen .
+- auf Numpad ist Zoom

Geht auch mit Texture siehe REM

Code: [AUSKLAPPEN]

Graphics3D 800,600,16,0
SetBuffer BackBuffer()

Global Piv=CreatePivot()
Global Cam=CreateCamera(Piv)
PositionEntity Cam,0,2,-2
CameraRange Cam,1,30
CameraClsColor Cam,128,128,128

AmbientLight 32,32,32
Global Light=CreateLight(2)
PositionEntity Light,0,10,-10
LightRange Light,10

Global Fu,Fo,T,Br,S
If Fu Then FreeEntity Fu:Fu=0
Fu=CreateMesh()
EntityFX Fu ,2
;T=LoadTexture("texture128.png",8)
Br=CreateBrush(255,255,255)
;BrushTexture Br,T
;ScaleTexture T,1.0/10.0,1.0/10.0
S=CreateSurface(Fu,Br)
 
Global W#,W3#

MainLoop()
End

Function MainLoop()

 Local Scale#=1.0
 Fo=0

 While Not KeyHit(1) ;ESC

  S=GetSurface(Fu,1)
  ClearSurface S,True,True

  Local x#,y#
  Local db

  db=0
  For x=-1.0+0.025 To 1.0-0.025 Step 0.05
  ;db=1-db
  For y=-1.0+0.025 To 1.0-0.025 Step 0.05

   db=1-db
   p1=AddPoint(s,x-0.025,y-0.025,0,0,db)
   p2=AddPoint(s,x+0.025,y-0.025,1,0,db)
   p3=AddPoint(s,x+0.025,y+0.025,1,1,db)
   p4=AddPoint(s,x-0.025,y+0.025,0,1,db)

   If p1>-1 And p2>-1 And p3>-1 And p4>-1 Then
    AddTriangle(S,p1,p3,p2)
    AddTriangle(S,p1,p4,p3)
   EndIf

  Next
  Next

  PointEntity Cam,Fu,0

  If KeyHit(200) Then ;Hoch
   Scale#=1.0
   ScaleEntity Fu,Scale,Scale,Scale
   If Fo<8 Then Fo=Fo+1
  ElseIf KeyHit(208) Then ;Runter
   Scale#=1.0
   ScaleEntity Fu,Scale,Scale,Scale
   If Fo>0 Then Fo=Fo-1
  EndIf

  If KeyDown(203) Then ;Links
   TurnEntity Piv,0,-1,0
  ElseIf KeyDown(205) Then ;Rechts
   TurnEntity Piv,0,1,0
  EndIf

  If KeyHit(78) Then ;+
   If Scale<10.0 Then Scale=Scale+1.0
   ScaleEntity Fu,Scale,Scale,Scale
  ElseIf KeyHit(74) Then ;-
   If Scale>0.25 Then Scale=Scale-0.25
   ScaleEntity Fu,Scale,Scale,Scale
  EndIf

  W=W+1:If W>360 Then W=W-360
  W3=W3+0.333333:If W3>360.0 Then W3=W3-360.0

  RenderWorld
  Flip
  Delay 10
 Wend
 
End Function

Function AddPoint(Sur,x#,y#,u#,v#,db#)

 Local f#,xs#,ys#
 Local vi=0

 ;wenn man eine Texture benutzen möchte
 ;u=(x+1.0)/2.0
 ;v=(y+1.0)/2.0

 Select Fo ;was man sehen will
 Case 0
  f=Sin(Grad(x*2)+W)*Cos(Grad(y*2)+W)
 Case 1
  f=Sin(Grad(x*y+Rad(w*2.0)))*Cos(Grad(y*x+Rad(w*2.0)))
 Case 2
  f=1.0/(15.0*(x^2.0+y^2.0)) ;Tube
 Case 3
  f=(0.4^2.0-(0.6-(x^2.0+y^2.0)^0.5)^2.0)^0.5 ;Torus
  If f>1.0 Then f=0.0:vi=-1
  If f<-1.0 Then f=0.0:vi=-1
 Case 4
  f=Sin(w*4.0+Grad(5.0*(x^2.0+y^2.0)))/5.0 ;Ripple geht
 Case 5
  f=Sin(Grad(5.0*x)+w+y)*Cos(Grad(5.0*y)+w+x)/5.0
 Case 6
  f=(1.0 - x^2 - y^2) ^ 0.5 ;Halb Kugel 
  If f>1.0 Then f=0.0:vi=-1
  If f<-1.0 Then f=0.0:vi=-1
 Case 7
  f=Log(Sqr(x*x+y*y)) ;Loch im Boden
 Case 8
  xs=x*4.0
  ys=y*4.0
  f=CosR(xs)*CosR(Rad(w))+SinR(Rad(w3))
  f=f/2.0
  ;If f>1.0 Then f=1.0:vi=-1
  ;If f<0.0 Then f=0.0;:vi=-1
 End Select

 If vi=0 Then
  vi=AddVertex(Sur,x,f,y,u,v)

  If f<0 Then f=-f
  f=f*5.0
  If f>1.0 Then f=1.0

  VertexColor Sur,vi,255.0*db,255.0*db*f,255.0*db*f
  ;VertexColor Sur,vi,255,255,255 ;<- wenn man eine Texture benutzen möchte
  VertexNormal Sur,vi,0,1,0
 EndIf
 Return vi 

End Function

Function Grad#(Rad#)

 Return (180.0/Pi)*Rad

End Function

Function Rad#(Grad#)

 Return (Pi/180.0)*Grad

End Function

Function SinR#(Rad#)

 Return Sin((180.0/Pi)*Rad)

End Function

Function CosR#(Rad#)

 Return Cos((180.0/Pi)*Rad)

End Function

 

feider

ehemals "Decelion"

BeitragSa, Okt 14, 2006 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
schön gemacht! läuft bei mir recht flüssig.

Markus2

BeitragSa, Okt 14, 2006 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup,

hatte bei nem Kollegen ein Opera Widget gesehen und dachte
das kann man auch mal schnell in BB machen .

Das Delay hast du bestimmt gesehen Wink

Bei manchen Funk. muß man ein Limit für f festlegen.
Wenn die Funk. AddPoint -1 zurück gibt wird keine Fläche erstellt .

Mit Texture kann das auch Anwendung in Spielen haben Cool

tft

BeitragSo, Okt 15, 2006 8:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ...

siet echt gut aus ........
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Black Spider

BeitragSo, Okt 15, 2006 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, sieht wirklich recht schick aus, allerdings vertehe ich net ganz wofür das genau sein soll; ausser für Wasser usw.
ansonsten: Wirklich schick ^^
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

Triton

BeitragSo, Okt 15, 2006 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Joa, sehr schön.
Im Grunde ja so ähnliche wie mein

https://www.blitzforum.de/foru...hp?t=17234

Nur wohl flexibler und in wirklichem 3D Smile
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group