WebGL 3D 프로그래밍 [HTML5와 자바스크립트, 웹지엘로 만드는 웹 3D 그래픽]
- 원서명WebGL Beginner's Guide (ISBN 9781849691727)
- 지은이디에고 캔토, 브랜든 존스
- 옮긴이김태원
- ISBN : 9788960773622
- 30,000원
- 2012년 11월 13일 펴냄 (절판)
- 페이퍼백 | 372쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 게임 개발 프로그래밍, 웹 프로페셔널
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
최근 HTML5 웹 멀티미디어 기술에 대한 요구가 높아지면서 화려한 3D 그래픽을 웹에 구현할 수 있는 웹지엘(WebGL)에 대한 관심도 높아지고 있다. 이 책은 이런 시장의 요구에 맞춰 3D 그래픽을 웹에 구현하는 방법을 제시하는 완벽한 웹지엘 가이드다. 이 책을 시작으로 웹에서 펼쳐지는 화려한 그래픽을 접하고, 기하 정보, 조명, 애니메이션 등 기본 개념 또한 완벽하게 배울 수 있다.
[ 소개 ]
웹지엘과 자바스크립트를 사용해 3D 웹 애플리케이션을 만들어보자!
『WebGL 3D 프로그래밍』은 웹지엘을 처음 시작하는 데 명쾌한 길을 제시한다. 각 장의 도입 부분에서 나아가야 할 목표를 제시한 다음, 자세한 설명이 뒤따르는 방법으로 기술되어 있어 내용을 이해하기 매우 쉽다. 이 책에서 다루는 그리기, 색상, 텍스처, 변환, 프레임버퍼, 빛, 표면, 기하 정보 등에 관한 풍부한 예제는 웹지엘의 본질을 알기 쉽게 설명해준다. 이 예제들과 함께 3D 그래픽 프로그래밍 스킬을 한 단계 더 업그레이드할 수 있을 것이다. 이 책은 3D 웹 애플리케이션을 만드는 데 있어 훌륭한 파트너가 될 것이다.
[ 이 책에서 다루는 내용 ]
■ 웹지엘 애플리케이션 구조
■ 웹지엘에서의 3D 오브젝트 생성과 그리기
■ JSON과 AJAX를 사용한 복잡한 모델 로드
■ 셰이더를 사용한 조명 모델 설정과 빛 반사, 조명 전략
■ 카메라 생성과 3D 씬에서의 움직임
■ 텍스처, 조명, 셰이딩 테크닉을 사용한 실감나는 3D 씬 제작
■ 마우스를 사용한 3D 씬 안에서의 오브젝트 선택
■ 훌륭한 고도의 시각 효과 생성을 위한 고급 기법
[ 이 책의 대상 독자 ]
이 책은 3D 웹 개발에 흥미가 있는 자바스크립트 개발자를 위해 쓰여졌다. 돔(DOM) 오브젝트, 제이쿼리(jQuery) 라이브러리, AJAX, JSON 같은 지식은 있으면 좋지만 잘 몰라도 상관 없다. 또한 웹지엘을 한 번도 공부해보지 않았더라도 이 책을 읽는 데는 전혀 지장이 없다. 하지만 기본적인 수학 지식은 필요하다.
[ 이 책의 구성 ]
1장 ‘웹지엘 시작하기’에서는 HTML5 캔버스를 소개하며, 캔버스에서 웹지엘 컨텍스트를 사용하는 방법을 소개한다. 그리고 웹지엘 애플리케이션과, ‘가상 자동차 쇼룸’ 데모를 통해 3D 그래픽 애플리케이션에서 사용되는 웹지엘을 설명한다. 이 데모에서는 웹지엘의 요소들을 함께 소개한다.
2장 ‘기하 렌더링’에서는 오브젝트를 정의하고, 연산하고, 렌더링하는 웹지엘 API를 소개한다. 또한 AJAX와 JSON을 사용해 비동기적인 기하 정보 로딩 방법을 설명한다.
3장 ‘빛!’에서는 웹지엘에서의 셰이딩 언어인 ESSL을 소개한다. 또한 웹지엘에서 ESSL 셰이더를 이용해 그림자 효과를 주는 방법을 설명한다. 이 기법은 그림자와 빛 반사 효과로 이뤄지며, 몇 가지 예제를 실습해본다.
4장 ‘카메라’에서는 웹지엘에서 행렬 변환을 이용한 카메라 생성과 동작을 설명한다. 웹지엘의 원근 행렬과 정규 행렬, 그리고 이런 행렬들을 ESSL 셰이더에 적용해 모든 도형에 적용하는 방법도 설명한다. 또한 여러 예제를 통해 웹지엘 카메라 사용법을 익힌다.
5장 ‘액션’에서는 기하 정보 변환(이동, 회전, 확대/축소)을 수행하기 위한 행렬 사용법을 알아보며, 행렬 스택을 소개한다. 또한 행렬 스택을 이용해 한 번에 모든 오브젝트를 변환하는 방법을 알아본다. 그리고 자바스크립트 타이머와 행렬 스택을 이용한 애니메이션 기법을 알아본다. 각 기법은 예제를 통해 확인할 수 있다.
6장 ‘색상, 깊이 테스팅, 알파블렌딩’에서는 ESSL 셰이더의 색상을 통해 깊이 정보(z-order)를 알아본다. 또한 웹지엘에서 1개 이상의 광원을 정의하고 사용하는 방법을 소개하며, 깊이 테스팅과 알파블렌딩의 개념을 설명하고, 이들이 반투명 오브젝트를 만들 때 어떻게 사용되는지 알려준다. 그리고 여러 예제를 통해 쉽게 이해해본다.
7장 ‘텍스처’에서는 웹지엘에서 어떻게 텍스처를 생성하고, 관리하며, 사용하는지 보여준다. 그리고 텍스처 좌표와 매핑을 설명한다. 7장에서는 여러 가지 텍스처 매핑 기법을 논하며, 이 기법의 실습 예제를 제공한다. 또한 여러 개의 텍스처 사용법을 통해 큐브(정육면체)를 만들어본다.
8장 ‘픽킹’에서는 사용자 선택에 의한 오브젝트 동작인 픽킹을 알아본다. 그리고 사용자가 클릭한 좌표의 계산 방법과 사용자가 선택한 임의의 오브젝트를 렌더링하는 방법을 설명한다. 이 방법은 몇 개의 콜백 후킹을 이용해 특정 로직을 통해 구현되며, 픽킹을 다룬 예제 2개를 살펴본다.
9장 ‘모든 기법 적용해보기’에서는 이 책에서 언급한 모든 것을 함께 적용하는 방법을 설명한다. 9장에서는 1장 ‘웹지엘 시작하기’에서 나온 가상 자동차 쇼룸 데모를 좀 더 확장해볼 것이다. 가상 자동차 쇼룸 데모를 통해, 블렌더 모델을 웹지엘 씬에 적용하는 방법과 블렌더 모델에서의 ESSL 셰이더 사용법을 알아본다.
10장 ‘고급 기법’에서는 후처리 효과, 포인트 스프라이트, 법선 매핑, 광선 추적법 등의 고급 기법을 보여주며 각 기법당 예제가 제공된다. 『WebGL 3D 프로그래밍』을 다 읽고 난 후에는 여러분이 자신만의 고급 기법을 사용할 수 있기를 기원한다.
[ 소개 ]
웹지엘과 자바스크립트를 사용해 3D 웹 애플리케이션을 만들어보자!
『WebGL 3D 프로그래밍』은 웹지엘을 처음 시작하는 데 명쾌한 길을 제시한다. 각 장의 도입 부분에서 나아가야 할 목표를 제시한 다음, 자세한 설명이 뒤따르는 방법으로 기술되어 있어 내용을 이해하기 매우 쉽다. 이 책에서 다루는 그리기, 색상, 텍스처, 변환, 프레임버퍼, 빛, 표면, 기하 정보 등에 관한 풍부한 예제는 웹지엘의 본질을 알기 쉽게 설명해준다. 이 예제들과 함께 3D 그래픽 프로그래밍 스킬을 한 단계 더 업그레이드할 수 있을 것이다. 이 책은 3D 웹 애플리케이션을 만드는 데 있어 훌륭한 파트너가 될 것이다.
[ 이 책에서 다루는 내용 ]
■ 웹지엘 애플리케이션 구조
■ 웹지엘에서의 3D 오브젝트 생성과 그리기
■ JSON과 AJAX를 사용한 복잡한 모델 로드
■ 셰이더를 사용한 조명 모델 설정과 빛 반사, 조명 전략
■ 카메라 생성과 3D 씬에서의 움직임
■ 텍스처, 조명, 셰이딩 테크닉을 사용한 실감나는 3D 씬 제작
■ 마우스를 사용한 3D 씬 안에서의 오브젝트 선택
■ 훌륭한 고도의 시각 효과 생성을 위한 고급 기법
[ 이 책의 대상 독자 ]
이 책은 3D 웹 개발에 흥미가 있는 자바스크립트 개발자를 위해 쓰여졌다. 돔(DOM) 오브젝트, 제이쿼리(jQuery) 라이브러리, AJAX, JSON 같은 지식은 있으면 좋지만 잘 몰라도 상관 없다. 또한 웹지엘을 한 번도 공부해보지 않았더라도 이 책을 읽는 데는 전혀 지장이 없다. 하지만 기본적인 수학 지식은 필요하다.
[ 이 책의 구성 ]
1장 ‘웹지엘 시작하기’에서는 HTML5 캔버스를 소개하며, 캔버스에서 웹지엘 컨텍스트를 사용하는 방법을 소개한다. 그리고 웹지엘 애플리케이션과, ‘가상 자동차 쇼룸’ 데모를 통해 3D 그래픽 애플리케이션에서 사용되는 웹지엘을 설명한다. 이 데모에서는 웹지엘의 요소들을 함께 소개한다.
2장 ‘기하 렌더링’에서는 오브젝트를 정의하고, 연산하고, 렌더링하는 웹지엘 API를 소개한다. 또한 AJAX와 JSON을 사용해 비동기적인 기하 정보 로딩 방법을 설명한다.
3장 ‘빛!’에서는 웹지엘에서의 셰이딩 언어인 ESSL을 소개한다. 또한 웹지엘에서 ESSL 셰이더를 이용해 그림자 효과를 주는 방법을 설명한다. 이 기법은 그림자와 빛 반사 효과로 이뤄지며, 몇 가지 예제를 실습해본다.
4장 ‘카메라’에서는 웹지엘에서 행렬 변환을 이용한 카메라 생성과 동작을 설명한다. 웹지엘의 원근 행렬과 정규 행렬, 그리고 이런 행렬들을 ESSL 셰이더에 적용해 모든 도형에 적용하는 방법도 설명한다. 또한 여러 예제를 통해 웹지엘 카메라 사용법을 익힌다.
5장 ‘액션’에서는 기하 정보 변환(이동, 회전, 확대/축소)을 수행하기 위한 행렬 사용법을 알아보며, 행렬 스택을 소개한다. 또한 행렬 스택을 이용해 한 번에 모든 오브젝트를 변환하는 방법을 알아본다. 그리고 자바스크립트 타이머와 행렬 스택을 이용한 애니메이션 기법을 알아본다. 각 기법은 예제를 통해 확인할 수 있다.
6장 ‘색상, 깊이 테스팅, 알파블렌딩’에서는 ESSL 셰이더의 색상을 통해 깊이 정보(z-order)를 알아본다. 또한 웹지엘에서 1개 이상의 광원을 정의하고 사용하는 방법을 소개하며, 깊이 테스팅과 알파블렌딩의 개념을 설명하고, 이들이 반투명 오브젝트를 만들 때 어떻게 사용되는지 알려준다. 그리고 여러 예제를 통해 쉽게 이해해본다.
7장 ‘텍스처’에서는 웹지엘에서 어떻게 텍스처를 생성하고, 관리하며, 사용하는지 보여준다. 그리고 텍스처 좌표와 매핑을 설명한다. 7장에서는 여러 가지 텍스처 매핑 기법을 논하며, 이 기법의 실습 예제를 제공한다. 또한 여러 개의 텍스처 사용법을 통해 큐브(정육면체)를 만들어본다.
8장 ‘픽킹’에서는 사용자 선택에 의한 오브젝트 동작인 픽킹을 알아본다. 그리고 사용자가 클릭한 좌표의 계산 방법과 사용자가 선택한 임의의 오브젝트를 렌더링하는 방법을 설명한다. 이 방법은 몇 개의 콜백 후킹을 이용해 특정 로직을 통해 구현되며, 픽킹을 다룬 예제 2개를 살펴본다.
9장 ‘모든 기법 적용해보기’에서는 이 책에서 언급한 모든 것을 함께 적용하는 방법을 설명한다. 9장에서는 1장 ‘웹지엘 시작하기’에서 나온 가상 자동차 쇼룸 데모를 좀 더 확장해볼 것이다. 가상 자동차 쇼룸 데모를 통해, 블렌더 모델을 웹지엘 씬에 적용하는 방법과 블렌더 모델에서의 ESSL 셰이더 사용법을 알아본다.
10장 ‘고급 기법’에서는 후처리 효과, 포인트 스프라이트, 법선 매핑, 광선 추적법 등의 고급 기법을 보여주며 각 기법당 예제가 제공된다. 『WebGL 3D 프로그래밍』을 다 읽고 난 후에는 여러분이 자신만의 고급 기법을 사용할 수 있기를 기원한다.
목차
목차
- 1장 웹지엘 시작하기
- 시스템 요구사항
- 웹지엘이 제공하는 렌더링
- 웹지엘 애플리케이션 구조
- HTML5 캔버스 생성
- 테두리를 위한 CSS 정의
- 캔버스 애트리뷰트
- 브라우저에서 캔버스를 지원하지 않을 경우
- 웹지엘 컨텍스트 액세스
- 상태 머신으로서의 웹지엘
- 웹지엘 API에 접근하기 위한 컨텍스트 사용
- 3D 씬 로드
- 가상 자동차 쇼룸
- 정리
- 2장 기하 렌더링
- 버텍스(정점)와 인덱스
- 웹지엘 렌더링 파이프라인 개요
- 버텍스 버퍼 오브젝트
- 버텍스 셰이더
- 프래그먼트 셰이더
- 프레임버퍼
- 애트리뷰트, 유니폼, 베어링
- 웹지엘에서의 기하 렌더링
- 자바스크립트 배열을 이용한 기하 정보 정의
- 웹지엘 버퍼 생성
- 웹지엘 버퍼 조작 방법
- VBO에 애트리뷰트 연결하기
- VBO 바인딩
- 바인딩한 VBO에 애트리뷰트를 지정
- 애트리뷰트 활성화
- 렌더링
- drawArrays와 drawElements
- 모든 기법 적용해보기
- 렌더링 모드
- 상태 머신 웹지엘: 버퍼 조작
- 고급 기하 정보 로드 테크닉: JSON과 AJAX
- JSON 소개: 자바스크립트 오브젝트 표기법
- JSON 기반의 3D 모델 선언
- JSON 인코딩과 디코딩
- AJAX 비동기 로드
- 웹 서버 설정
- 웹 서버 요구사항
- JSON 소개: 자바스크립트 오브젝트 표기법
- 정리
- 3장 빛!
- 광원, 법선, 재질
- 광원
- 법선
- 재질
- 파이프라인에서 광원, 법선 벡터, 재질 사용하기
- 애트리뷰트와 유니폼의 유사점과 차이점
- 셰이딩 메소드와 광원 반사 모델
- 셰이딩/보간법
- 고라우드 보간법
- 퐁 보간법
- 광원 반사 모델
- 램버시안 반사 모델
- 퐁 반사 모델
- 셰이딩/보간법
- ESSL: 오픈지엘 ES 셰이딩 언어
- 저장 제한자
- 타입
- 벡터 요소
- 연산자와 함수
- 버텍스 애트리뷰트
- 유니폼
- 베어링
- 버텍스 셰이더
- 프래그먼트 셰이더
- ESSL 프로그램 작성
- 램버시안 반사와 고라우드 셰이딩
- 퐁 반사와 고라우드 셰이딩
- 퐁 셰이딩
- 웹지엘로 돌아와서
- 프로그램 생성
- 애트리뷰트와 유니폼 초기화
- 웹지엘과 ESSL 연결하기
- 빛의 또 다른 설명: 위치성 광원
- 닛산 GTS 예제
- 정리
- 광원, 법선, 재질
- 4장 카메라
- 웹지엘에는 카메라가 없다
- 버텍스 변환
- 동차 좌표
- 모델 변환
- 뷰 변환
- 투영 변환
- 원근 분할
- 뷰포트 변환
- 법선 벡터 변환
- 정규 행렬 계산
- 웹지엘 수행
- 자바스크립트 행렬
- 자바스크립트 행렬을 ESSL 유니폼에 매핑
- ESSL에서 행렬 다루기
- 모델뷰 행렬
- 세계 공간 인코딩
- 회전 행렬
- 변환 벡터
- 이상한 네 번째 행
- 세계 공간 인코딩
- 카메라 행렬
- 카메라 변환
- 카메라 회전
- 카메라 행렬은 모델뷰 역행렬이다
- 웹지엘에서의 행렬 곱셈
- 기본 카메라 타입
- 궤도 카메라
- 트래킹 카메라
- 카메라 위치에 따른 회전
- 시선에서의 카메라 이동
- 카메라 모델
- 원근 행렬
- 시야
- 원근 투영 혹은 정사 투영
- 웹지엘 예제의 구조
- WebGLApp
- 지원하는 오브젝트
- 라이프 사이클 함수
- configure
- load
- draw
- 행렬 조작 함수
- initTransforms
- updateTransforms
- setMatrixUniforms
- 정리
- 5장 액션
- 행렬 스택
- 3D 씬 애니메이션 만들기
- requestAnimFrame 함수
- 자바스크립트 타이머
- 타이밍 전략
- 애니메이션 전략
- 시뮬레이션 전략
- 애니메이션 전략과 시뮬레이션 전략 합치기
- 웹 워커: 자바스크립트 멀티스레딩
- 갱신 구조
- WebGLApp 분석
- 행렬 스택 지원 추가
- 렌더링 비율 설정
- 애니메이션 타이머 생성
- 행렬 스택과 자바스크립트 타이머의 연결
- 매개 곡선
- 초기 단계
- 애니메이션 타이머 설정
- 애니메이션 동작
- 현재 위치에 있는 볼 그리기
- 최적화 전략
- 성능 최적화
- 버텍스 셰이더에서의 이동 수행
- 보간법
- 선형 보간법
- 다항식 보간법
- B-스플라인
- 정리
- 6장 색상, 깊이 테스팅, 알파블렌딩
- 웹지엘에서의 색상 사용법
- 오브젝트의 색상 사용
- 상수 컬러링
- 버텍스 컬러링
- 프래그먼트 컬러링(per-fragment coloring)
- 조명이 있을 때의 색 사용
- 여리 개의 조명과 확장 문제
- 유니폼은 얼마나 많이 사용할 수 있을까?
- 문제 단순화
- 여리 개의 조명과 확장 문제
- 구조 갱신
- 조명 오브젝트 지원 추가
- 유니폼을 ESSL 프로그램에 전달하는 방법 개선
- 여러 개의 조명 모델에서 유니폼 배열 사용하기
- 유니폼 배열 선언
- 자바스크립트 배열 매핑
- 조명 오브젝트 지원 추가
- 색상 사용
- 투명성
- 갱신한 렌더링 파이프라인
- 깊이 테스팅
- 깊이 함수
- 알파블렌딩
- 블렌딩 함수
- 블렌딩 함수 분리하기
- 블렌딩 연산식
- 블렌드 색상
- 웹지엘 알파블렌딩 API
- 알파블렌딩 모드
- 더하기 블렌딩
- 빼기 블렌딩
- 곱하기 블렌딩
- 보간 블렌딩
- 투명 오브젝트 생성하기
- 정리
- 7장 텍스처
- 텍스처 매핑이란?
- 텍스처 생성과 업로딩
- 텍스처 좌표 사용
- 셰이더에서 텍스처 사용하기
- 텍스처 필터 모드
- 가장 가까운 모드(NEAREST)
- 선형 모드(LINEAR)
- 밉매핑
- NEARESTMIPMAPNEAREST
- LINEARMIPMAPNEAREST
- NEARESTMIPMAPLINEAR
- LINEARMIPMAPLINEAR
- 밉맵 생성
- 텍스처 래핑
- CLAMPTOEDGE
- REPEAT
- MIRRORED_REPEAT
- 여러 개의 텍스처 사용하기
- 큐브 맵
- 정리
- 픽킹
- 오프스크린 프레임버퍼
- 색상을 저장하기 위한 텍스처 생성
- 깊이 정보를 저장할 렌더버퍼 생성
- 오프스크린 렌더링을 위한 프레임버퍼 생성
- 오브젝트당 1개의 색 할당
- 오프스크린 프레임버퍼 렌더링
- 캔버스에서의 클릭
- 오프스크린 프레임버퍼에서 픽셀 읽기
- 히트 살펴보기
- 히트 처리
- 구조 갱신
- Picker 구조
- 유일한 오브젝트 라벨 동작
- 정리
- 웹지엘 애플리케이션 생성
- 구조를 알아보자
- 가상 자동차 쇼룸 애플리케이션
- 모델의 복잡함
- 셰이더 품질
- 네트워크 지연과 대역폭 소비
- GUI 형태 정의
- 웹지엘 지원 추가
- 셰이더 동작
- 씬 설정
- 웹지엘 속성 설정
- 카메라 설정
- 카메라 동작 생성
- SceneTransforms 오브젝트
- 조명 생성
- 프로그램 애트리뷰트와 유니폼 매핑
- 유니폼 초기화
- 자동차 로드
- 블렌더 모델 내보내기
- OBJ 포맷
- OBJ 파일 파싱
- 웹지엘 씬으로 자동차 로드
- 렌더링
- 정리
- 후처리
- 프레임버퍼 만들기
- 기하 정보 만들기
- 셰이더 설정
- 구조 갱신
- 포인트 스프라이트
- 법선 매핑
- 프래그먼트 셰이더에서의 광선 추적법
도서 오류 신고
정오표
정오표
2012.11.30 수정사항
[ p51 13행 ]
프래그먼트gragment → 프래그먼트fragment
[ p85 노트 박스 아래로 1-2행 ]
벡터 v1은 p2 - p1으로 정의할 수 있으며, 벡터 v2는 p0 - p1으로 정의할 수 있다.
→ 벡터 v1은 p1 - p0로 정의할 수 있으며, 벡터 v2는 p2 - p0로 정의할 수 있다.
[ p86 1행 ]
버텍스 p1을 → 버텍스 p0를
2015.1.6 수정사항
[p35 : 아래에서 9행]
클라이어트 기반
-> 클라이언트 기반
2015.3.27 수정사항
[p45 : 밑에서 8행]
색상을 지정하기 위해
->
색상을 얻기 위해