텍스쳐 매핑 실습.

Slides:



Advertisements
Similar presentations
1 Kim, Sung-Ho School of Computer, Information and Communication Engineering Sangji Univ.
Advertisements

Texture Mapping 년 봄학기 5/23/2014 박경신. OpenGL Texturing  OpenGL 에서 텍스쳐 맵핑 (texture mapping) 을 위한 3 단계 텍스쳐 활성화 glEnable(GL_TEXTURE_2D) 텍스쳐 맵핑방법.
장. 텍스쳐 학습목표 텍스쳐의 정의와 종류를 이해한다. 평면 다각형의 텍스쳐 매핑 방법을 이해한다. 파라미터로 표현된 곡면 다각형의 텍스쳐 매핑 방법을 이해한다. 파라미터로 표현할 수 없는 곡면 다각형의 텍스쳐 매핑 방법을 이해 한다. 텍스쳐 매핑에서 에일리어싱이.
홈페이지를 위한 메뉴바 만들기 메뉴바 제작 순서 LAYER STYLE 대화상자 Shape툴로 기본모양 제작
이정훈 전한배. 1. What is Image Processing? 2. Image Making 3. Application 4. OpenCV Outline.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
OpenGL 실습 12 로봇.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
이산적 기법들 최 수 미
11장. 텍스쳐 학습목표 텍스쳐의 정의와 종류를 이해한다. 평면 다각형의 텍스쳐 매핑 방법을 이해한다.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Image & Video processing
제14장 동적 메모리.
텍 스 처 매 핑.
Chap 9. 텍스쳐(Texture).
음 영 (Shading).
1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용 4장 – 기하학적 객체와 변환
Practice - texture mapping
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
-Part2- 제3장 포인터란 무엇인가.
조 병 규 Software Quality Lab. 한국교통대학교
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
DSP Lab. Week 3 My image Doug Young Suh Media Lab. Rm401
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
소프트웨어 분석과 설계 Struts2 & JBOSS 설치하기
임베디드 실습 # LED, 7’Segment 제어
학습목표 11장. 텍스쳐 텍스쳐의 정의와 종류를 이해한다. 평면 다각형의 텍스쳐 매핑 방법을 이해한다.
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
14장. 포인터와 함수에 대한 이해.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
3차원 객체 모델링.
2018년 10월 08일 박성진 Web & Internet [05] CSS3 속성 2018년 10월 08일 박성진
버퍼 (Buffer).
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
영상처리 실습 인공지능연구실.
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Microsoft Word 2002 제4장 그리기와 그림 삽입하기.
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
Eclipse CDT에서 프로젝트를 Export 하고 Import 하는 방법
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
기말 프로젝트 계획 MVC 패턴 기반 웹 애플리케이션 개발 프로젝트명 : 팀명 : 팀원 :
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
OpenGL Introduction 컴퓨터 그래픽스 김 창 헌.
빌드 성공.
MATLAB Image Processing Toolbox
OpenCV 설정 2.21 만든이 딩딩.
소리 편집 안 재 형.
STS 또는 Eclipse 에서 프로젝트를 Export 하고 Import 하는 방법
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
1. 정투상법 정투상법 정투상도 (1) 정투상의 원리
웹과 모바일 홈페이지의 이해와 제작 폰트_레이아웃
구조체(struct)와 공용체(union)
Chapter 11 구조체.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
7 생성자 함수.
Presentation transcript:

텍스쳐 매핑 실습

체크무니 텍스쳐 생성 및 매핑 GLubyte check[512][512][3]={0,}; int i, j; for(i=0; i<512; i++) for (j=0; j<512; j++) if((i/64+j/64)%2) check[i][j][0]=255;

메인 메모리의 내용을 프레임 버퍼로 복사 glRasterPos*{2i,2f,..}(): 현재 래스터 위치 지정 glDrawPixels(GLsizei width, Glsizei height, GLenum format, GLenum type, GLvoid *image); The glDrawPixels function writes a block of pixels to the framebuffer. format: GL_RGB, GL_RGBA,…. type: GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT,… 픽셀 사각형은 현재 래스터 위치를 왼쪽 아래 모서리 지점으로 지정

평행사변형에 수동매핑 텍스쳐 객체 사용하여 매핑 평행사변형 vertexes: {(-0.5,-0.5,0),(0,-0.5,0), (0.5,0.5,0), (0,0.5,0)} 텍스처 확장: s와 t 방향으로 GL_REPEAT 사용 앤티에일리어싱: 확장, 축소에 GL_NEAREST 사용 텍스쳐 환경: GL_MODULATE glTexImage2D() 사용 glEnable(GL_TEXTURE_2D); glTexCoord2f() 사용 수동 매핑 텍스쳐 객체 사용하여 매핑 glGenTexture() glBindTexture()

텍스처 매핑 ex_cube.cpp를 이용하여 checkerboard texture를 정육면체에 매핑하여라

텍스처 매핑 텍스처 crate.raw(256X256, GL_RGB)를 입력 받아 cube에 다음과 같이 매핑하여라

#include <stdio.h> unsigned char my_texture[256][256][3]; void texture_read(){ FILE *infile = fopen("crate.raw","rb"); if(infile == NULL){ printf("File open failed."); return; } fread(my_texture, sizeof(char), 256*256*3, infile); fclose(infile); ()에서 texture_read() 호출

