Как использовать альфа-вершину SharpDX Direct3D9? - PullRequest
0 голосов
/ 18 ноября 2018

Как использовать альфа-вершину SharpDX Direct3D9?

В настоящее время я пытаюсь отобразить некоторые прямоугольники, используя метод DrawPrimitives из Direct3D9 в C #, используя SharpDX NuGeT.Я хочу, чтобы непрозрачность моих прямоугольников не была максимальной, но, несмотря на то, что я использую RawColorBGRA, поле Alpha, кажется, не меняет непрозрачность.

Вот некоторая часть кода:

ColorBGRA:

public static ColorBGRA lightBlue = new ColorBGRA
{
    R = 0x00,
    G = 0x99,
    B = 0xcc,
    A = 0x33
};

Мой класс DirectX:

using System;
using SharpDX;
using SharpDX.Direct3D9;
using SharpDX.Mathematics.Interop;

namespace DirectXProject
{
    public class DX
    {
        public Device device;
        public RawRectangle fontDimension;

        VertexBuffer vertices;
        VertexDeclaration vertexDecl;
        VertexElement[] vertexElems;

        struct Vertex
        {
            public Vector4 Position;
            public ColorBGRA Color;
        }

        public DX(IntPtr handle, int width, int height)
        {
            device = new Device(
                new Direct3D(),
                0,
                DeviceType.Hardware,
                handle,
                CreateFlags.HardwareVertexProcessing,
                new PresentParameters(width, height));
        }

        public void RunLoop()
        {
            lock (this)
            {
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, DXColor.wheat, 1.0f, 0);
                device.BeginScene();

                DrawFillRectangle(vertices, 20, 20, 40, 40, DXColor.lightBlue);

                device.EndScene();
                device.Present();
            }
        }

        public void DrawFillRectangle(VertexBuffer vertices, float x1, float y1, float x2, float y2, ColorBGRA color)
        {
            vertices = new VertexBuffer(device, 4 * 20, Usage.WriteOnly, VertexFormat.None, Pool.Managed);

            vertices.Lock(0, 0, LockFlags.None).WriteRange(new[] {
                new Vertex() { Color = color, Position = new Vector4(x1, y1, 0.5f, 1.0f) },
                new Vertex() { Color = color, Position = new Vector4(x2, y1, 0.5f, 1.0f) },
                new Vertex() { Color = color, Position = new Vector4(x2, y2, 0.5f, 1.0f) },
                new Vertex() { Color = color, Position = new Vector4(x1, y2, 0.5f, 1.0f) }
            });

            vertices.Unlock();


            vertexElems = new[] {
                new VertexElement(0, 0, DeclarationType.Float4, DeclarationMethod.Default, DeclarationUsage.PositionTransformed, 0),
                new VertexElement(0, 16, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
                VertexElement.VertexDeclarationEnd
            };

            vertexDecl = new VertexDeclaration(device, vertexElems);

            device.SetStreamSource(0, vertices, 0, 20);
            device.VertexDeclaration = vertexDecl;
            device.DrawPrimitives(PrimitiveType.TriangleFan, 0, 2);
        }
    }
}

Этот код обеспечивает прямоугольник с полной непрозрачностью, несмотря на Ox33 в поле Альфа.

Есть ли другой способизменить непрозрачность?Спасибо за чтение.

...