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

Slides:



Advertisements
Similar presentations
10-7 부동소수점 (Floating-Point) 계산  컴퓨터에서 숫자를 표기하는 방법  가수 (Fraction) : 부호화된 고정소수점 숫자 지수 (Exponent) : 소수점의 위치를 표시 ( 예 )10 진수 를 표기하면 Fraction Exponent.
Advertisements

Texture Mapping 년 봄학기 5/23/2014 박경신. OpenGL Texturing  OpenGL 에서 텍스쳐 맵핑 (texture mapping) 을 위한 3 단계 텍스쳐 활성화 glEnable(GL_TEXTURE_2D) 텍스쳐 맵핑방법.
장. 텍스쳐 학습목표 텍스쳐의 정의와 종류를 이해한다. 평면 다각형의 텍스쳐 매핑 방법을 이해한다. 파라미터로 표현된 곡면 다각형의 텍스쳐 매핑 방법을 이해한다. 파라미터로 표현할 수 없는 곡면 다각형의 텍스쳐 매핑 방법을 이해 한다. 텍스쳐 매핑에서 에일리어싱이.
1. 도형의 연결 상태 2. 꼭지점과 변으로 이루어진 도형 Ⅷ. 도형의 관찰 도형의 연결상태 연결상태가 같은 도형 단일폐곡선의 성질 연결상태가 같은 입체도형 뫼비우스의 띠.
1.3.1 원의 방정식. 생각해봅시다. SK 텔레콤에서는 중화동에 기지국을 세우려고 한다. 이 기지국은 중화고, 중화우체국, 뚝방에 모두 전파를 보내야 한다. 기지국은 어디에 세워야 할까 ? 중화동의 지도는 다음과 같다 원의 방정식.
수학을 통해 배우는 IT 과학의 세계 전북대: 한상언 교수.
텍스쳐 매핑 실습.
이산적 기법들 최 수 미
11장. 텍스쳐 학습목표 텍스쳐의 정의와 종류를 이해한다. 평면 다각형의 텍스쳐 매핑 방법을 이해한다.
그래픽 하드웨어.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
모 바 일 게 임 제 작 한국IT전문학교 박재성.
텍 스 처 매 핑.
Chap 9. 텍스쳐(Texture).
Texture Mapping 김 성 남 1.
음 영 (Shading).
1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용 4장 – 기하학적 객체와 변환
Practice - texture mapping
제 9 장 구조체와 공용체.
수치해석 6장 예제문제 환경공학과 천대길.
7장. 투상변환과 뷰포트변환 학습목표 평행투상과 원근투상의 차이점을 이해한다. 가시부피 설정방식을 이해한다.
학습목표 8장. 가시성 판단 후면제거의 정의와 처리방법을 이해한다. 절단작업의 정의와 처리방법을 이해한다.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
2장. 그래픽 하드웨어 학습목표 그래픽 출력장치의 일반적인 작동원리를 이해한다.
멀티미디어 시스템 (아날로그 이미지,신호를 디지털로 변환 방법) 이름 : 김대진 학번 :
1장 그래픽스 시스템과 모델-이미지 형성, 모델, 구조
학습목표 11장. 텍스쳐 텍스쳐의 정의와 종류를 이해한다. 평면 다각형의 텍스쳐 매핑 방법을 이해한다.
다각형.
3차원 객체 모델링.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
빅데이터 연구회 6주차 발표 주제 : 서포트 벡터 머신 통계학과 서태석.
JA A V W. 03.
피타고라스 정리 Esc.
Chapter03 캔버스(1) HTML5 Programming.
13장. 테두리, 폼 양식 관련 스타일과 레이어 테두리 관련 스타일 폼 양식 관련 스타일 레이어.
마인드 맵.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
USN(Ubiquitous Sensor Network)
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Clipping 이진학.
4장 기하학적 객체와 변환 - 기하 1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용
정다면체, 다면체와 정다각형, 다각형의 관계 한림초등 학교 영제 6학년 5반 송명훈.
Parallel Mapping 정광일
다면체 다면체 다면체: 다각형인 면만으로 둘러싸인 입체도 형 면: 다면체를 둘러싸고 있는 다각형
평 면 도 형 삼각형 다각형 원과 부채꼴 다각형과 원 학습내용을 로 선택하세요 다각형과 원
Excel 일차 강사 : 박영민.
수학10-나 1학년 2학기 Ⅱ.부등식의 영역 1. 부등식의 영역(2/5) 부등식 영역 수업계획 수업활동.
1. 기하학적 변환의 개요 기하학적 변환: 영상을 구성하는 화소의 공간적 위치를 재배치하는 과정,
Window, Viewport Window, Viewport.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
원의 방정식 원의 방정식 x축, y축에 접하는 원의 방정식 두 원의 위치 관계 공통접선 원과 직선의 위치 관계
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
Chapter 1 단위, 물리량, 벡터.
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
1. 접선의 방정식 2010년 설악산.
1. 정투상법 정투상법 정투상도 (1) 정투상의 원리
Summary of Pointers and Arrays
컴퓨터공학과 손민정 Computer Graphics Lab 이승용 교수님
게임수학 제 8 장 고급 렌더링.
제 4 장 Record.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
Texture Mapping Example
8장 표면거칠기 1. 표면 거칠기의 종류 - KS의 가공 표면의 거칠기(요철현상)를 지시하는 방법 최대높이 거 칠기(Ry), 10점 평균 거칠기(Rz), 산술(중심선) 평균 거칠기(Ra), 요철의 평균 간격(Sm), 국부 산봉우리의 평균 간격(S), 부하 길이 율(tp)
 6장. SQL 쿼리.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
