Du bist nicht angemeldet.

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

1

19.01.2004, 17:04

Problem bei 'Kapitel 02 /04 - Texturen' in VB.Net

Hallo,
hab dein Buch und hab mal versucht die Beispiele in VB.Net zu schreiben.
Das Beispiel 'Kapitel 02/03 - Das erste Dreieck' hat auch funktioniert, doch beim nächsten 'Kapitel 02 /04 - Texturen' hab ich das Problem, dass die kleinen Dreiecke nur als schwarzer Klumpen angezeigt werden.

Woran kann das liegen?


Verknüpfte Dateien:
D3DApp.vb
D3DEnumeration.vb
D3DFont.vb
d3dSettingForm.vb
d3dutil.vb
dxutil.vb

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