Hallo alle zusammen,
ich habe gerade angefangen Simulationen zu programmieren. Aufgabe war es eine Datei mit Messwerten einzulesen und über Funktionen zu einen Körper zusammenzustellen. Jeder Messpunkt wir auf 2 Dreiecken hochgerechnet (ca. 37062 Dreiecke), was auch wunderbar funktioniert.
Mein Problem ist nachdem ich den Körper erstellt und angezeigt habe, ist die Simulation extrem langsam und mein Rechner langweilt sich auch noch.
Zu dem Code
Erstellung des Körpers in Vb.net
Zudem der Aufruf einer Simulation
Die Darstellung erfolg auf einer WPF Oberfläche
Was kann ich machen damit die Simulation schneller und flüssiger wird???
Edit by ErfinderDesRades: (Thema verschoben) Bitte richtiges UnterForum wählen!
ich habe gerade angefangen Simulationen zu programmieren. Aufgabe war es eine Datei mit Messwerten einzulesen und über Funktionen zu einen Körper zusammenzustellen. Jeder Messpunkt wir auf 2 Dreiecken hochgerechnet (ca. 37062 Dreiecke), was auch wunderbar funktioniert.
Mein Problem ist nachdem ich den Körper erstellt und angezeigt habe, ist die Simulation extrem langsam und mein Rechner langweilt sich auch noch.
Zu dem Code
Erstellung des Körpers in Vb.net
VB.NET-Quellcode
- Sub PaintCube()
- Dim geometryFront As New GeometryModel3D
- Dim geometryBack As New GeometryModel3D
- Dim geometryRight As New GeometryModel3D
- Dim geometryLeft As New GeometryModel3D
- Dim geometryTop As New GeometryModel3D
- Dim geometryBottom As New GeometryModel3D
- ' Dim geometry(anzahl) As GeometryModel3D
- ReDim Preserve geometry(anzahl)
- 'Beispiel für Bild-Textur-------------------------
- Dim materialBack As New DiffuseMaterial
- Dim imgBack As New ImageBrush
- imgBack.ImageSource = New BitmapImage(New Uri("D:\corporatemark_t.png"))
- imgBack.Stretch = Stretch.Uniform
- materialBack.Brush = imgBack
- 'Beispiel für Farbtextur-------------------------
- Dim materialRight1 As New DiffuseMaterial
- Dim materialRight2 As New DiffuseMaterial
- Dim materialRight3 As New DiffuseMaterial
- Dim materialRight4 As New DiffuseMaterial
- Dim materialRight5 As New DiffuseMaterial
- Dim materialRight6 As New DiffuseMaterial
- Dim materialRight7 As New DiffuseMaterial
- Dim materialRight8 As New DiffuseMaterial
- Dim imgRight As New ImageBrush
- Dim transformGroup As New Transform3DGroup
- materialRight1.Brush = New SolidColorBrush(Colors.LimeGreen)
- materialRight2.Brush = New SolidColorBrush(Colors.Olive)
- materialRight3.Brush = New SolidColorBrush(Colors.DarkGreen)
- materialRight4.Brush = New SolidColorBrush(Colors.Blue)
- materialRight5.Brush = New SolidColorBrush(Colors.Yellow)
- materialRight6.Brush = New SolidColorBrush(Colors.Orange)
- materialRight7.Brush = New SolidColorBrush(Colors.OrangeRed)
- materialRight8.Brush = New SolidColorBrush(Colors.Red)
- 'materialRight.Brush = New LinearGradientBrush()
- ' Dim black_white_brush As New LinearGradientBrush(New Point(0, 0), New Point(1, 1), , Color.White)
- ProgressBar1.Maximum = anzahl
- Me.ProgressBar1.Visibility = Visibility.Visible
- For i = 0 To anzahl - 1
- ProgressBar1.Value = i
- Dim pointx As New Point3D(Koerper(1, 0, i), Koerper(1, 1, i), Koerper(1, 2, i))
- Dim pointy As New Point3D(Koerper(2, 0, i), Koerper(2, 1, i), Koerper(2, 2, i))
- Dim pointz As New Point3D(Koerper(3, 0, i), Koerper(3, 1, i), Koerper(3, 2, i))
- If array_farbe(i) = 1 Then
- geometry(i) = Paint3DRectangle(pointx, pointy, pointz, TextureP0, TextureP1, TextureP2, TextureP3, materialRight1)
- ElseIf array_farbe(i) = 2 Then
- geometry(i) = Paint3DRectangle(pointx, pointy, pointz, TextureP0, TextureP1, TextureP2, TextureP3, materialRight2)
- ElseIf array_farbe(i) = 3 Then
- geometry(i) = Paint3DRectangle(pointx, pointy, pointz, TextureP0, TextureP1, TextureP2, TextureP3, materialRight3)
- ElseIf array_farbe(i) = 4 Then
- geometry(i) = Paint3DRectangle(pointx, pointy, pointz, TextureP0, TextureP1, TextureP2, TextureP3, materialRight4)
- ElseIf array_farbe(i) = 5 Then
- geometry(i) = Paint3DRectangle(pointx, pointy, pointz, TextureP0, TextureP1, TextureP2, TextureP3, materialRight5)
- ElseIf array_farbe(i) = 6 Then
- geometry(i) = Paint3DRectangle(pointx, pointy, pointz, TextureP0, TextureP1, TextureP2, TextureP3, materialRight6)
- ElseIf array_farbe(i) = 7 Then
- geometry(i) = Paint3DRectangle(pointx, pointy, pointz, TextureP0, TextureP1, TextureP2, TextureP3, materialRight7)
- ElseIf array_farbe(i) = 8 Then
- geometry(i) = Paint3DRectangle(pointx, pointy, pointz, TextureP0, TextureP1, TextureP2, TextureP3, materialRight8)
- Else
- End If
- ResultModel3DGroup.Children.Add(geometry(i))
- Next
- 'Dim myDirectionalLight As New DirectionalLight()
- 'myDirectionalLight.Color = Colors.White
- 'myDirectionalLight.Direction = New Vector3D(-0.61, -0.5, spotlligth)
- 'ResultModel3DGroup.Children.Add(myDirectionalLight)
- Model.Content = ResultModel3DGroup
- ' transformGroup.Children.Add(New co(RotationX))
- transformGroup.Children.Add(New RotateTransform3D(RotationX))
- transformGroup.Children.Add(New RotateTransform3D(RotationY))
- transformGroup.Children.Add(New RotateTransform3D(RotationZ))
- transformGroup.Children.Add(TranslateZ)
- transformGroup.Children.Add(Translatey)
- transformGroup.Children.Add(Translatex)
- transformGroup.Children.Add(zeropoint)
- Model.Transform = transformGroup
- Me.mainViewport.Children.Remove(Model)
- Me.mainViewport.Children.Add(Model)
- End Sub
Zudem der Aufruf einer Simulation
VB.NET-Quellcode
- Dim rotateAnimationz As New DoubleAnimation
- rotateAnimationz.Duration = TimeSpan.Parse("0:0:4")
- rotateAnimationz.From = -180
- rotateAnimationz.To = 180
- rotateAnimationz.AutoReverse = True
- rotateAnimationz.AccelerationRatio = 0.1
- rotateAnimationz.DecelerationRatio = 0.1
- rotateAnimationz.RepeatBehavior = New RepeatBehavior(2)
- RotationZ.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotateAnimationz)
Die Darstellung erfolg auf einer WPF Oberfläche
VB.NET-Quellcode
- <Viewport3D Name="mainViewport" ClipToBounds="True" RenderOptions.CachingHint="Cache" RenderOptions.EdgeMode="Aliased">
- <Viewport3D.Camera>
- <PerspectiveCamera x:Name="cam" Position="0,0,4" LookDirection="0,0,-3.5" ></PerspectiveCamera>
- </Viewport3D.Camera>
- <ModelVisual3D>
- <ModelVisual3D.Content>
- <DirectionalLight
- Color="White"
- Direction="0,0,-1" />
- <!--<SpotLight Color="Aqua" Direction="0,1,-1">
- </SpotLight>-->
- <!--<PointLight Color="White" >
- </PointLight>-->
- <!--<AmbientLight Color="White" >
- </AmbientLight>-->
- </ModelVisual3D.Content>
- </ModelVisual3D>
- </Viewport3D>
Was kann ich machen damit die Simulation schneller und flüssiger wird???
Edit by ErfinderDesRades: (Thema verschoben) Bitte richtiges UnterForum wählen!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()