'Texture Mapping'에 해당되는 글 1건

  1. 2009.04.29 Texture Mapping
프로그래밍/OpenGL2009. 4. 29. 12:21

1. Why is the use of Texture Mapping

- 적은 수의 폴리곤으로 효과적인 렌더링을 할 수 있다.

 

1.2. Steps of Texture Mapping

① 텍스처 오브젝트를 만들고, 오브젝트에 해당하는 텍스처를 명시해야 한다.

② 텍스처가 어떻게 각각의 픽셀과 연관되어 있는지에 고나해 나타내어야 한다.

③ 텍스처 매핑을 활성화 한다.

④ 텍스처와 기하학적 좌표가 제공된 장면을 렌더링 한다.

 

2. Example Texture Mapping

AUX_RGBImageRec *LoadBMPFile(char *filename)
{
	FILE *hFile = NULL
	if(!filename) 
		return NULL
	
	if(hFile = fopen(filename, "r"))
	{
		fclose(hFile);
		return auxDIBImageLoad(filename);
	// BMP 정보를 리턴해 준다
	}

	return NULL
}

void CreateTexture()
{
	AUX_RGBImageRec *texRec[1];	// RGB정보를 가지는 구조체 정의							// 텍스쳐매핑초기화
	if(texRec[0] = LoadBMPFile("img.bmp")) 
	{
		glGenTextures(1, &g_Texture[0]); 
		// 객체의 이름을 만들어 준다
		// 첫 번째 인자: 몇 개의 텍스쳐 텍스쳐 맵핑 소스를 생성할 것인지 지정
		// 두 번째 인자: 첫 번째 텍스쳐 맵핑 소스의 식별자의 주소값
		glBindTexture(GL_TEXTURE_2D, g_Texture[0]); 
		//앞으로 설정할 텍스쳐의 식별자를 지정
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

		//GL_TEXTURE_MIN_FILTER: 맵핑 소스가 맵핑되어질 물체보다 클 경우
		//GL_TEXTURE_MAG_FILTER: 맵핑 소스가 맵핑되어질 물체보다 작을 경우
		//GL_NEAREST_MIPMAP_LINEAR   OpenGL   고화질
		//GL_NEAREST_MIPMAP_NEAREST  OpenGL   저화질. 권장.
		//GL_NEAREST_MIPMAP_LINEAR   OpenGL   고화질
		//GL_LINEAR_MIPMAP_NEAREST   Direct3D 저화질. 권장.
		//GL_LINEAR_MIPMAP_LINEAR    주로 배경(벽이나 지면의 재질감)의 설정
		//GL_LINEAR : 보간법
		//GL_NEAREST : 최근점법
		glTexImage2D(GL_TEXTURE_2D, 0, 3, texRec[0]->sizeX, texRec[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texRec[0]->data);
		// 두 번째 인자 : 항상 0, 세 번째 인자: 색상 구성 요소의 개수 RGB 3		   개,여섯번째: 이미지 경계에 대한 픽셀 두께, 여덟 번째: 색상 구성 요		   소들이 갖는 값의 타입
	}

	if(texRec[0])		// 할당된 메모리를 해제
	{
		if(texRec[0]->data)
		{
			free(texRec[0]->data);
			free(texRec[0]);
		}

	}	

	glEnable(GL_TEXTURE_2D);		//텍스쳐 맵핑 사용함을 알림
	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}

void RenderScene()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();

	gluLookAt(0, 0, 6,	0,0,0,	0,1,0);

	glBindTexture(GL_TEXTURE_2D, g_Texture[0]);
	glBegin(GL_QUADS);
		glTexCoord2f(0.0f, 1.0f);
		glVertex3f(-1, 1, 0);

		glTexCoord2f(0.0f, 0.0f);
		glVertex3f(-1, -1, 0);

		glTexCoord2f(1.0f, 0.0f);
		glVertex3f(1, -1, 0);

		glTexCoord2f(1.0f, 1.0f);
		glVertex3f(1, 1, 0);
	glEnd();

	SwapBuffers(g_hDC);
	
}

※ texel - 텍스처 데이터(컬러, 명도, 컬러와 알파 데이터)들의 사각형 배열 각각의 값
※ tessellation - 폴리곤의 각 꼬지점만을 명시해주면 자동으로 폴리곤을 오목한 부분이 없도록 쪼개서 연출해주는 기능

'프로그래밍 > OpenGL' 카테고리의 다른 글

옥트리(octree)  (0) 2009.04.25
OpenGL Viewing  (0) 2009.04.24
OpenGL 기초  (1) 2009.04.23
Picking 사용하기  (0) 2009.04.22
void glutIdleFunc(void (*func)(void))  (0) 2009.04.22
Posted by 마블(이환문)