Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Anonymous
unregistriert
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
Imports System Imports System.Drawing Imports System.Windows.Forms Imports Microsoft.DirectX Imports Microsoft.DirectX.Direct3D Namespace Direct3DTest2 Public Class MyGraphicsSample Inherits GraphicsSample 'Alles von Class GraphicsSample erben Public Dreieck(2) As CustomVertex.PositionColored Public Structure sDreiecke Public Position As Vector3 Public Bewegung As Vector3 Public Rotation As Vector3 Public RotBewegung As Vector3 Public Size As Single Public Dreieck() As CustomVertex.PositionColoredTextured End Structure Public Const AnzahlDreiecke = 1024 Public Dreiecke(AnzahlDreiecke) As sDreiecke Public DreieckTextur As Texture = Nothing Public Sub New() End Sub 'New Protected Overrides Sub FrameMove() Dim n As Int16 For n = 0 To AnzahlDreiecke - 1 With Dreiecke(n) .Position.X += .Bewegung.X * elapsedtime .Position.Y += .Bewegung.Y * elapsedtime .Position.Z += .Bewegung.Z * elapsedtime .Rotation.X += .RotBewegung.X * elapsedtime .Rotation.Y += .RotBewegung.Y * elapsedtime .Rotation.Z += .RotBewegung.Z * elapsedtime If .Position.Length > 100 Then .Bewegung.X *= -1 .Bewegung.Y *= -1 .Bewegung.Z *= -1 End If End With Next '*** eine Umdrehung in 5 Sekunden (Zahl 5000) Dim S As Int16 = 10000 Dim Zeit As Integer = Environment.TickCount Mod S Dim Winkel As Single = Zeit * (2.0F * Math.PI) / S Me.Text = elapsedtime Device.Transform.World = Matrix.Multiply(Matrix.RotationY(Winkel), Matrix.Translation(0, 0, 3)) End Sub 'FrameMove Public Sub RenderScene() Device.SamplerState(0).MaxAnisotropy = Device.DeviceCaps.MaxAnisotropy Device.SamplerState(0).MinFilter = TextureFilter.Anisotropic Device.SamplerState(0).MagFilter = TextureFilter.Linear Device.SamplerState(0).MipFilter = TextureFilter.None Dim n As Int16 For n = 0 To AnzahlDreiecke - 1 With Dreiecke(n) Device.Transform.World.Scale(.Size, .Size, .Size) Device.Transform.World.RotationX(.Rotation.X) Device.Transform.World.RotationY(.Rotation.Y) Device.Transform.World.RotationZ(.Rotation.Z) Device.Transform.World.Translation(.Bewegung) Device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, .Dreieck) End With Next Device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, Dreieck) End Sub 'RenderScene Protected Overrides Sub Render() Device.Clear(ClearFlags.Target Or ClearFlags.ZBuffer, Drawing.Color.Blue.ToArgb, 1, 0) Device.BeginScene() RenderScene() Device.EndScene() '*** Device.Present() wird am Ende von Render3DEnvironment in D3DApp ausgeführt End Sub 'Render Protected Overrides Sub InitializeDeviceObjects() Try Device.VertexFormat = VertexFormats.Position Or VertexFormats.Diffuse Or VertexFormats.Texture1 Device.RenderState.Lighting = False Device.RenderState.CullMode = Cull.None Device.RenderState.DitherEnable = True Dim Aspect As Single Aspect = Device.PresentationParameters.BackBufferWidth / Device.PresentationParameters.BackBufferHeight Device.Transform.Projection = Matrix.PerspectiveFovLH(CSng(Math.PI) / 4, Aspect, 1, 100) Dim n, m As Int16 Dim Zahl As Single For n = 0 To AnzahlDreiecke - 1 With Dreiecke(n) ReDim .Dreieck(2) .Position = New Vector3(0, 0, 50) Zahl = CSng(Int(500 * Rnd()) + 1) / 100 'Kommerzahl zwischen 1 und 5 .Bewegung = New Vector3(Zahl, Zahl, Zahl) .Rotation = New Vector3(0, 0, 0) Zahl = CSng(Int(200 * Rnd()) + 1 - 100) / 100 'Kommerzahl zwischen -1 und 1 .RotBewegung.X = Zahl Zahl = CSng(Int(200 * Rnd()) + 1 - 100) / 100 'Kommerzahl zwischen -1 und 1 .RotBewegung.Y = Zahl Zahl = CSng(Int(200 * Rnd()) + 1 - 100) / 100 'Kommerzahl zwischen -1 und 1 .RotBewegung.Z = Zahl Zahl = CSng(Int(500 * Rnd()) + 1) / 100 'Kommerzahl zwischen 1 und 5 .Size = Zahl For m = 0 To 2 .Dreieck(m).X = Rnd() .Dreieck(m).Y = Rnd() .Dreieck(m).Z = Rnd() .Dreieck(m).Color = RGB(Rnd(), Rnd(), Rnd()) Zahl = CSng(Int(300 * Rnd()) + 1 - 100) / 100 'Kommerzahl zwischen -1 und 2 .Dreieck(m).Tu = Zahl Zahl = CSng(Int(300 * Rnd()) + 1 - 100) / 100 'Kommerzahl zwischen -1 und 2 .Dreieck(m).Tv = Zahl Next End With Next DreieckTextur = TextureLoader.FromFile(Device, "env2.bmp") Dreieck(0).SetPosition(New Vector3(0, 1, 0)) Dreieck(1).SetPosition(New Vector3(1, -1, 0)) Dreieck(2).SetPosition(New Vector3(-1, -1, 0)) Dreieck(0).Color = Drawing.Color.Red.ToArgb Dreieck(1).Color = Drawing.Color.Blue.ToArgb Dreieck(2).Color = Drawing.Color.Green.ToArgb Catch Dim e As New MediaNotFoundException HandleSampleException(e, ApplicationMessage.ApplicationMustExit) Throw e End Try End Sub 'InitializeDeviceObjects Protected Overrides Sub RestoreDeviceObjects(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub 'RestoreDeviceObjects Shared Sub Main() Dim d3dApp As New MyGraphicsSample If d3dApp.CreateGraphicsSample() Then d3dApp.Run() End If End Sub 'Main End Class 'MyGraphicsSample End Namespace 'Direct3DTest2 |