← SEARCHABLE ARCHIVE
DirectX 11 · 2026-07-03

Representación triangular nativa de DirectX 11

Dibuja un triángulo desde Device to Draw

INTERACTIVE READING MODE →

Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.

Para dibujar un triángulo en DirectX 11, necesita Device, DeviceContext, SwapChain, RenderTargetView, VertexBuffer y Shader. Resumamos solo el flujo principal requerido para la renderización, excluyendo el código de creación de ventanas.

Crear un dispositivo y una cadena de intercambio

DXGI_SWAP_CHAIN_DESC Desc{};
Desc.BufferCount = 1;
Desc.BufferDesc.Width = Width;
Desc.BufferDesc.Height = Height;
Desc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
Desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
Desc.OutputWindow = WindowHandle;
Desc.SampleDesc.Count = 1;
Desc.Windowed = TRUE;
Desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;

D3D11CreateDeviceAndSwapChain(
    nullptr,
    D3D_DRIVER_TYPE_HARDWARE,
    nullptr,
    0,
    nullptr,
    0,
    D3D11_SDK_VERSION,
    &Desc,
    &SwapChain,
    &Device,
    nullptr,
    &DeviceContext
);

El dispositivo crea recursos de GPU y DeviceContext se utiliza para grabar y ejecutar comandos. SwapChain reemplaza el BackBuffer que se muestra en la pantalla.

Crear RenderTargetView

ID3D11Texture2D* BackBuffer = nullptr;
SwapChain->GetBuffer(0, IID_PPV_ARGS(&BackBuffer));
Device->CreateRenderTargetView(BackBuffer, nullptr, &RenderTargetView);
BackBuffer->Release();

Cree una Vista para que la textura BackBuffer pueda usarse como destino de renderizado.

Crear buffer de vértices

struct Vertex
{
    DirectX::XMFLOAT3 Position;
    DirectX::XMFLOAT4 Color;
};

Vertex Vertices[] =
{
    { {  0.0f,  0.5f, 0.0f }, { 1, 0, 0, 1 } },
    { {  0.5f, -0.5f, 0.0f }, { 0, 1, 0, 1 } },
    { { -0.5f, -0.5f, 0.0f }, { 0, 0, 1, 1 } }
};

D3D11_BUFFER_DESC BufferDesc{};
BufferDesc.ByteWidth = sizeof(Vertices);
BufferDesc.Usage = D3D11_USAGE_DEFAULT;
BufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;

D3D11_SUBRESOURCE_DATA InitialData{};
InitialData.pSysMem = Vertices;

Device->CreateBuffer(&BufferDesc, &InitialData, &VertexBuffer);

Dibuja cada cuadro

const float ClearColor[4] = { 0.08f, 0.08f, 0.12f, 1.0f };
DeviceContext->ClearRenderTargetView(RenderTargetView, ClearColor);

UINT Stride = sizeof(Vertex);
UINT Offset = 0;
DeviceContext->IASetVertexBuffers(0, 1, &VertexBuffer, &Stride, &Offset);
DeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
DeviceContext->IASetInputLayout(InputLayout);

DeviceContext->VSSetShader(VertexShader, nullptr, 0);
DeviceContext->PSSetShader(PixelShader, nullptr, 0);
DeviceContext->OMSetRenderTargets(1, &RenderTargetView, nullptr);
DeviceContext->RSSetViewports(1, &Viewport);

DeviceContext->Draw(3, 0);
SwapChain->Present(1, 0);

Draw(3, 0)lee 3 vértices comenzando desde 0 y dibuja un triángulo. Si solo aparece una pantalla negra, es mejor verificar el orden de los vértices, la ventana gráfica, los resultados de la compilación del sombreador y la conexión de RenderTarget.