버그 해결을 위한 모든 질문을 던져
0 votes
43 views
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);

 

그런데 이 과정중에 뭔가 잘못된건지 큐브에 텍스쳐가 완전히 깨져서 나오네요. 제가 혹시 잘못 설정해놓은 부분이 있나요?
asked (2 point) , 43 views

질문에 대한 답변을 하려면 로그인 또는 가입해야합니다.

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

424 질문
564 answers
572 댓글
38,661 users