6 객체.
Lecture #6 제 4 장. 기하학적 객체와 변환 (1).
BoardGame 보드게임 따라가기.
Presentation transcript:

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

2 2 Texture 학습목표 텍스쳐의 정의와 종류를 이해한다. 평면 다각형의 텍스쳐 매핑 방법을 이해한다. 파라미터로 표현된 곡면 다각형의 텍스쳐 매핑 방법을 이해한다. 파라미터로 표현할 수 없는 곡면 다각형의 텍스쳐 매핑 방법을 이해한다. 텍스쳐 매핑에서 에일리어싱이 일어나는 이유와 앤티 - 에일리어싱 방법 을 이해한다. 지엘의 텍스쳐 매핑방법을 이해한다.

3 3 Texture Map- Texture Map-pp.557 원래의 정의 물체면에 인위적으로 미세한 굴곡을 부여함으로써 주름 면을 형 성 법선벡터 조정 = Bump Map 확산광 계수 변화, 표면 거칠기를 함수화하여 경면광에 반영 [ 그림 11-1] 법선벡터 변화에 의한 범프맵

4 4 Texture Map-pp.558 다각형 분할 서로 다른 색, 표면 기울기를 부여 너무 많은 시간이 소요됨 대신 2 차원 영상을 직접 평면 표면에 입힘  텍스쳐 (Texture, Texture Image, Texture Map) [ 그림 11-3] 목재표면 [ 그림 11-4] 오렌지 [ 그림 11-5] 텍스쳐 I [ 그림 11-6] 텍스쳐 II

5 5 Texture Mapping 예 -pp.559 일반적 Texture Mapping Light Mapping 물체면의 밝기를 계산하는 대신 Texture 와 조명 결과를 혼합하여 결과적 인 영상을 직접 물체면에 입힘. [ 그림 11-7] 예 [ 그림 11-8] 원구 [ 그림 11-9] 매핑결과 [ 그림 11-10] 라이트

6 6 Texture Mapping 예 -pp.560 주변 매핑 (Environmental Mapping) 물체 외부 환경이 해당 물체면에 반사 반짝이는 물체면을 표현 [ 그림 11-11] 원구 [ 그림 11-12] 매핑 결과

