Compartir a través de


Portabilidad de un representador simple de OpenGL ES 2.0 a Direct3D 11

Para este ejercicio de portabilidad, comenzaremos con los conceptos básicos: incorporaremos un representador sencillo para un cubo giratorio sombreado por vértices de OpenGL ES 2.0 en Direct3D, de modo que coincida con la plantilla Aplicación DirectX 11 (Windows universal) de Visual Studio 2015. A medida que se recorre este proceso de puerto, aprenderá lo siguiente:

  • Cómo migrar un conjunto sencillo de búferes de vértices a búferes de entrada de Direct3D
  • Cómo migrar uniformes y atributos a búferes de constantes
  • Cómo configurar objetos de sombreador direct3D
  • Cómo se usan las semánticas básicas de HLSL en el desarrollo del sombreador de Direct3D
  • Cómo migrar GLSL muy simple a HLSL

Este tema comienza después de crear un nuevo proyecto de DirectX 11. Para obtener información sobre cómo crear un nuevo proyecto de DirectX 11, lea Crear un nuevo proyecto de DirectX 11 para Plataforma universal de Windows (UWP).

El proyecto creado a partir de cualquiera de estos vínculos tiene todo el código de la infraestructura de Direct3D preparada y puede empezar inmediatamente al proceso de portabilidad del representador desde Open GL ES 2.0 a Direct3D 11.

En este tema se recorren dos rutas de acceso de código que realizan la misma tarea de gráficos básica: mostrar un cubo giratorio sombreado por vértices en una ventana. En ambos casos, el código abarca el siguiente proceso:

  1. Crear una malla de cubo a partir de datos codificados de forma dura. Esta malla se representa como una lista de vértices, con cada vértice que posee una posición, un vector normal y un vector de color. Esta malla se coloca en un búfer de vértices para que la canalización de sombreado se procese.
  2. Crear objetos de sombreador para procesar la malla del cubo. Hay dos sombreadores: un sombreador de vértices que procesa los vértices para la rasterización y un sombreador de fragmentos (píxeles) que colorea los píxeles individuales del cubo después de la rasterización. Estos píxeles se escriben en un destino de representación para mostrar.
  3. Formar el lenguaje de sombreado que se usa para el procesamiento de vértices y píxeles en los sombreadores de vértices y fragmentos, respectivamente.
  4. Mostrar el cubo representado en la pantalla.

cubo opengl simple

Al completar este tutorial, debe estar familiarizado con las siguientes diferencias básicas entre Open GL ES 2.0 y Direct3D 11:

  • Representación de búferes de vértices y datos de vértices.
  • Proceso de creación y configuración de sombreadores.
  • Sombreado de lenguajes y entradas y salidas para objetos de sombreador.
  • Comportamientos de dibujo de pantalla.

En este tutorial, nos referimos a una estructura de representador OpenGL simple y genérica, que se define de la siguiente manera:

typedef struct 
{
    GLfloat pos[3];        
    GLfloat rgba[4];
} Vertex;

typedef struct
{
  // Integer handle to the shader program object.
  GLuint programObject;

  // The vertex and index buffers
  GLuint vertexBuffer;
  GLuint indexBuffer;

  // Handle to the location of model-view-projection matrix uniform
  GLint  mvpLoc; 
   
  // Vertex and index data
  Vertex  *vertices;
  GLuint   *vertexIndices;
  int       numIndices;

  // Rotation angle used for animation
  GLfloat   angle;

  GLfloat  mvpMatrix[4][4]; // the model-view-projection matrix itself
} Renderer;

Esta estructura tiene una instancia y contiene todos los componentes necesarios para representar una malla sombreada de vértices muy sencilla.

Nota Cualquier código de OpenGL ES 2.0 de este tema se basa en la implementación de la API de Windows proporcionada por el grupo Khronos y usa la sintaxis de programación de Windows C.

 

Lo que necesita saber

Tecnologías

Requisitos previos

Pasos

Tema Descripción

Migrar los objetos del sombreador

Al migrar el representador simple desde OpenGL ES 2.0, el primer paso es configurar los objetos equivalentes de sombreador de vértices y fragmentos en Direct3D 11 y asegurarse de que el programa principal pueda comunicarse con los objetos del sombreador después de compilar.

Portabilidad de los búferes de vértices y los datos

En este paso, definirá los búferes de vértices que contendrán las mallas y los búferes de índice que permiten a los sombreadores atravesar los vértices en un orden especificado.

Puerto de GLSL

Una vez que haya pasado por el código que crea y configura los búferes y los objetos de sombreador, es el momento de portar el código dentro de esos sombreadores de OpenGL ES 2.0 del Lenguaje de sombreador GL (GLSL) a Direct3D 11's High-Level Shader Language (HLSL).

Dibujar en la pantalla

Por último, portamos el código que dibuja el cubo giratorio a la pantalla.

 

Recursos adicionales