이차곡면 렌더링 GLUquadricObj* gluNewQuadric (); 새로운 이차곡면 객체를 만들고 객체의 포인터를 반환한다. void gluQuadricDrawStyle (GLUquadricObj *quad , Glenum drawStyle ); drawStyle을 사용하여 이차원 곡면 quad의 제작 스타일을 조절한다. quad : quadrics object (created with gluNewQuadric). drawStyle : the desired draw style. Valid values are GLU_FILL, GLU_LINE, GLU_SILHOUETTE, and GLU_POINT. gluNewQuadric();로 만들어진 객체에 원하는 타입 루틴 호출(곡면종류) gluDisk (quad , inner , outer , slices , loops ) renders a disk on the z = 0 plane. The disk has a radius of outer, and contains a concentric circular hole with a radius of inner. gluSphere (quad , radius , slices , stacks ) draws a sphere of the given radius centered around the origin. gluPartialDisk (quad , inner , outer , slices , loops , start , sweep ) start: start angle(0=12 o'clock), sweep: sweep angle void gluCylinder (GLUquadric* quad , GLdouble base , GLdouble top , GLdouble height , GLint slices , GLint stacks ); base :the radius of the cylinder at z=0. top : the radius of the cylinder at z=height.

1D 띠무니 텍스쳐 텍스쳐를 이차원 곡면에 매핑 GL_REPLACE GL_MODULATE

unsigned int MyTextureObject; GLUquadricObj *qobj; qobj = gluNewQuadric( ); gluQuadricDrawStyle(qobj, GLU_FILL); MyStripeImage( ); glGenTextures(1, &MyTextureObject); glBindTexture(GL_TEXTURE_1D, MyTextureObject); glTexImage1D(GL_TEXTURE_1D, 0, 4, stripeImageWidth, 0, GL_RGBA, GL_UNSIGNED_BYTE, stripeImage); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGenfv(GL_S, GL_OBJECT_PLANE, ref_plane); glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_1D);

띠무니 텍스쳐 다음과 같이 텍스쳐를 만들어 자동텍스쳐 매핑 방법을 이용하여 원구에 매핑하시오 기준평면을 바꾸어 보시오 GL_REPLACE GL_MODULATE

void MyStripeImage(){ int j,k; for (j=0; j<512; j++){ if((GLubyte)(j/64)%2) { stripeImage[4*j]= (GLubyte) 255; stripeImage[4*j+1]= (GLubyte) 0; stripeImage[4*j+2]= (GLubyte) 0; stripeImage[4*j+3]= (GLubyte) 0; } else for(k=0;k<4;k++) stripeImage[4*j+k]= (GLubyte) 0;

2D 체크무니 텍스쳐 2D checkerboard 텍스쳐를 이용하여 자동텍스쳐 매핑 방법을 이용하여 원구에 매핑하시오 ref_plane_s[]={1,0,0,0} ref_plane_t[]={0,1,0,0} GL_REPLACE GL_MODULATE

glGenTextures(1, &ObjectId); glBindTexture(GL_TEXTURE_2D, ObjectId); makecheckboard(); //텍스쳐객체사용 glGenTextures(1, &ObjectId); glBindTexture(GL_TEXTURE_2D, ObjectId); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, check); //object_linear glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGenfv(GL_S, GL_OBJECT_PLANE, ref_plane_s); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGenfv(GL_T, GL_OBJECT_PLANE, ref_plane_t); //물체가이동하지않을때는두개가같다 //eye_linear 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_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST); //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_2D);

다음과 같이 2D 텍스쳐가 매핑되도록 기준 평면을 설정하시오

비트맵 파일 텍스쳐 비트맵 파일을 메모리로 로딩 윈도우용 AUX(OpenGL auxiliary library) 프로젝트->속성->링커->입력->추가종속성->glaux.lib 입력 AUX_RGBImageRec *pTextureImage[1]; //텍스쳐 저장 공간을 가리키는 포인터 AUX_RGBImageRec * LoadBMP(char *szFilename) { FILE * pFile = NULL; if(!szFilename){ return NULL; } pFile = fopen(szFilename,"r"); if(pFile){ fclose(pFile); return auxDIBImageLoadA(szFilename); //파일로부터 메모리로 }AUX_RGBImageRec 구조체는 AUX 라이브러리의 자료형으로 BMP 파일의 크기와 그림 데이타 포인터를 가지고 있다.

파일을 로드하고 텍스쳐로 변환 int LoadGLTextures(char * szFilePath){ //파일을 로드하고 텍스쳐로 변환 int Status = FALSE; glClearColor(0.0, 0.0, 0.0, 0.5); memset(pTextureImage, 0, sizeof(void *)*1); //포인터를 널로 //비트맵을 로드하고 오류확인 if (pTextureImage[0]=LoadBMP(szFilePath)){ Status=TRUE; //상태 플랙을 True로 glGenTextures(1, &MyTextureObject[0]); //텍스쳐 생성 glBindTexture(GL_TEXTURE_2D, MyTextureObject[0]); glTexImage2D(GL_TEXTURE_2D, 0, 3, pTextureImage[0]->sizeX, pTextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pTextureImage[0]->data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glEnable(GL_TEXTURE_2D); } if (pTextureImage[0]){ //텍스쳐가 존재하면 if (pTextureImage[0]->data){ //텍스쳐 영상이 존재하면 free(pTextureImage[0]->data); //텍스쳐 영상공간 반납 } free(pTextureImage[0]); //텍스쳐 반납 return Status;

주변매핑 시야각 360 사진 필요 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_S);

HW 자신의 다른 모습의 사진 3장 이상을 bitmap파일로 만들어서 텍스쳐로 정육면체 붙이고 조명과 음영을 주어 앞 예제처럼 타이머를 이용하여 회전시키시오