7 7 Texture Mapping 기법 -GL 의 Texture Mapping-pp.561 매핑 시기 기하 파이프라인과 영상 파이프라인 래스터 변환에서 만남 [ 그림 11-13] 지엘의 텍스쳐 매핑 시기 [ 그림 11-14] 기하 파이프라인과 영상 파이프라인

8 8 Texel-pp.562 Texel(Texture Element) Texture 영상의 기본단위 화소 (Pixel) 와 마찬가지로 (R, G, B, A) 저장 예 : 6 ☓ 5 크기의 2 차원 배열로 저장. Texture 좌표는 정규화 형태로 표현. Texture Mapping: (s, t) 좌표로 표현된 2 차원 Texture 영상을 (x, y, z) 좌표 로 표현된 3 차원 물체면으로 사상 [ 그림 11-15] 텍스쳐 매핑

9 9 평면다각형으로의 Texture Mapping-pp 수작업 좌표명시 [ 그림 11-16] 수작업 텍스쳐 매핑 I [ 그림 11-17] 수작업 텍스쳐 매핑 II

10 Mapping 방향 -pp [ 그림 11-18] 삼각형 내부화소 매핑 [ 그림 11-19] 에일리어싱 [ 그림 11-20] 원근변환 다각형에서 Texture 로 화소 (Pixel) 별로 해당 Texture 를 구함 Aliasing 발생가능 Projection 이후에 Texture 를 가하는데 따른 오류

11 곡면의 Texture Mapping-pp.565 평면으로 곡면을 둘러싸는데 따르는 어려움 역으로 곡면으로 평면을 만드는데 따르는 어려움 [ 그림 11-21] 곡면 I [ 그림 11-22] 곡면 II

12 파라미터 곡면 -pp.566 예 : 원구 ( 표면상의 점을 경도, 위도로 표현가능 ) [ 그림 11-23] 원구좌표 (11.3) (11.4) (11.5) [ 그림 11-24] 평면 텍스쳐를 원구 표면으로 매핑 (11.6) (11.7) (11.8) (11.9)

13 다각형 곡면 -pp 단계 매핑 (2-Stage Mapping) 곡면을 매개변수로 표시할 수 없을 때 S Mapping 에서는 Texture 를 원기둥, 육면체, 원구 등 중개면 ( 仲介, Intermediate Surface) 에 입힘. S Mapping 의 예 : 원기둥 중개면 [ 그림 11-25] 원기둥 중개면 [ 그림 11-26] 좌표 (11.11) (11.12) (11.10)

14 다각형 곡면 -pp.568 O 매핑 물체를 중개면 내부에 넣고 물체면에 텍스쳐를 입힘. 원기둥, 육면체, 원구 중개면 [ 그림 11-27] 캡 [ 그림 11-28] 중개면 [ 그림 11-30] 확장 캡 [ 그림 11-34] 육면체 중개면 [ 그림 11-35] 물체 [ 그림 11-36] 매핑결과 [ 그림 11-32] 중개면 [ 그림 11-33] 매핑결과

15 다각형 곡면 ( 계속 ) O 매핑의 종류 물체면 법선벡터, 물체 중심, 중개면 법선벡터, 시점 반사벡터 [ 그림 11-29] O 매핑의 종류

16 Environmental Mapping-pp 경면 반사 (Specular Reflection) 를 위주로 표현할 수 있는 물체, 반사 매핑 (Reflective Mapping). Ex. Terminator II 2 단계 매핑 사용 O 매핑에서 시점 반사벡터를 사용 시점 위치에 따라 서로 다른 모습 [ 그림 11-37] Terminator II [ 그림 11-38] 중개면 텍스쳐 [ 그림 11-39] 주변매핑 [ 그림 11-40] 매핑 결과

17 Environmental Mapping ( 계속 ) 원구 중개면의 예 물체주변 모습을 광각으로 반영 180 도 어안렌즈로 촬영된 Texture [ 그림 11-41] 180 도 [ 그림 11-42] 매핑결과 [ 그림 11-43] 시점 반사벡터에 의한 O 매핑

