폴라곤을 이용하여 텍스처를 입힐 때에는 glDrawElements함수를 사용하는 게 훨 편하고
속도면에서도 낫더라구요.
그런데 기존에 사용했던 glDrawArray함수와 glDrawElements함수를 사용할 때
준비해야할 점들이 다릅니다.
glDrawArray함수는 vertex 좌표만 있어도 표현이 가능하죠. ( 다른 Normal등 부수적인 것을 제외 )
하지만, glDrawElements함수에서는 vertex만큼 중요한 좌표가 두가지가 있죠.
바로!!! vertex포인터를 하게 될 좌표와 텍스처 포인터를 할 좌표!!
이 두가지를 확실하게 해주지 않으면 죽을 때까지 원하는 모양을 보실수 없으십니다.
먼저 , 텍스처 포인터를 할 때
위와 같이 두 포인터가 합쳐서 1을 표현해야만 합니다.
저 윗 그림을 배열로 표시하면
{
0.0 , 0.0
0.5 , 0.0
1.0 , 0.0
0.0 , 0.5
0.5 , 0.5
1.0 , 0.5
0.0 , 1.0
0.5 , 1.0
1.0 , 1.0
}
함수는 다음과 같습니다. 참고하세요.^^ : Java에서 테스트 한 거라 ㅎㅎ
private static void texturePoint(){
int i = 0;
float delta_x = 1.0f / (float)(3-1);
float delta_y = 1.0f / (float)(3-1);
for (int y = 0; y < 3; y++)
for (int x = 0; x < 3; x++)
{
System.out.println((float)x * delta_x + " , " + (float)y * delta_y);
i += 2;
}
}그 다음은 Vertex포인트 입니다.
똑같은 위 그림을 표현하면 배열이 다음과 같구요.
0 , 1 , 4 , 0 , 3 , 4
1 , 2 , 5 , 1 , 4 , 5
3 , 4 , 7, 3 , 6 , 7
4 , 5 , 8, 4 , 7 , 8
소스는 다음과 같습니다.
private static void vertexPoint(){
int i=0;
for(int y=0;y<(3-1);y++){
for(int x=0;x< (3-1) ; x++){
int n = (y*3)+x;
System.out.println((byte)n + " , " + (byte)(n+1) + " , " + (byte)(n+1+3));
System.out.println((byte)n + " , " + (byte)(n+1+3-1) + " , " + (byte)(n+1+3));
i+=6;
}
}
}저두 이걸로 조금 씩 텍스처의 개념이 이해가 되어 가고, DrawElements를 사용하는데 자신감이 생겼네요^^
어려움을 직면했을 때 포기말고 끝까지 해봅시다.!!!
도움이 되었으면 좋겠네요.. 화이팅!!
아!!! 지금 숫자 3은 가로 세로의 포인트 갯수가 각각 3개인 것입니다.^^
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[ Android ] 진동 설정 (0) | 2011.07.22 |
---|---|
[ Android ] 화면 전환 시 해결 방법 (2) | 2011.07.22 |
[ Android ] Eclipse Indigo 사용시 에러 (0) | 2011.07.13 |
[ Android ] Toast 위치 변경 (0) | 2011.07.12 |
[ Android ] 리스트 뷰가 비어 있을때 처리 (0) | 2011.07.12 |