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

LipkeGu

Frischling

  • »LipkeGu« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Berlin

  • Private Nachricht senden

1

04.06.2018, 22:53

[C#] (SharpDX) - DirectX11 - D3D - Wie lade ich Texturen für eine Skybox?

Ich versuche mich momentan an einem kleinen 3D Projekt mit SharpDX und habe ansich den Fortschritt, ein Terain zu erstellen, auf basis der Abmessung einer Bitmap (W * H).


(Link)


Aber bin nun am Rätseln, wie ich eine Cubemap erstellen kann, dafür habe ich eine DDS datei angelegt, welche ich als Skybox nehmen möchte.
Ist da eine möglichkeit, bzw ein weg es unter SharpDX D3D11 zu tun?


Mit freundlichen Grüßen,


Guido

LipkeGu

Frischling

  • »LipkeGu« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Berlin

  • Private Nachricht senden

2

07.06.2018, 18:02

Ich habe eine möglichkeit gefunden, einfach und auf .Net basis texturen zu laden. Die Grundlegene Funktion ist von Stackoverflow
und selbst habe ich nur 2 Overloads hinzugefügt (Plain Texture, CubeMapTexture).

C#-Quelltext

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
        public static Texture2D CreateCubemapFromFile(string filename, out ShaderResourceView view)
            => LoadTexture(filename, out view, 6, ResourceOptionFlags.TextureCube);

        public static Texture2D CreateTexture(string filename, out ShaderResourceView resourceView)
            => LoadTexture(filename, out resourceView, 1, ResourceOptionFlags.GenerateMipMaps);

        private static Texture2D LoadTexture(string filename, out ShaderResourceView resourceView, 
            int arraySize = 1, ResourceOptionFlags optFlags = ResourceOptionFlags.None)
        {
            var bitmap = new Bitmap(filename);

            if (bitmap.PixelFormat != PixelFormat.Format32bppArgb)
                bitmap = bitmap.Clone(new System.Drawing.Rectangle(0, 0, bitmap.Width,
                    bitmap.Height), PixelFormat.Format32bppArgb);

            var data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, 
                bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

            var texture2D = new Texture2D(Video.GraphicDevice, new Texture2DDescription()
            {
                Width = bitmap.Width,
                Height = bitmap.Height,
                ArraySize = arraySize,
                BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource,
                Usage = SharpDX.Direct3D11.ResourceUsage.Default,
                CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None,
                Format = SharpDX.DXGI.Format.B8G8R8A8_UNorm,
                MipLevels = 1,
                OptionFlags = optFlags,
                SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
            }, new DataRectangle(data.Scan0, data.Stride));

            bitmap.UnlockBits(data);
            bitmap.Dispose();

            resourceView = new ShaderResourceView(Video.GraphicDevice, texture2D);
            
            return texture2D;
        }

Julién

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

3

09.06.2018, 15:16

Alternativ kannst du SharpDX.WIC (Windows Image Component) verwenden um 1/2/3D Texturen von einer Datei zu laden.

Entsprechende Dokumentation findest du hier.

LG Julien
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige