Kuchendiagramm?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Der Eisvogel

Betreff: Kuchendiagramm?

BeitragSo, Aug 30, 2009 10:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
Ich würde gerne in B3D ein 3D-Kuchendiagramm wie in Excel erstellen. Aber ich habe keine Ahnung wie.
Ich hatte gedacht, ich erstelle einen Zylinder und skaliere diesen in die Breite und Tiefe. Das geht auch. Aber wie ich jetzt eine Texture draf bekomme, dass das wie ein 3D-Kuchendiagramm aussieht weiß icht nicht.
Geht das überhaupt? Gibt es eine bessere Lösung?

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

ToeB

BeitragSo, Aug 30, 2009 10:36
Antworten mit Zitat
Benutzer-Profile anzeigen
1. lösung : Wie du schon gesagt hast, einfach einen cylinder nehmen und den so auf die größe scallieren, das er die größe des gesammten Kuchendiagramm hat. Dann nur noch eine Texture erstellen, die so aussieht, wie ein kuchen diagramm nur halt das es kein kreis sein soll sondern ein rechteeck, und das legst du dann auf den cylinder und verschiebst die texture mit PositionTexture.

2.Lösung : Du kannst dir ja eine Function oder Algorythmus schreiben, der immer ein Teil stück erstellt (dann mit AddVertEx, AddTriangle und Sin/COS etc.)..


mfg ToeB
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!

Der Eisvogel

BeitragSo, Aug 30, 2009 11:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie genau sollte diese Texture aussehen? Kannst du mal ein Dummi Bild machen? Bin auf dem Gebiet 3D sehr unerfahren.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Aug 30, 2009 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal eines gemacht. Fuchs dich da rein, dann verstehst du es auch. Ist ganz einfach Wink

Code: [AUSKLAPPEN]
Graphics3D 1024,768,0,2
SetBuffer BackBuffer()

Local Timer=CreateTimer(60)
Local Camera=CreateCamera()

Local Diagram=CreateDiagram(0,0,5, 0,0,0)

PaintDiagram(Diagram,0,20, 2, 255,0,0)
PaintDiagram(Diagram,20,30, 2, 255,255,0)
PaintDiagram(Diagram,30,70, 2, 0,255,0)
PaintDiagram(Diagram,70,90, 2, 0,255,255)
PaintDiagram(Diagram,90,100, 2, 255,0,255)




While Not KeyHit(1)
   
   TurnEntity Diagram,1,0,0
   
   If KeyHit(57) Then ClearDiagram(Diagram)
   
   WaitTimer Timer
   RenderWorld
   Flip 0
Wend
End




Function CreateDiagram(FXP#,FYP#,FZP#,FXR#,FYR#,FZR#)
   
   Local IMesh%=CreateMesh()
   Local IFace%=CreateSurface(IMesh)
   
   PositionEntity IMesh,FXP,FYP,FZP
   RotateEntity IMesh,FXR,FYR,FZR
   EntityFX IMesh,1+2+16+32
   
   Return IMesh
   
End Function
Function PaintDiagram(FHandle%,FVon%,FBis%,FRadius#=2,FR%=255,FG%=0,FB%=0)
   
   FVon=FVon*3.60
   FBis=FBis*3.60
   
   Local ICount#
   Local XS#,YS#
   Local IFace%
   Local IVC%
   Local IV1%
   Local IV2%
   
   IFace=GetSurface(FHandle,1)
   
   If CountTriangles(IFace)>8192 Then RuntimeError "Man sollte auch mal 'ClearDiagram' ausführen!"
   
   If FVon>-360 Then
      If FBis<+720 Then
         
         IVC=AddVertex(IFace,0,0,0)
         VertexColor IFace,IVC,FR/2,FG/2,FB/2
         
         For ICount=FVon To FBis+1
            
            XS=Sin(ICount)*FRadius
            YS=Cos(ICount)*FRadius
            
            IV1=AddVertex(IFace,XS,YS,0)
            VertexColor IFace,IV1,FR,FG,FB
            
            If ICount<>FVon Then AddTriangle(IFace,IVC,IV2,IV1)
            IV2=IV1
         Next
      End If
   End If
   
End Function
Function ClearDiagram(FHandle%)
   
   ClearSurface GetSurface(FHandle,1)
   
End Function
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Eingeproggt

BeitragSo, Aug 30, 2009 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Verflixt... Ich wollte auch was probieren und dann kommt hectic mir zuvor Smile

Naja, interessierte mcih einfach mit dem Erstellen per AddVertex und AddTriangle und damit ichs nicht umsonst gemacht hab, hier mein Versuch:

Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Local cam=CreateCamera()
PositionEntity cam,0,1,-10

Local timer=CreateTimer(50)

Type anteil
   Field percent#
End Type

;Das Erstellen der Teile ginge sicher noch eleganter...
Local temp.anteil=New anteil
temp\percent=0.1
temp.anteil=New anteil
temp\percent=0.3
temp.anteil=New anteil
temp\percent=0.4
temp.anteil=New anteil
temp\percent=0.2

Local test=Kuchendiagramm(5,2)
RotateEntity test,-30,0,0

Repeat
   WireFrame KeyDown(15)
   TurnEntity test,0,1,0
   
   RenderWorld
   WaitTimer timer
   Flip 0:Cls
Until KeyHit(1)
End

Function Kuchendiagramm(r,height)
   Local mesh=CreateMesh()
   EntityFX mesh,2
   Local mesh2
   Local w=0
   Local anteil.anteil
   For anteil=Each anteil
      mesh2=KreisSegment(5,2,360*anteil\percent,Rand(0,255),Rand(0,255),Rand(0,255))
      RotateMesh mesh2,0,w,0
      AddMesh mesh2,mesh
      FreeEntity mesh2
      w=w+360*anteil\percent
   Next
   Return mesh
End Function

Function KreisSegment(r,h,gesamtw,cr=255,cg=255,cb=255,a=1.0,quality=5)
   Local mesh=CreateMesh()
   Local sf=CreateSurface(mesh)
   ;Mitte (Achse)
   v0=AddVertex(sf,0,0,0)
   v1=AddVertex(sf,0,h,0)
   ;Kreisbogen
   ;Seitenfläche
   v2=AddVertex(sf,r,0,0)
   v3=AddVertex(sf,r,h,0)
   AddTriangle(sf,v0,v1,v2)
   AddTriangle(sf,v1,v3,v2)
   Local winkelstep#=(gesamtw/Float(quality))
   Local w#=winkelstep#
   ;Zwischensegmente, um schöner auszusehen
   Repeat
      v4=AddVertex(sf,Cos(w)*r,0,Sin(w)*r)
      v5=AddVertex(sf,Cos(w)*r,h,Sin(w)*r)
      AddTriangle(sf,v0,v2,v4)
      AddTriangle(sf,v5,v3,v1)
      AddTriangle(sf,v5,v4,v2)
      AddTriangle(sf,v2,v3,v5)
      v2=v4
      v3=v5
      If w>=gesamtw Then Exit
      w=w+winkelstep#
   Forever
   ;Seitenfläche
   AddTriangle(sf,v2,v1,v0)
   AddTriangle(sf,v2,v3,v1)
   
   EntityFX mesh,2
   Local count=CountVertices(sf)
   DebugLog "Vertices: "+count
   DebugLog "Triangles: "+CountTriangles(sf)
   For i=0 To count
      VertexColor(sf,i,cr,cg,cb,a)
   Next
   
   UpdateNormals mesh
   Return mesh
End Function
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group