18 Anti-Aliasing => Aliasing -pp 텍스쳐 매핑 비선형 매핑 (Non-Linear Mapping): 평면 사각형이 곡선 사변형 (Curvilinear Quadrilateral) 으로 점 샘플링 (Point Sampling) 에 의한 Aliasing: 언더샘플링 [ 그림 11-44] 매핑과 역 매핑 [ 그림 11-45] 에일리어싱

19 확장관계와 축소관계 -pp.575 축소관계 (Magnification) 여러 Texel 이 한 Pixel 로 확장관계 (Minification) Texel 크기 이하가 한 Pixel 로 두 경우 모두 Aliasing 발생가능 [ 그림 11-46] 축소관계와 확장관계

20 Anti-Aliasing : 양방향 선형보간 -pp.576 확장관계에 주로 사용 화소 (Pixel) 중앙점이 Texel 의 점 p 로 사상되었을 경우 대부분 그래픽 카드에서 표준으로 채택 Texture 경계선이 흐려짐 [ 그림 11-47] 양방향 선형보간

21 점 샘플링과 양방향 선형보간 -pp.579 [ 그림 11-53] 점 샘플링과 양방향 선형보간

22 Anti-Aliasing : MipMap-pp.577 축소관계에 주로 적용 : 한 화소가 여러 Texel 에 걸쳐짐 MIP Mapping: Multum in Parvo, Many Things in a Small Place 해상도 별로 평균치를 계산하여 Texture Map 에 저장 (R, G, B 별 ) 사전 필터링 (Pre-Filtering), 다해상도 텍스쳐 (Multi-Resolution Texture) [ 그림 11-48] 밉맵 생성과정

23 Mipmap 예시 -pp.577 해상도에 따라 Mipmap 을 선택 1 화소 (Pixel) 가 1 Texel 로 Mapping: Map #1 1 화소 (Pixel) 가 4 Texel 로 Mapping: Map #2 평균 낸 Texture 값을 사용함으로써 Anti-Aliasing 을 기함. [ 그림 11-49] 밉맵 [ 그림 11-50] 밉맵 예시

24 Anti-Aliasing 예시 ( 계속 ) Mipmap 을 사용한 점 샘플링과 양방향 선형보간 [ 그림 11-54] Mipmap 에서의 점 샘플링과 양방향 선형보간

25 GL 의 Texture Mapping-pp.580 Texture 기능 활성화 void glEnable(Glenum mode) void glDisable(Glenum mode)  mode : GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D Texture 영상 명시 Glubyte MyTexture[Width][Height][3]  MyTexture[i][j] : 하나의 Texel Void glTexImage2D(Glenum target, Glint level, Glint internalformat, Glsizei width, Glsizei height, Glint border, Glenum format, Glenum type, const Glvoid *texture)  target : GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D  level : Mipmap 레벨, 미사용시 0  width, height : Texel 단위의 Texture 폭과 높이  border : 윤곽선 두께 ( 단위 : Texel)  internalformat : Texel 을 기술하는데 사용된 요소 배열로 표현된 영상을 텍스쳐 영상으로 사 용하기 위한 함수

26 GL 의 Texture Mapping ( 계속 ) Texture 영상 명시 ( 계속 ) Void glTexImage2D(Glenum target, Glint level, Glint internalformat, Glsizei width, Glsizei height, Glint border, Glenum format, Glenum type, const Glvoid *texture) ( 계속 )  format : 특수한 경우를 제외하고 internalformat 과 동일하게 할당  type  texture : 실제 Texture 영상이 저장된 배열명

27 GL 의 Texture Mapping : 수동 Mapping-pp.585 glBegin(GL_POLYGON); glNormal3f(0.0, 0.0, 1.0); glTexCoord2f(0.2, 0.8); 텍스쳐 정점 a 를 glVertex3f(7.5, 10.5, 0.0); 물체 정점 A 에 할당 glNormal3f(0.0, 0.0, 1.0); glTexCoord2f(0.4, 0.2); 텍스쳐 정점 b 를 glVertex3f(0.0, 3.8, 0.0); 물체 정점 B 에 할당 glNormal3f(0.0, 0.0, 1.0); glTexCoord2f(0.8, 0.4); 텍스쳐 정점 c 를 glVertex3f(12.0, 0.0, 0.0); 물체 정점 C 에 할당 glEnd( ); [ 그림 11-56] GL 의 수동 Texture Mapping

