간단한 OpenGL ES 2.0 렌더러를 Direct3D 11로 포팅

이 포팅 연습에서는 Visual Studio 2015의 DirectX 11 앱(유니버설 Windows) 템플릿과 일치할 수 있도록 OpenGL ES 2.0에서 Direct3D로 회전하는 꼭짓점 음영 큐브에 대한 간단한 렌더러를 가져오는 기본 사항부터 시작합니다. 이 포트 프로세스를 살펴보면서 다음을 알아봅니다.

  • 간단한 꼭짓점 버퍼 집합을 Direct3D 입력 버퍼로 포팅하는 방법
  • 상수 버퍼에 유니폼 및 특성을 포팅하는 방법
  • Direct3D 셰이더 개체를 구성하는 방법
  • Direct3D 셰이더 개발에 기본 HLSL 의미 체계를 사용하는 방법
  • 매우 간단한 GLSL을 HLSL로 포팅하는 방법

이 토픽은 새 DirectX 11 프로젝트를 생성한 후에 시작됩니다. 새 DirectX 11 프로젝트를 생성하는 방법을 알아보려면 UWP(유니버설 Windows 플랫폼)을 위한 새 DirectX 11 프로젝트 생성을 참조하세요.

이러한 링크 중 하나에서 만든 프로젝트에는 Direct3D 인프라에 대한 모든 코드가 준비되어 있으며, 렌더러를 Open GL ES 2.0에서 Direct3D 11로 포팅하는 프로세스를 즉시 시작할 수 있습니다.

이 토픽에서는 동일한 기본 그래픽 작업을 수행하는 두 코드 경로(창에서 회전하는 꼭짓점 음영 큐브 표시)를 안내합니다. 두 경우 모두에서 코드는 다음 프로세스를 다룹니다.

  1. 하드 코딩된 데이터에서 큐브 메시 생성. 이 메시는 각 꼭짓점이 위치, 일반 벡터, 색 벡터를 포함하는 꼭짓점 목록으로 표시됩니다. 이 메시는 셰이딩 파이프라인이 처리할 꼭짓점 버퍼에 배치됩니다.
  2. 큐브 메시를 처리하는 셰이더 개체 생성. 래스터화를 위해 꼭짓점을 처리하는 꼭짓점 셰이더와 래스터화 이후 큐브의 개별 픽셀에 색을 지정하는 조각(픽셀) 셰이더의 두 셰이더가 있습니다. 이러한 픽셀은 표시를 위해 렌더링 대상에 기록됩니다.
  3. 각각 꼭짓점 및 조각 셰이더에서 꼭짓점 및 픽셀 처리에 사용되는 음영 언어를 형성합니다.
  4. 렌더링된 큐브를 화면에 표시.

simple opengl cube

이 연습을 완료하면 다음과 같은 Open GL ES 2.0와 Direct3D 11 간의 기본적인 차이점을 잘 알고 있어야 합니다.

  • 꼭짓점 버퍼 및 꼭짓점 데이터의 표현.
  • 셰이더를 생성하고 구성하는 프로세스.
  • 셰이더 개체에 대한 언어 및 입력 및 출력을 음영 처리합니다.
  • 화면 그리기 동작.

이 연습에서는 다음과 같이 정의된 간단하고 일반적인 OpenGL 렌더러 구조를 참조합니다.

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;

이 구조에는 하나의 인스턴스가 있으며 매우 간단한 꼭짓점 음영 메시를 렌더링하는 데 필요한 모든 구성 요소가 포함되어 있습니다.

참고 이 항목의 OpenGL ES 2.0 코드는 Khronos 그룹에서 제공하는 Windows API 구현을 기반으로 하며 Windows C 프로그래밍 구문을 사용합니다.

 

알아야 하는 작업

기술

필수 조건

단계

항목 설명

셰이더 개체 포팅

OpenGL ES 2.0에서 간단한 렌더러를 포팅할 경우, 첫 번째 단계는 Direct3D 11에서 동등한 꼭짓점 및 조각 셰이더 개체를 설정하고 기본 프로그램이 컴파일된 후 셰이더 개체와 통신할 수 있게 하는 것입니다.

꼭짓점 버퍼 및 데이터 포팅

이 단계에서는 메시를 포함할 꼭짓점 버퍼와 셰이더가 지정된 순서로 꼭짓점을 트래버스할 수 있게 하는 인덱스 버퍼를 정의합니다.

GLSL 포팅

버퍼 및 셰이더 개체를 생성하고 구성하는 코드를 이동한 후에는 OpenGL ES 2.0의 GLSL(GL 셰이더 언어)에서 Direct3D 11의 HLSL(High-Level Shader Language)로 해당 셰이더 내의 코드를 포팅해야 합니다.

화면에 그리기

마지막으로 회전하는 큐브를 화면에 그리는 코드를 포팅합니다.

 

추가 리소스