OpenGL ES 1.1에서는 쿼드를 그리는 데 glVertexPointer()
, glColorPointer()
, glTexCoordPointer()
및 glDrawArrays()
함수를 사용합니다. OpenGL 구현과 달리 내장형 glTexCoord2f
, glVertex2f
및 glColor3f
메소드를 사용하는 대신 쿼드가 구성하는 구조 (벡터, 색상, 텍스처 좌표)를 설명해야합니다.
원하는 코드를 작성해야합니다. (함수 정의에서 사용한 인수 이름을 사용 했으므로 예제에서 코드를 이식하는 것이 간단해야합니다.)
먼저 쿼드의 한 정점에 대한 구조를 정의해야합니다. 쿼드 정점 위치, 색상 및 텍스처 좌표가 유지됩니다.
// Define a simple 2D vector
typedef struct Vec2 {
float x,y;
} Vec2;
// Define a simple 4-byte color
typedef struct Color4B {
GLbyte r,g,b,a;
};
// Define a suitable quad vertex with a color and tex coords.
typedef struct QuadVertex {
Vec2 vect; // 8 bytes
Color4B color; // 4 bytes
Vec2 texCoords; // 8 bytes
} QuadVertex;
그런 다음 네 개의 꼭지점으로 이루어진 전체 쿼드 설명하는 구조를 정의한다 : 쿼드 정점 정보를 지금
// Define a quad structure
typedef struct Quad {
QuadVertex tl;
QuadVertex bl;
QuadVertex tr;
QuadVertex br;
} Quad;
당신의 쿼드를 인스턴스화하고 지정 (위치, 색상, 질감 좌표) :
Quad quad;
quad.bl.vect = (Vec2){x,y};
quad.br.vect = (Vec2){w+x,y};
quad.tr.vect = (Vec2){w+x,h+y};
quad.tl.vect = (Vec2){x,h+y};
quad.tl.color = quad.tr.color = quad.bl.color = quad.br.color
= (Color4B){r,g,b,255};
quad.tl.texCoords = (Vec2){0,0};
quad.tr.texCoords = (Vec2){1,0};
quad.br.texCoords = (Vec2){1,1};
quad.bl.texCoords = (Vec2){0,1};
이제 쿼드를 그리는 방법을 OpenGL에 알려주십시오. gl...Pointer
에 대한 호출은 정점 구조의 값에 맞는 오프셋 및 크기로 OpenGL을 제공하므로 나중에 해당 정보를 쿼드 그리기에 사용할 수 있습니다.
// "Explain" the quad structure to OpenGL ES
#define kQuadSize sizeof(quad.bl)
long offset = (long)&quad;
// vertex
int diff = offsetof(QuadVertex, vect);
glVertexPointer(2, GL_FLOAT, kQuadSize, (void*)(offset + diff));
// color
diff = offsetof(QuadVertex, color);
glColorPointer(4, GL_UNSIGNED_BYTE, kQuadSize, (void*)(offset + diff));
// texCoods
diff = offsetof(QuadVertex, texCoords);
glTexCoordPointer(2, GL_FLOAT, kQuadSize, (void*)(offset + diff));
마지막으로 텍스처를 할당하고 쿼드를 그립니다. glDrawArrays
은 4
정점으로 정의 된 모양을 그리기 위해 Quad
객체에 포함 된 값과 함께 이전에 정의 된 오프셋을 사용하도록 OpenGL에 지시합니다.
glBindTexture(GL_TEXTURE_2D, tex);
// Draw the quad
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindTexture(GL_TEXTURE_2D, 0);
쉐이더가 필요없는 경우 OpenGL ES 1을 사용하는 것이 좋습니다. ES1과 ES2의 가장 큰 차이점은 ES2에서는 고정 된 파이프 라인이 없기 때문에 기본 렌더링을위한 쉐이더와 매트릭스 스택을 직접 구현해야한다는 것입니다. 고정 파이프 라인이 제공하는 기능을 잘 사용한다면 OpenGL ES 1을 사용하십시오.
GL ES의 버전은 무엇입니까? –
1.1 고정 파이프 라인을 사용하고 있기 때문에 가정합니다. – Skyler