[B2D/B3D] 3D-Funktionsgrapher (neu: stereografisch)

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Froggy

Betreff: [B2D/B3D] 3D-Funktionsgrapher (neu: stereografisch)

BeitragSa, Feb 10, 2007 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich habe einen Pseudo-3D-Funktionsgrapher geschrieben.
Erwartet nichts besonders schönes oder geniales, mir war halt langweilig Wink

NEU: Perspektivischer Grapher in B3D! Danke an hectic und meinen Kollegen Wink
Ausserdem: Stereografischer Funktionsgrapher

(-> Siehe unterste Codebeispiele hier im Titelpost)


Die neusten Versionen der Codes (mit Screenshot-Beispielen):

Plotter:

Punkte: user posted image Linien:user posted image

Code: [AUSKLAPPEN]

Graphics 600,600,32,2
SetBuffer BackBuffer()

Global x#,y#,l

Repeat
Repeat
Cls
If KeyHit(200) Or KeyHit(208) Then l=(l+1) Mod 2
Text 0,0,"   Graph aus Punkten darstellen (enthält viele Lücken)"
Text 0,12,"   Graph aus Linien darstellen (am Besten nur für entweder z>=0 oder z<=0)"
Text 0,l*12,">"
Flip
Until KeyHit(28)

  Cls

  AppTitle "3D-Funktionsgrapher - Bild wird gerendert..."

  For y#=-200 To 200
    Color 128+y/2,128+y/2,128+y/2
    For x#=-200 To 200

      drawfunc( Sin(Sqr(x^2+y^2)*10)*100 ) ; Hier Graphenfunktion eingeben (diese Zeile für mehr Funktionen kopieren)

    Next
    Flip
  Next

  AppTitle "3D-Funktionsgrapher"

  FlushKeys

Repeat
If KeyHit(1) Then End
Until KeyHit(28)

Forever


Function drawfunc(z)
  If l=0 Then Plot 300+x+y*0.5,300+y*0.5-z
  If l=1 And z>-9999999 And z<9999999 Then Line 300+x+y*0.5,300+y*0.5,300+x+y*0.5,300+y*0.5-z
End Function



Frei drehbares Gitter:
user posted image

Code: [AUSKLAPPEN]

Graphics 600,600,32,2
SetBuffer BackBuffer()

Global rx#,ry#,w#,wz#
Dim z(2)

Repeat

  If KeyDown(205) Then w#=(w#+1) Mod 360
  If KeyDown(203) Then w#=(w#-1+360) Mod 360
  If KeyDown(200) Then wz#=(wz#+1) Mod 360
  If KeyDown(208) Then wz#=(wz#-1+360) Mod 360

  Cls
  AppTitle "3D-Funktionsgrapher"

  For ry#=-200 To 200 Step 10
    For rx#=-200 To 200 Step 10

For i = 0 To 2
x#=rx+(i=1)*10:y#=ry+(i=2)*10
z(i)= Sin(Sqr(x^2+y^2)*2)*100 ; Hier Funktion eingeben (diesen Zeilenblock für mehr Funktionen kopieren)
Next:drawfunc()


    Next
  Next

  Text 0,0,"Winkel x,y: "+w+"°"
  Text 0,12,"Winkel z: "+wz+"°"
  Flip

Forever

Function drawfunc()
  If z(0)>-9999999 And z(0)<9999999 And z(1)>-9999999 And z(1)<9999999 Then
    Line 300+rx*Cos(w)+ry*Sin(w),300+ry*Cos(w)*Sin(wz)-rx*Sin(w)*Sin(wz)-z(0)*Cos(wz),300+(rx+10)*Cos(w)+ry*Sin(w),300+ry*Cos(w)*Sin(wz)-(rx+10)*Sin(w)*Sin(wz)-z(1)*Cos(wz)
  EndIf

  If z(0)>-9999999 And z(0)<9999999 And z(2)>-9999999 And z(2)<9999999 Then
    Line 300+rx*Cos(w)+ry*Sin(w),300+ry*Cos(w)*Sin(wz)-rx*Sin(w)*Sin(wz)-z(0)*Cos(wz),300+rx*Cos(w)+(ry+10)*Sin(w),300+(ry+10)*Cos(w)*Sin(wz)-rx*Sin(w)*Sin(wz)-z(2)*Cos(wz)
  EndIf
End Function



Ausgefüllte Form:
user posted image

