OpenGL에서 이 두개의 소스 차이점이 무엇인가요?

조회수 725회
unsigned char       *bitmapImage[3]; // 전역변수 배열로 설정
//unsigned char     *bitmapImage;

void init(void)
{
    int i;
    angle = 0.0;

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glEnable(GL_TEXTURE_2D);
    glDepthFunc(GL_LEQUAL);                                 // The Type Of Depth Testing (Less Or Equal)
    glDisable(GL_DEPTH_TEST);
    glBlendFunc(GL_ONE, GL_SRC_ALPHA);
    glEnable(GL_BLEND);

    bitmapImage[0] = LoadBitmapFile("Butterfly1.bmp", &bitmapInfoHeader);
    bitmapImage[1]= LoadBitmapFile("Butterfly2.bmp", &bitmapInfoHeader);
    bitmapImage[2] = LoadBitmapFile("Butterfly3.bmp", &bitmapInfoHeader);

    glGenTextures(3, &texture[0]);

    for (int i = 0; i < 3; i++)
    {
        glBindTexture(GL_TEXTURE_2D, texture[i]);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);    // Linear Filtering
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); // Mipmap Linear Filtering
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
        bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapImage);
    }

    /*
    for (int i = 0; i < 3; i++)
    {
        if (i == 0)
            bitmapImage = LoadBitmapFile("Butterfly1.bmp", &bitmapInfoHeader);
        else if (i == 1)
            bitmapImage = LoadBitmapFile("Butterfly2.bmp", &bitmapInfoHeader);
        else
            bitmapImage = LoadBitmapFile("Butterfly3.bmp", &bitmapInfoHeader);

        glGenTextures(1, &texture[i]);
        glBindTexture(GL_TEXTURE_2D, texture[i]);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);    // Linear Filtering
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); // Mipmap Linear Filtering
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
        bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapImage);
    }
    */

    for (int loop = 0; loop<50; loop++)                         // Loop To Initialize 50 Objects
    {
        SetObject(loop);                                        // Call SetObject To Assign New Random Values
    }
}

안녕하세요 OpenGL을 공부하고 있는 학생입니다. 다름이 아니라 소스를 짜고 기존의 소스와 비교해서 분석하는데 이해가 잘 안가는 부분이 있어서 질문드립니다.

먼저 이 소스는 OpenGL에서 텍스쳐 맵핑에 관한 소스의 일부인데 이 함수는 그중 비트맵 파일을 로드하고 텍스쳐로 변환하는 함수입니다.

저는 이미지를 3개를 불러올 것이기에 unsigned char *bitmapImage[3]; 로 설정했습니다. bitmapImage[3] 이 변수는 LoadBitmapFile() 함수의 반환결과를 저장합니다.

bitmapImage[0], bitmapImage[1], bitmapImage[2] 로 불러들인 비트맵 텍스쳐파일을 3개를 저장을하고 이후에 for문에서 텍스쳐 환경을 명시합니다. 주석처리 되어있는 부분을 보시면 아시겠지만 주석처리되어있지 않은 부분과의 차이점은

bitmapImage; 변수를 포인터 배열이 아닌 단순 포인터 변수로 선언했다는점.

그리고 이 포인터 변수하나로 LoadBitmapFile() 파일을 3번을 호출하여 파일을 로드하고 텍스쳐로 변환한다는점 또 for문 안에서 파일을 로드함과 동시에 텍스처환경을 명시한다는점 이정도가 되겠네요.

그런데 주석처리되지않은 부분은 제가 소스를 짠 부분인데 저렇게하면 실행은 되나 OpenGL 창이 뜨질 않습니다. 반면 주석 처리된 부분을 실행하면 텍스쳐맵핑까지 되어서 완벽한 결과를 얻어낼 수 있습니다.

이 두개의 차이점이 무엇인가요 가장 큰 차이점은 포인터 배열과 변수의 차이점인데.. 저는 for문 밖에서 포인터 배열로 미리 각각 인덱스에 파일을 로드하여 놓고 그다음에 텍스쳐 환경을 명시해줬고 주석처리된 부분은 하나의 텍스쳐에 대해서 환경명시를하고 그 다음에 또 for문을 돌아 반복하고 이런식인데..

이게 차이가 있는 것인가요?..차이가 있다면 어떤 차이가 있나요?

저는 적어도 텍스쳐 맵핑은 안되더라도 윈도우 창이라도 뜰줄 알았습니다..근데 창마저 안뜨는데 이게 어떤 의미를 가지는건가요?

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)