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문을 돌아 반복하고 이런식인데..
이게 차이가 있는 것인가요?..차이가 있다면 어떤 차이가 있나요?
저는 적어도 텍스쳐 맵핑은 안되더라도 윈도우 창이라도 뜰줄 알았습니다..근데 창마저 안뜨는데 이게 어떤 의미를 가지는건가요?
댓글 입력