Code: [AUSKLAPPEN]

Graphics 600,600,32,2
SetBuffer BackBuffer()

Global rx#,ry#
Dim z(3)

Repeat
  Cls
  AppTitle "3D-Funktionsgrapher - Bild wird gerendert..."

  For ry#=-200 To 200 Step 2
    Color 128+ry/2,128+ry/2,128+ry/2
    For rx#=-200 To 200 Step 2



For i = 0 To 3
x#=rx+(i=1)*2+(i=3)*2:y#=ry+(i=2)*2+(i=3)*2
z(i)= -Sin(Sqr(x^2+y^2))*100 ; Hier Funktion eingeben (diesen Zeilenblock für mehr Funktionen kopieren)
Next:drawfunc()



    Next
    Flip
  Next

  AppTitle "3D-Funktionsgrapher"

  FlushKeys

  Repeat
    If KeyHit(1) Then End
  Until KeyHit(28)

  Forever

;Drawfunc
Function drawfunc()
  If z(0)>-9999999 And z(0)<9999999 And z(1)>-9999999 And z(1)<9999999 And z(2)>-9999999 And z(2)<9999999 Then
    triangle(300+rx+ry*0.5,300+ry*0.5-z(0),300+(rx+2)+ry*0.5,300+ry*0.5-z(1),300+rx+(ry+2)*0.5,300+(ry+2)*0.5-z(2),1)
  EndIf

  If z(3)>-9999999 And z(3)<9999999 And z(1)>-9999999 And z(1)<9999999 And z(2)>-9999999 And z(2)<9999999 Then
    triangle(300+(rx+2)+(ry+2)*0.5,300+(ry+2)*0.5-z(3),300+(rx+2)+ry*0.5,300+ry*0.5-z(1),300+rx+(ry+2)*0.5,300+(ry+2)*0.5-z(2),1)
  EndIf
End Function