28 GL 의 Texture Mapping : 자동 Mapping-pp.586 void glTexGen{ifd}[v](GLenum coord, GLenum pname, TYPE param); 기준평면과의 물체와의 거리 [ 그림 11-57] 거리에 의한 텍스쳐 매핑 [ 표 11-3] glTexGen*( ) 함수 파라미터

29 주변 매핑 -pp.591 도구이용, 카메라 (180 도 ), 카메라 (360) 도 카메라 (360 도 ) [ 그림 11-58] 반사 [ 그림 11-59] 180 도 [ 그림 11-60] 360 도

30 Texture Parameter 명시 -pp.592 void glTexParameter{if}(Glenum target, Glenum pname, TYPE param) target : Texture 가 2D 인지 3D 인지의 표현 pname GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T Wrapping( 래핑, 감싸기 ) – S 방향과 T 방향으로 Texture 를 어떻 게 확장할 것인가를 결정 GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER Filtering - 해당 화소 (Pixel) 의 Texture 선택 방법을 결정

31 Texture Parameter 명시 ( 계속 ) void glTexParameter{if}(Glenum target, Glenum pname, TYPE param) ( 계속 ) param GL_REPEAT, GL_CLAMP [ 그림 11-63] GL_REPEAT [ 그림 11-65] 예 II [ 그림 11-66] 텍스쳐 매핑 결과 pp 확인

32 Texture Parameter 명시 ( 계속 ) void glTexParameter{if}(Glenum target, Glenum pname, TYPE param) ( 계속 ) param GL_REPEAT, GL_CLAMP 을 사용한 Texture tile 의 문제점 [ 그림 11-67] 접합부 [ 그림 11-68] 접합부 불일치

33 Texture Parameter 명시 ( 계속 ) void glTexParameter{if}(Glenum target, Glenum pname, TYPE param) ( 계속 ) param GL_NEAREST : 점 샘플링 GL_LINEAR : 양방향 선형 보간에 해당하는 것으로 인접한 4 개의 Texel 을 보간 GL_LINEAR_MIPMAP_NEAREST : 주어진 해상도에 가장 가까운 MIPMAP_NEAREST 을 선택한 후 해당 Mipmap 내에서 양방향 선형 보간을 가하는 방법 GL_NEAREST_MIPMAP_NEAREST : MIPMAP_NEAREST 에서 다시 점 샘 플링을 가하는 방법 GL_LINEAR_MIPMAP_LINEAR : Mipmap 사이를 보간하여 새로운 MIPMAP_LINEAR 을 만든 후 해당 Mipmap 내에서 양방향 선형 보간을 가 하는 방법 – 가장 부드러운 Anti-Aliasing 효과 [ 그림 11-69, 70] 그림 64 및 그림 65 에 GL_LINEAR 을 적용한 결과

34 Texture 환경 명시 -pp.598 void glTexEnv{if}(Glenum target, Glenum pname, TYPE param) target : GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE : Texture 의 색과 물체면의 색을 어떻 게 조합할 것인가를 명시 GL_TEXTURE_ENV_COLOR : GL_TEXTURE_ENV_MODE 의 타 입 Parameter 가 GL_BLEND 일 때만 사용

35 Texture 환경 명시 ( 계속 ) void glTexEnv{if}(Glenum target, Glenum pname, TYPE param) ( 계속 ) param GL_REPLACE : 기존 물체면의 색을 완전히 텍스처 색으로 대체 GL_MODULATE : 기존 물체면 색과 Texture 색을 곱해서 최종 색을 결정 GL_DECAL, GL_BLEND : 물체면 위에 Texture 색을 덧칠하는 효과 [ 그림 11-71] GL_REPLACE(a) 와 GL_MODULATE(b)

