큐브를 텍스처링하는 가장 좋은 방법은 무엇입니까 (최저 메모리, 가장 빠른 속도)?OpenGL에서 큐브를 텍스처링하는 가장 좋은 방법
이데이터 구조체 :
GLfloat Cube::vertices[] =
{-0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, 0.5f, 1.0f, 0.5f, -0.5f, 1.0f, 0.5f,
-0.5f, 1.0f, -0.5f, 0.5f, 1.0f, -0.5f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, -0.5f,
0.5f, 0.0f, 0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 1.0f, -0.5f, 0.5f, 1.0f, 0.5f,
-0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 1.0f, 0.5f, -0.5f, 1.0f, -0.5f
};
GLfloat Cube::texcoords[] = { 0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0
};
GLubyte Cube::cubeIndices[24] = {0,1,2,3, 4,5,6,7, 3,2,5,4, 7,6,1,0,
8,9,10,11, 12,13,14,15};
그리기 기능 :
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubeIndices);
glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_COLOR_ARRAY);
glDisable(GL_TEXTURE_2D);
당신이 결과를 볼 수 있듯이이 올바른지 :
만에 잠시 후에 나는이 해결책을 찾을 수 있습니다 rech이 결과 나는 일부 정점을 재정의해야합니다 (vertices
배열에 16 3D 점이 있습니다) 그렇지 않으면 텍스처가 th에 매핑되지 않습니다. e DrawElement 함수.
누군가가 꼭지점 배열에서 큐브를 텍스처링하는 더 좋은 방법을 알고 있습니까?
왜 "가장 빠른/가장 낮은 메모리"가 필요합니까? 10 억 개의 큐브가 화면에 나타날 계획입니까? 또한, "정점 재정의"란 무엇을 의미합니까? –
큐브 텍스처를 설정 한 후 fps가 감소합니다 (60에서 40까지). "vertices"배열의 일부 정점을 재정의했습니다. 그 배열에 16 점 (3D)이 밀접하게 보이지만 큐브 8을 정의하는 것으로 충분합니다. – Luca
여러분은 매우 잘못된 것을하고 있습니다. 아마도 큐브가 아니기 때문에, 8 또는 16 버텍스는 별 차이가 없습니다. 또한 각 꼭지점이 3 개의면을 연결하고 모두 서로 다른 uv 좌표를 가지고 있다고 가정하면이 "여분의"꼭지점이 필요합니다. 확실하지는 않지만 glTexParameteri를 한 번만 호출하면됩니다. 텍스처를 만들 때 그것이 루프에 있다면 감속의 원인 일 수 있습니다. –