;Dreieck
Function triangle(x1#,y1#,x2#,y2#,x3#,y3#,a) ;triangle(x1,y1,x2,y2,x3,y3,gefüllt?)

  Line x1,y1,x2,y2
  Line x2,y2,x3,y3
  Line x3,y3,x1,y1

  If a = 1 Then

    If x2<=x1 Then p=x2:x2=x1:x1=p : p=y2:y2=y1:y1=p
    If x3<=x1 Then p=x3:x3=x1:x1=p : p=y3:y3=y1:y1=p
    If x2<=x3 Then p=x2:x2=x3:x3=p : p=y2:y2=y3:y3=p

    For I = x1 To x3
      If x1<>x2 Or x2<>x3 Or x1<>x3 Then
        If x1=x3 Then
          Line I,y1+(y2-y1)/(x2-x1)*(I-x1),I,y1
        Else
          Line I,y1+(y2-y1)/(x2-x1)*(I-x1),I,y1+(y3-y1)/(x3-x1)*(I-x1)
        EndIf
      EndIf
    Next

    For I = x3 To x2
      If x1<>x2 Or x2<>x3 Or x1<>x3 Then
        If x2=x3 Then
          Line I,y1+(y2-y1)/(x2-x1)*(I-x1),I,y2
        Else
          Line I,y1+(y2-y1)/(x2-x1)*(I-x1),I,y2+(y2-y3)/(x2-x3)*(I-x2)
        EndIf
      EndIf
    Next
  EndIf
End Function
;/Dreieck



Mit Textur:
user posted image

Code: [AUSKLAPPEN]

Graphics 600,600,32,2
SetBuffer BackBuffer()

Global rx#,ry#
Dim z(3)

bild = LoadImage(Input("Bildpfad: "))

Repeat
  Cls
  AppTitle "3D-Funktionsgrapher - Bild wird gerendert..."

  For ry#=-200 To 198 Step 2
    For rx#=-200 To 198 Step 2

rgb=ReadPixel((rx/400+0.5)*ImageWidth(bild),(ry/400+0.5)*ImageHeight(bild),ImageBuffer(bild))
r=(rgb Shr 16) And $FF
g=(rgb Shr 8) And $FF
b=rgb And $FF
Color r,g,b

For i = 0 To 3
x#=rx+(i=1)*2+(i=3)*2:y#=ry+(i=2)*2+(i=3)*2
z(i)= Sqr((200-100)^2/4-(Sqr(x^2+y^2)-(200+100)/2)^2) ; Hier Funktion eingeben (diesen Zeilenblock für mehr Funktionen kopieren)
Next:drawfunc()

For i = 0 To 3
x#=rx+(i=1)*2+(i=3)*2:y#=ry+(i=2)*2+(i=3)*2
z(i)= -Sqr((200-100)^2/4-(Sqr(x^2+y^2)-(200+100)/2)^2) ; Hier Funktion eingeben (diesen Zeilenblock für mehr Funktionen kopieren)
Next:drawfunc()


    Next
    Flip
  Next

  AppTitle "3D-Funktionsgrapher"

  FlushKeys

  Repeat
    If KeyHit(1) Then End
  Until KeyHit(28)

  Forever

;Drawfunc
Function drawfunc()
  If z(0)>-9999999 And z(0)<9999999 And z(1)>-9999999 And z(1)<9999999 And z(2)>-9999999 And z(2)<9999999 Then
    triangle(300+rx+ry*0.5,300+ry*0.5-z(0),300+(rx+2)+ry*0.5,300+ry*0.5-z(1),300+rx+(ry+2)*0.5,300+(ry+2)*0.5-z(2),1)
  EndIf

  If z(3)>-9999999 And z(3)<9999999 And z(1)>-9999999 And z(1)<9999999 And z(2)>-9999999 And z(2)<9999999 Then
    triangle(300+(rx+2)+(ry+2)*0.5,300+(ry+2)*0.5-z(3),300+(rx+2)+ry*0.5,300+ry*0.5-z(1),300+rx+(ry+2)*0.5,300+(ry+2)*0.5-z(2),1)
  EndIf
End Function

;Dreieck
Function triangle(x1#,y1#,x2#,y2#,x3#,y3#,a) ;triangle(x1,y1,x2,y2,x3,y3,gefüllt?)

  Line x1,y1,x2,y2
  Line x2,y2,x3,y3
  Line x3,y3,x1,y1

  If a = 1 Then

    If x2<=x1 Then p=x2:x2=x1:x1=p : p=y2:y2=y1:y1=p
    If x3<=x1 Then p=x3:x3=x1:x1=p : p=y3:y3=y1:y1=p
    If x2<=x3 Then p=x2:x2=x3:x3=p : p=y2:y2=y3:y3=p

    For I = x1 To x3
      If x1<>x2 Or x2<>x3 Or x1<>x3 Then
        If x1=x3 Then
          Line I,y1+(y2-y1)/(x2-x1)*(I-x1),I,y1
        Else
          Line I,y1+(y2-y1)/(x2-x1)*(I-x1),I,y1+(y3-y1)/(x3-x1)*(I-x1)
        EndIf
      EndIf
    Next

    For I = x3 To x2
      If x1<>x2 Or x2<>x3 Or x1<>x3 Then
        If x2=x3 Then
          Line I,y1+(y2-y1)/(x2-x1)*(I-x1),I,y2
        Else
          Line I,y1+(y2-y1)/(x2-x1)*(I-x1),I,y2+(y2-y3)/(x2-x3)*(I-x2)
        EndIf
      EndIf
    Next
  EndIf
End Function
;/Dreieck



Perspektivisch [B3D]:
user posted image user posted image

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
BackBuffer()

AppTitle "3D-Funktionsgrapher (Perspektive)"

Print "Pfeiltasten: Objekt drehen"
Print "A: Nach vorne fahren"
Print "Y: Nach hinten fahren"
Print "W: Wireframe an/aus"
WaitKey


Dim v(200,200,3)
Dim z#(3)

Global rx#,ry#

cam=CreateCamera()
PositionEntity cam,0,0,-300

mesh=CreateMesh()
EntityFX mesh,3
surface=CreateSurface(mesh)

For ry=-100 To 100 Step 2
  For rx = -100 To 100 Step 2


For i = 0 To 3
x=rx+(i=1)*2+(i=3)*2:y=ry+(i=2)*2+(i=3)*2
z(i)=Sin(Sqr(x^2+y^2)*2.5)*100 ; Hier Graphenfunktion eingeben
Next


    If z(0)<999999 And z(0)>-999999 And z(1)<999999 And z(1)>-999999 And z(2)<999999 And z(2)>-999999 And z(3)<999999 And z(3)>-999999 Then
      v(ry+100,rx+100,0)=AddVertex(surface,rx,z(0),ry)
      v(ry+100,rx+100,1)=AddVertex(surface,rx+2,z(1),ry)
      v(ry+100,rx+100,2)=AddVertex(surface,rx,z(2),ry+2)
      v(ry+100,rx+100,3)=AddVertex(surface,rx+2,z(3),ry+2)

      For i = 0 To 3
        VertexColor surface,v(ry+100,rx+100,i),128+z(i),128+z(i),128+z(i),1
      Next


      AddTriangle(surface,v(ry+100,rx+100,0),v(ry+100,rx+100,1),v(ry+100,rx+100,2))
      AddTriangle(surface,v(ry+100,rx+100,2),v(ry+100,rx+100,1),v(ry+100,rx+100,0))

      AddTriangle(surface,v(ry+100,rx+100,1),v(ry+100,rx+100,3),v(ry+100,rx+100,2))
      AddTriangle(surface,v(ry+100,rx+100,2),v(ry+100,rx+100,3),v(ry+100,rx+100,1))

    EndIf

  Next
Next


While Not KeyHit(1)

  If KeyDown(205) Then RotateMesh mesh,0,1,0
  If KeyDown(203) Then RotateMesh mesh,0,-1,0
  If KeyDown(200) Then RotateMesh mesh,1,0,0
  If KeyDown(208) Then RotateMesh mesh,-1,0,0
  If KeyDown(30) And EntityZ(cam)<0 Then MoveEntity cam,0,0,2
  If KeyDown(44) And EntityZ(cam)>-500 Then MoveEntity cam,0,0,-2

  If KeyHit(17) Then w=(w+1) Mod 2

  If w=1 Then
    WireFrame(1)
  Else
    WireFrame(0)
  EndIf

  UpdateWorld
  RenderWorld
  Flip
Wend

ClearWorld()
End



Perspektivisch mit Textur [B3D]:
user posted image

Code: [AUSKLAPPEN]

Graphics3D 400,400,32,2
BackBuffer()

AppTitle "3D-Funktionsgrapher (Perspektive)"

Print "Pfeiltasten: Objekt drehen"
Print "W: Wireframe an/aus"

bild = LoadImage(Input("Bildpfad: "))

Dim v(200,200,3)
Dim z#(3)

Global rx#,ry#

cam=CreateCamera()
PositionEntity cam,0,0,-300

mesh=CreateMesh()
EntityFX mesh,3
surface=CreateSurface(mesh)

For ry=-100 To 100 Step 2
  For rx = -100 To 100 Step 2


For i = 0 To 3
x=rx+(i=1)*2+(i=3)*2:y=ry+(i=2)*2+(i=3)*2
z(i)=Sin(Sin(x*2)*Cos(y*2)*360)*50 ; Hier Graphenfunktion eingeben
Next


    If z(0)<999999 And z(0)>-999999 And z(1)<999999 And z(1)>-999999 And z(2)<999999 And z(2)>-999999 And z(3)<999999 And z(3)>-999999 Then
      v(ry+100,rx+100,0)=AddVertex(surface,rx,z(0),ry)
      v(ry+100,rx+100,1)=AddVertex(surface,rx+2,z(1),ry)
      v(ry+100,rx+100,2)=AddVertex(surface,rx,z(2),ry+2)
      v(ry+100,rx+100,3)=AddVertex(surface,rx+2,z(3),ry+2)

      rgb=ReadPixel((rx/200+0.5)*ImageWidth(bild),(ry/200+0.5)*ImageHeight(bild),ImageBuffer(bild))
      r=(rgb Shr 16) And $FF
      g=(rgb Shr 8) And $FF
      b=rgb And $FF

      For i = 0 To 3
        VertexColor surface,v(ry+100,rx+100,i),r,g,b
      Next


      AddTriangle(surface,v(ry+100,rx+100,0),v(ry+100,rx+100,1),v(ry+100,rx+100,2))
      AddTriangle(surface,v(ry+100,rx+100,2),v(ry+100,rx+100,1),v(ry+100,rx+100,0))

      AddTriangle(surface,v(ry+100,rx+100,1),v(ry+100,rx+100,3),v(ry+100,rx+100,2))
      AddTriangle(surface,v(ry+100,rx+100,2),v(ry+100,rx+100,3),v(ry+100,rx+100,1))

    EndIf

  Next
Next


While Not KeyHit(1)

  If KeyDown(205) Then RotateMesh mesh,0,1,0
  If KeyDown(203) Then RotateMesh mesh,0,-1,0
  If KeyDown(200) Then RotateMesh mesh,1,0,0
  If KeyDown(208) Then RotateMesh mesh,-1,0,0

  UpdateWorld
  RenderWorld
  Flip
Wend

ClearWorld()
End



Stereografisch [B3D]:
Theorie: Wikipedia
Parallelblick: user posted image Kreuzblick: user posted image

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
BackBuffer()


AppTitle "3D-Funktionsgrapher (Stereografisch)"

s=-1
Repeat
Cls
If KeyHit(200) Or KeyHit(208) Then s=-s
Text 0,0,"Welche Blickmethode?"
Text 0,12,"   Parallelblick (linkes Bild fürs linke Auge - rechtes Bild fürs rechte Auge)"
Text 0,24,"   Kreuzblick (linkes Bild fürs rechte Auge - rechtes Bild fürs linke Auge)"
Text 0,12+(s+1)*6,">"
Flip
Until KeyHit(28)
FlushKeys()

Cls

Print "Pfeiltasten: Objekt drehen"
Print "A: Nach vorne fahren"
Print "Y: Nach hinten fahren"
Print "W: Wireframe an/aus"
WaitKey


Dim v(200,200,3)
Dim z#(3)

Global rx#,ry#

cam=CreateCamera()
PositionEntity cam,7*s,0,-300
CameraViewport cam,0,0,400,600
cam2=CreateCamera()
PositionEntity cam2,(-7)*s,0,-300
CameraViewport cam2,400,0,400,600

mesh=CreateMesh()
EntityFX mesh,3
surface=CreateSurface(mesh)

For ry=-100 To 100 Step 2
  For rx = -100 To 100 Step 2


For i = 0 To 3
x=rx+(i=1)*2+(i=3)*2:y=ry+(i=2)*2+(i=3)*2
z(i)=Sin(Sqr(x^2+y^2)*10)*40  ; Hier Graphenfunktion eingeben
Next


    If z(0)<999999 And z(0)>-999999 And z(1)<999999 And z(1)>-999999 And z(2)<999999 And z(2)>-999999 And z(3)<999999 And z(3)>-999999 Then
      v(ry+100,rx+100,0)=AddVertex(surface,rx,z(0),ry)
      v(ry+100,rx+100,1)=AddVertex(surface,rx+2,z(1),ry)
      v(ry+100,rx+100,2)=AddVertex(surface,rx,z(2),ry+2)
      v(ry+100,rx+100,3)=AddVertex(surface,rx+2,z(3),ry+2)

      For i = 0 To 3
        VertexColor surface,v(ry+100,rx+100,i),128+z(i),128+z(i),128+z(i),1
      Next


      AddTriangle(surface,v(ry+100,rx+100,0),v(ry+100,rx+100,1),v(ry+100,rx+100,2))
      AddTriangle(surface,v(ry+100,rx+100,2),v(ry+100,rx+100,1),v(ry+100,rx+100,0))

      AddTriangle(surface,v(ry+100,rx+100,1),v(ry+100,rx+100,3),v(ry+100,rx+100,2))
      AddTriangle(surface,v(ry+100,rx+100,2),v(ry+100,rx+100,3),v(ry+100,rx+100,1))

    EndIf

  Next
Next


While Not KeyHit(1)

  If KeyDown(205) Then RotateMesh mesh,0,1,0
  If KeyDown(203) Then RotateMesh mesh,0,-1,0
  If KeyDown(200) Then RotateMesh mesh,1,0,0
  If KeyDown(208) Then RotateMesh mesh,-1,0,0
  If KeyDown(30) And EntityZ(cam)<0 Then MoveEntity cam,0,0,2: MoveEntity cam2,0,0,2
  If KeyDown(44) And EntityZ(cam)>-500 Then MoveEntity cam,0,0,-2: MoveEntity cam2,0,0,-2

  If KeyHit(17) Then w=(w+1) Mod 2

  If w=1 Then
    WireFrame(1)
  Else
    WireFrame(0)
  EndIf



  UpdateWorld
  RenderWorld

  Flip
Wend

ClearWorld()
End



Stereografisch mit Textur [B3D]:
Theorie: Wikipedia
Parallelblick: user posted image Kreuzblick: user posted image
Code: [AUSKLAPPEN]

Graphics3D 400,300,32,2
BackBuffer()

AppTitle "3D-Funktionsgrapher (Stereografisch-Textur)"

bild = LoadImage(Input("Bildpfad: "))
FlushKeys()

s=-1
Repeat
Cls
If KeyHit(200) Or KeyHit(208) Then s=-s
Text 0,0,"Welche Blickmethode?"
Text 0,12,"   Parallelblick (linkes Bild fürs linke Auge)"
Text 0,24,"   Kreuzblick (linkes Bild fürs rechte Auge)"
Text 0,12+(s+1)*6,">"
Flip
Until KeyHit(28)
FlushKeys()

Cls:Locate 0,0
Print "Pfeiltasten: Objekt drehen"
Print "A: Nach vorne fahren"
Print "Y: Nach hinten fahren"
Print "W: Wireframe an/aus"
WaitKey


Dim v(200,200,3)
Dim z#(3)

Global rx#,ry#

cam=CreateCamera()
PositionEntity cam,7*s,0,-300
CameraViewport cam,0,0,200,300
cam2=CreateCamera()
PositionEntity cam2,(-7)*s,0,-300
CameraViewport cam2,200,0,200,300

mesh=CreateMesh()
EntityFX mesh,3
surface=CreateSurface(mesh)

For ry=-100 To 100 Step 2
  For rx = -100 To 100 Step 2


For i = 0 To 3
x=rx+(i=1)*2+(i=3)*2:y=ry+(i=2)*2+(i=3)*2
z(i)=Sin((Cos(x)-x*y)/10)*40  ; Hier Graphenfunktion eingeben
Next


    If z(0)<999999 And z(0)>-999999 And z(1)<999999 And z(1)>-999999 And z(2)<999999 And z(2)>-999999 And z(3)<999999 And z(3)>-999999 Then
      v(ry+100,rx+100,0)=AddVertex(surface,rx,z(0),ry)
      v(ry+100,rx+100,1)=AddVertex(surface,rx+2,z(1),ry)
      v(ry+100,rx+100,2)=AddVertex(surface,rx,z(2),ry+2)
      v(ry+100,rx+100,3)=AddVertex(surface,rx+2,z(3),ry+2)

      rgb=ReadPixel((rx/200+0.5)*ImageWidth(bild),(ry/200+0.5)*ImageHeight(bild),ImageBuffer(bild))
      r=(rgb Shr 16) And $FF
      g=(rgb Shr 8) And $FF
      b=rgb And $FF

      For i = 0 To 3
        VertexColor surface,v(ry+100,rx+100,i),r,g,b
      Next


      AddTriangle(surface,v(ry+100,rx+100,0),v(ry+100,rx+100,1),v(ry+100,rx+100,2))
      AddTriangle(surface,v(ry+100,rx+100,2),v(ry+100,rx+100,1),v(ry+100,rx+100,0))

      AddTriangle(surface,v(ry+100,rx+100,1),v(ry+100,rx+100,3),v(ry+100,rx+100,2))
      AddTriangle(surface,v(ry+100,rx+100,2),v(ry+100,rx+100,3),v(ry+100,rx+100,1))

    EndIf

  Next
Next


While Not KeyHit(1)

  If KeyDown(205) Then RotateMesh mesh,0,1,0
  If KeyDown(203) Then RotateMesh mesh,0,-1,0
  If KeyDown(200) Then RotateMesh mesh,1,0,0
  If KeyDown(208) Then RotateMesh mesh,-1,0,0
  If KeyDown(30) And EntityZ(cam)<0 Then MoveEntity cam,0,0,2: MoveEntity cam2,0,0,2
  If KeyDown(44) And EntityZ(cam)>-500 Then MoveEntity cam,0,0,-2: MoveEntity cam2,0,0,-2

  If KeyHit(17) Then w=(w+1) Mod 2

  If w=1 Then
    WireFrame(1)
  Else
    WireFrame(0)
  EndIf



  UpdateWorld
  RenderWorld

  Flip
Wend

ClearWorld()
End
  • Zuletzt bearbeitet von Froggy am Fr, Jul 06, 2007 19:14, insgesamt 25-mal bearbeitet

ToeB

BeitragSa, Feb 10, 2007 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also :

Erstmal Ein sehr großes Lob an dich !

sieht cool aus !!
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Froggy

BeitragSa, Feb 10, 2007 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht so, hätte lieber so etwas:
http://www.arndt-bruenner.de/m...tter3d.htm

Aber das ist nun wirklich zu schwer für mich Wink

Blitzcoder

Newsposter

BeitragSa, Feb 10, 2007 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist das für das Codearchiv würdig? Ich finde nicht, denn das kann sich jeder innerhalb von 5 Minuten selber coden. Ausserdem ist der Code kein Bisschen formatiert...
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
 

Froggy

BeitragSa, Feb 10, 2007 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal: Was meinst du mit formatiert?

Und ja, du hast recht. Es ist einfach, aber mir geht es dabei um die Idee. Man muss ja irgendwie drauf kommen.

Falls ein Mod trotzdem etwas dagegen hat: Einfach Thread löschen oder closen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Feb 10, 2007 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Formatierter Code: [AUSKLAPPEN]
While Not KeyHit(1)
  For Y=0 to 7
    For X=0 to 7
      ...machwas...
    Next
  Next
Wend
End

Unformatierter Code: [AUSKLAPPEN]
While Not KeyHit(1)
For Y=0 to 7
For X=0 to 7
...machwas...
Next
Next
Wend
End
 

Froggy

BeitragSa, Feb 10, 2007 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, das ist bei einem so kurzen Code ja nicht weiter schlimm.

Aber ich habs trotzdem mal gemacht:

EDIT: Code entfernt. Alle Codes sind im Titelpost zu finden.
  • Zuletzt bearbeitet von Froggy am So, Feb 11, 2007 14:22, insgesamt einmal bearbeitet

ToeB

BeitragSa, Feb 10, 2007 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
@froggy : gib mal auf der I-Seite die du angegebne hast, folgendes ein:
Code: [AUSKLAPPEN]

sin(sqr(x*x+y*y)+x^2-y^2)

sieht auch gut aus ^^
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Froggy

BeitragSa, Feb 10, 2007 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, toll ^^

Ich hab noch eine Grapher-Form programmiert, die die Form aus gefüllten Dreiecken zusammensetzt:

EDIT: Code entfernt. Alle Codes sind im Titelpost zu finden.
  • Zuletzt bearbeitet von Froggy am So, Feb 11, 2007 14:22, insgesamt einmal bearbeitet
 

FWeinb

ehemals "ich"

BeitragSo, Feb 11, 2007 11:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ganze schwängbar machen wird wohl nicht gehen oder also mit ist keine Idee gekommen (wir wohl sehr langsam sein)
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

flashmaxel

BeitragSo, Feb 11, 2007 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht schon allerdings nicht mit so vielen Renderschritten. Wenn man das ganze reduziert kommt man schon auf eine akzeptable Geschwindigkeit ...

Code: [AUSKLAPPEN]
For ry#=-200 To 200 Step 10       ;<---- renderschritte
Color 128+ry/2,128+ry/2,128+ry/2
For rx#=-200 To 200 Step 10       ;<---- renderschritte


Übrigends wenn man statt Plot Rect nimmt sieht es noch schöner aus. Man kann auch recht einfach eine Pseudo Textur draufrendern - sieht auch interessant aus ...
Real C programmers never die; they cast to void.
 

Froggy

BeitragSo, Feb 11, 2007 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ja den Gitter-Grapher gemacht, der recht schnell rendert, wenn man das Flip unter das darauffolgende Next setzt.
Man könnte also wie auf dieser Internetseite bei Bewegung nur das Gitter anzeigen und es sonst rendern lassen.

EDIT:
Mal ein Anfang. Man kann das Ding nach links oder rechts drehen. Werde mich gleich an oben und unten setzen Wink

EDIT: Code entfernt. Alle Codes sind im Titelpost zu finden.

EDIT 2: Die andere Drehung ist mir zu schwer, bitte helft mir!
  • Zuletzt bearbeitet von Froggy am So, Feb 11, 2007 14:22, insgesamt einmal bearbeitet
 

FWeinb

ehemals "ich"

BeitragSo, Feb 11, 2007 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab jetzt keine Idee zur drehung nur ist mir aufgefallen das das füllen mit

dem code hier wesentlch schneller geht

Code: [AUSKLAPPEN]


Graphics 600,600,32,2
SetBuffer BackBuffer()

Global x#,y#

Repeat
  Cls
  AppTitle "3D-Funktionsgrapher - Bild wird gerendert..."

  For y#=-200 To 200
    Color 128+y/2,128+y/2,128+y/2
    For x#=-200 To 200

      drawfunc( Sin(Sqr(x^2+y^2)*2)*50 ) ; Hier Graphenfunktion eingeben (diese Zeile für mehr Funktionen kopieren)

    Next
    Flip
  Next

  AppTitle "3D-Funktionsgrapher"

  FlushKeys

  Repeat
    If KeyHit(1) Then End
  Until KeyHit(28)

Forever


Function drawfunc(z)
  Rect 300+x+y*0.5,300+y*0.5-z,5,5
End Function
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

Froggy

BeitragSo, Feb 11, 2007 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht halt an den Rändern nicht so toll aus.
Es geht mir ja eigentlich nicht darum, etwas Drehbares zu machen, sondern möglichst schöne Bilder zu rendern.

Ich füge mal alle verschiedenen Modi dem Anfangspost hinzu.

EDIT: Ich hab mal herumexperimentiert und einen Texturen-Modus geschrieben, bei dem ein beliebiges Bild über die Form gelegt wird.
Sieht mit den Windows-Beispielbildern gar nicht mal so schlecht aus.

EDIT: Siehe 4. Codebeispiel im Titelpost

EDIT 2: Habe ein Screenshot-Beispiel zum Titel-Post hinzugefügt.
 

Froggy

BeitragSo, Feb 25, 2007 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry für den Doppelpost, aber ich muss den Thread mal ein bisschen pushen.

Ich hab es nun endlich hingekriegt, den Gittermodus frei drehbar zu machen (war gar nicht so schwer, nur ein bisschen ein Sinus- und Cosinus-Dschungel)

Weiter habe ich noch Screenshots zu jedem Modus hinzugefügt.

Gruss,
Froggy

PS: Falls das Desinteresse weiter bestehen bleibt, werde ich euch natürlich mit weiteren Doppelposts verschonen.
 

FWeinb

ehemals "ich"

BeitragSo, Feb 25, 2007 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke das du das schwenkbar gemacht hast sieht super aus Danke
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

Froggy

BeitragMi, Feb 28, 2007 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe nun auch (mit Hilfe eines Kollegen) einen Modus in B3D geschrieben (siehe Titelpost, unterster Code).
Sieht im Wireframe-Modus nicht schlecht aus, jedoch macht noch der ausgefüllte Modus Probleme.
Lights haben irgendwie keinen Einfluss auf die Form und wie man Triangles färbt, weiss weder ich noch mein Kollege).

Bitte um Hilfe!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 28, 2007 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal ein Farbbeispiel:

Nach CreateMesh()
Code: [AUSKLAPPEN]
EntityFX mesh,3

Nach den AddVertex -Befehlen
Code: [AUSKLAPPEN]
VertexColor surface,v(ry+100,rx+100,0),128-z(0)*2,255-z(0)*2,128,1
VertexColor surface,v(ry+100,rx+100,1),128-z(1)*2,255-z(1)*2,128,1
VertexColor surface,v(ry+100,rx+100,2),128-z(2)*2,255-z(2)*2,128,1
VertexColor surface,v(ry+100,rx+100,3),128-z(3)*2,255-z(3)*2,128,1

Farbanpassungen habe ich jetzt nicht gemacht. Kann also sein, das die eine oder andere Farbe aus dem Wertebereich raus geht. Was aber kein Problem ist, da Blitz diese dann korrigiert.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Froggy

BeitragMi, Feb 28, 2007 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke! Jetzt hab ich es vollständig hingekriegt Very Happy !
Natürlich wäre Beleuchtung besser, aber das tut's auch.

@ all: Neue Versionen in B3D im Titelpost (unterste beide Codebeispiele)
 

Froggy

BeitragDo, Jun 28, 2007 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Seit längerem melde ich mich wieder mal, denn ich habe meinen 3D-Funktionsgrapher erweitert. Nun ist er sogar stereografisch, das heisst, man kann den Funktionsgraphen mit einer stereoskopischen Blicktechnik, dem Kreuz- oder Parallelblick, mit Tiefenwirkung wahrnehmen.
Für 3D-Brillen ist der Grapher leider nicht gedacht, da es (mit meinem Algorithmus) mehrere Sekunden benötigt, um ein 3D-Brillen-Bild aus zwei stereoskopischen Halbbildern zu rendern. Wer eine schnellere Methode kennt, einfach ins Programm einbauen, ist ja open-source.

Für den stereografischen Funktionsgrapher siehe unterster Code im Titelpost

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group