opengl을 공부하는 대학생입니다. 아래와 같이 버텍스, 컬러, indices, 텍스쳐 좌표를 넣어주었습니다.
GLfloat Cube[8][3] = {
{-0.5f, -0.5f, -0.5f}, // 0
{0.5f, -0.5f, -0.5f}, // 1
{0.5f, 0.5f, -0.5f}, // 2
{-0.5f, 0.5f, -0.5f}, // 3
{-0.5f, -0.5f, 0.5f}, // 4
{0.5f, -0.5f, 0.5f}, // 5
{0.5f, 0.5f, 0.5f}, // 6
{-0.5f, 0.5f, 0.5f} // 7
};
GLint CubeIndices[12][3] = {
{1, 0, 2},
{2, 0, 3},
{7, 0, 4},
{3, 0, 7},
{0, 1, 5},
{4, 0, 5},
{7, 4, 6},
{6, 4, 5},
{5, 1, 2},
{5, 2, 6},
{2, 3, 6},
{3, 7, 6}
};
GLfloat CubeColor[8][3] = {
{0, 0, 1},
{0, 1, 0},
{0, 0, 1},
{0, 1, 1},
{1, 1, 0},
{1, 0.5f, 0},
{0, 0.5f, 0.5f},
{0.5f, 0, 0.5f}
};
GLfloat CubeTex[8][2] = {
{0, 0},
{1, 0},
{1, 1},
{0, 1},
{0, 0},
{1, 0},
{1, 1},
{0, 1}
};
이후 VBO, EBO를 만들어서 VAO에 다음과 같이 넣어주었구요
glGenVertexArrays(1, &VAO[0]);
glBindVertexArray(VAO[0]);
glGenBuffers(3, VBO[0]);
glGenBuffers(1, &EBO[0]);
glBindBuffer(GL_ARRAY_BUFFER, VBO[0][0]);
glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(float), Cube, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO[0][1]);
glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(float), CubeColor, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, VBO[0][2]);
glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), CubeTex, GL_STATIC_DRAW);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(2);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO[0]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLint), CubeIndices, GL_STATIC_DRAW);
glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(3);
이후 텍스쳐를 설정했습니다.
void InitTexture()
{
int width;
int height;
int channelNum;
for (int i = 0; i < 6; ++i)
{
glGenTextures(1, &texture[i]);
glBindTexture(GL_TEXTURE_2D, texture[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
unsigned char* data = stbi_load("A.png", &width, &height, &channelNum, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
}
}
그 후에 이런식으로 출력해주었습니다.
int tLocation = glGetUniformLocation(ShaderProgram, "outTexture");
glUniform1i(tLocation, 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 0);
그런데 이 과정중에 뭔가 잘못된건지 큐브에 텍스쳐가 완전히 깨져서 나오네요. 제가 혹시 잘못 설정해놓은 부분이 있나요?