36 Texture 객체 -pp Texture 객체 : Texture 와 해당 Texture 에 적용되는 Parameter 값을 묶어서 하나 의 Texture 객체를 정의 void glGenTextures(Glsizei N, Gluint *TextureNameArray) Texture 객체 명을 자동으로 할당하기 위한 함수 N : 할당된 객체의 개수 TextureNameArray : Texture 객체명이 저장될 배열명 void glBindTexture(Glenum target, Gluint TextureName) 실제로 Texture 객체를 생성하고 객체명을 할당하는 함수 target : Texture 의 종류 TextureName : 프로그래머가 사용하는 Texture 명

37 GL 프로그램 예 -pp 띠무늬 Texture Using the Quadrics Using the Quadrics 참조 Bitmap File Texture [ 그림 11-72] GL_REPLACE 와 GL_MODULE 의 결과

38 Bitmap Image File(*.bmp) 을 이용한 Texture Mapping Source void loadTexture(void) { AUX_RGBImageRec *texRec[11]; memset(texRec, 0, sizeof(void *)*11); if((texRec[0]=LoadBMP("data/Sun.bmp")) && (texRec[1]=LoadBMP("data/Mercury.bmp")) && … (texRec[9]=LoadBMP("data/Neptune.bmp")) && (texRec[10]=LoadBMP("data/Sunshine.bmp"))) { for(i=0; i<11; i++) { glGenTextures(1, &tex[i]); glBindTexture(GL_TEXTURE_2D, tex[i]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, texRec[i]->sizeX, texRec[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texRec[i]->data); } for(i=0; i<11; i++) { if(texRec[i]) { if(texRec[i]->data) free(texRec[i]->data); free(texRec[i]); } glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } Bitmap Image (*.bmp) (*.bmp) 2n2n2n2n 2n2n2n2n

39 Texture Mapping 이 가능한 Sphere Source void renderSphere( float cx, float cy, float cz, float r, int p ) { int i, j; const float PI = f; const float TWOPI = f; const float PIDIV2 = f; float theta1 = 0.0; float theta2 = 0.0; float theta3 = 0.0; float ex = 0.0f; float ey = 0.0f; float ez = 0.0f; float px = 0.0f; float py = 0.0f; float pz = 0.0f; // Disallow a negative number for radius. if( r < 0 ) r = -r; // Disallow a negative number for precision. if( p < 0 ) p = -p; // If the sphere is too small, just render a OpenGL point instead. if( p < 4 || r <= 0 ) { glBegin( GL_POINTS ); glVertex3f( cx, cy, cz ); glEnd(); return; } for(i = 0; i < p/2; ++i ) { theta1 = i * TWOPI / p - PIDIV2; theta2 = (i + 1) * TWOPI / p - PIDIV2; glBegin(GL_TRIANGLE_STRIP); { for(j = 0; j <= p; ++j ) { theta3 = j * TWOPI / p; ex = cos(theta2) * cos(theta3); ey = sin(theta2); ez = cos(theta2) * sin(theta3); px = cx + r * ex; py = cy + r * ey; pz = cz + r * ez; glNormal3f( ex, ey, ez ); glTexCoord2f( -(j/(float)p), 2*(i+1)/(float)p ); glVertex3f( px, py, pz ); ex = cos(theta1) * cos(theta3); ey = sin(theta1); ez = cos(theta1) * sin(theta3); px = cx + r * ex; py = cy + r * ey; pz = cz + r * ez; glNormal3f( ex, ey, ez ); glTexCoord2f( -(j/(float)p), 2*i/(float)p ); glVertex3f( px, py, pz ); } glEnd(); } #include 삽입 cx, cy, cz : 구의 중심 좌표 r : radius ( 반지름 ) p : precision ( 정밀도 ) #include 삽입 cx, cy, cz : 구의 중심 좌표 r : radius ( 반지름 ) p : precision ( 정밀도 )