제4장 컬 러(COLOR) 컬러 표현 Direct3D는 RGB 세 성분을 이용해 컬러 표현

Slides:



Advertisements
Similar presentations
7 장 프렌드와 연산자 중복 1 명품 C++. 친구란 ? 2 우리 집 냉장고 내 침대 우리 집 TV 우리 집 식탁 친구 친구 ? 내 가족의 일원은 아니지만 내 가족과 동일한 권한을 가진 일원으로 인정받은 사람.
Advertisements

1 차시 : SW 코딩으로 배우는 3D 기초작품 및 톱니바퀴 만들기 1)SPL3D 프린팅 툴 설치하기 2) 도형 추가하기 3) 도형 연산 명령어 익히기 4)3D 프린터 출력을 위한 STL 파일 내보내기 5) 하트모양 만들기 6) 하트모양 열쇠고리 만들기 7) 변수와 수식.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
2장 렌더링 파이프라인 목표 Direct3D에서 3D 물체를 표현하는 방법을 배운다. 가상카메라를 모델링하는 방법을 배운다.
Ch7. 블렌딩 “현재 래스터라이즈 과정에 있는 픽셀과 같은 위치에 있는 이전의 픽셀을 서로 섞는(조합)하는 테크닉!”
CHAP 19. 구글맵.
컬러 LED바 이해하기 목차 재료준비 및 브레드 보드 배선 구성하기 컬러 LED바 이해 및 프로그램 실습 응용 작품 만들기.
제12장 유연한 카메라 클래스 만들기 학기 컴퓨터게임(DirectX).
제13장 기본적인 지형 렌더링 학기 컴퓨터게임(DirectX).
제 9 장 구조체와 공용체.
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
8. 객체와 클래스 (기본).
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
9장 글꼴.
제 15 장 픽킹.
9장 글꼴.
Lesson 6. 형변환.
제6장 텍스처링 학기 컴퓨터게임(DirectX).
제8장 스텐실.
제 14 장 파티클 시스템.
12장 유연한 카메라 클래스 만들기 한성대학교 멀티미디어공학과 게임 프로그래밍-I 강의노트
제 18 장 픽셀 셰이더의 소개.
명품 C++ 7장 프렌드와 연산자 중복.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
시간대별 점등제어 계획 철새 비도래시기 춘계[3~5월] / 하계[6~8월] / 추계[9~10월]
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
23장. 구조체와 사용자 정의 자료형 2.
제5장 조명 학기 컴퓨터게임(DIrectX).
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
제 16 장 고수준 셰이딩 언어 소개.
C#.
13. 연산자 오버로딩.
JA A V W. 03.
어서와 C언어는 처음이지 제14장.
Lesson 4. 수식과 연산자.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Terrain.
10장 메쉬 파트 I.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
3D 프린팅 프로그래밍 01 – 기본 명령어 강사: 김영준 목원대학교 겸임교수.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
11장 메쉬 파트II 학기 컴퓨터게임(DirectX).
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
빛 의 합 성 과 학 1 학년 Ⅱ. 빛 > 2. 빛의 색( 8/8 ) [초기 화면]
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
DirectX 9 Ch5. 조명.
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
혼색 color mixture.
3. 모듈 (5장. 모듈).
Chapter 11 구조체.
[색채지각 ] Color Perception.
제 4 장 Record.
어서와 C언어는 처음이지 제21장.
Presentation transcript:

제4장 컬 러(COLOR) 컬러 표현 Direct3D는 RGB 세 성분을 이용해 컬러 표현 컬러를 지정하는 첫 번째 방법 32 비트 DWORD 형으로 정의된 D3DCOLOR 형 네 개의 8비트 섹션으로 나누어짐 각각의 섹션은 컬러 성분의 진하기를 저장 32-비트 알 파 적 색 녹 색 청 색 2009-1학기 컴퓨터게임(DirectX)

D3DCOLOR 형 저장하기 위해서는 비트연산 필요 D3DCOLOR_ARGB 라는 매크로 사용 각각의 컬러 성분이 하나의 바이트를 이용 컬러의 범위는 0~255사이가 됨 0에 가까운 값은 낮은 진하기를 나타냄 255에 가까운 값은 높은 진하기를 나타냄 D3DCOLOR 형 저장하기 위해서는 비트연산 필요 D3DCOLOR_ARGB 라는 매크로 사용 D3DCOLOR brightRed = D3DCOLOR_ARGB(255,255,0,0); D3DCOLOR someColor = D3DCOLOR_ARGB(255,144,87,210); 2009-1학기 컴퓨터게임(DirectX)

선택적으로 이용할 수 있는 D3DCOLOR_XRGB 매크로는 알파 인자를 받지 않음. 알파를 0xff(255)로 지정한다. #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) 컬러를 지정하는 두 번째 방법 D3DCOLORVALUE 구조체 이용하는 것 각각의 컬러 성분에 부동 소수점 값을 이용 범위는 0 ~ 1사이이며 0이 가장 낮은 진하기, 1이 가장 높은 진하기 이다. 2009-1학기 컴퓨터게임(DirectX)

typedef struct _D3DCOLORVALUE{ float r; float g; float b; 이외에도 D3XCOLOR 구조체가 있는데, D3DCOLORVALUE 와 동일한 데이터 멤버를 포함하지만 컬러의 관리를 위한 몇 가지 생성자 및 오버로드된 연산자를 포함. 2009-1학기 컴퓨터게임(DirectX)

D3DXCOLOR 구조체 typedef struct D3DXCOLOR { #ifdef __cplusplus public: D3DXCOLOR(DWORD argb); D3DXCOLOR(CONST FLOAT *); D3DXCOLOR(CONST D3DFLOAT16 *); D3DXCOLOR(CONST D3DCOLORVALUE&); D3DXCOLOR(FLOAT r, FLOAT g, FLOAT b, FLOAT a); // 형 변환 operator DWORD () const; operator FLOAT* (); operator CONST FLOAT* () const; 2009-1학기 컴퓨터게임(DirectX)

operator D3DCOLORVALUE* (); operator CONST D3DCOLORVALUE* () const; // 할당 연산자 D3DXCOLOR& operator += (CONST D3DXCOLOR&); D3DXCOLOR& operator -= (CONST D3DXCOLOR&); D3DXCOLOR& operator *= (FLAOT); D3DXCOLOR& operator /= (FLAOT); 2009-1학기 컴퓨터게임(DirectX)

D3DXCOLOR operator + () const; D3DXCOLOR operator – () const; // 단항 연산자 D3DXCOLOR operator + () const; D3DXCOLOR operator – () const; // 이항 연산자 D3DXCOLOR operator + (CONST D3DXCOLOR&) const; D3DXCOLOR operator - (CONST D3DXCOLOR&) const; D3DXCOLOR operator * (FLAOT) const; D3DXCOLOR operator / (FLOAT) const; friend D3DXCOLOR operator* (FLOAT, CONST D3DXCOLOR&); BOOL operator == (CONST D3DXCOLOR&) const; BOOL operator != (CONST D3DXCOLOR&) const; 2009-1학기 컴퓨터게임(DirectX)

} D3DXCOLOR, *LPD3DXCOLOR; #endif // __cplusplus FLOAT r, g, b, a; } D3DXCOLOR, *LPD3DXCOLOR; D3DCOLORVALUE 와 D3DXCOLOR 구조체는 모두 네 개의 부동 소수점 성분을 가진다. 다른 벡터와 같이 더하고, 빼고 크기 변형 가능 내적, 외적 의미가 없으며, 성분 단위의 곱만 의미 D3DXCOLOR 클래스의 곱은 성분 단위의 곱 (c1, c2, c3, c4)  (k1, k2, k3 , k4) = (c1*k1, c2*k2, c3*k3, c4*k4); 2009-1학기 컴퓨터게임(DirectX)

const D3DXCOLOR WHITE( D3DCOLOR_XRGB(255, 255, 255) ); d3dutility.h 파일 갱신 namespace d3d{ … const D3DXCOLOR WHITE( D3DCOLOR_XRGB(255, 255, 255) ); const D3DXCOLOR BLACK( D3DCOLOR_XRGB( 0, 0, 0) ); const D3DXCOLOR RED( D3DCOLOR_XRGB(255, 0, 0) ); const D3DXCOLOR GREEN( D3DCOLOR_XRGB( 0, 255, 0) ); const D3DXCOLOR BLUE( D3DCOLOR_XRGB( 0, 0, 255) ); const D3DXCOLOR YELLOW( D3DCOLOR_XRGB(255, 255, 0) ); const D3DXCOLOR CYAN( D3DCOLOR_XRGB( 0, 255, 255) ); const D3DXCOLOR MAGENTA( D3DCOLOR_XRGB(255, 0, 255) ); } 2009-1학기 컴퓨터게임(DirectX)

버텍스 컬러 기본형의 컬러는 이를 구성하는 버텍스의 컬러에 따라 결정된다. 버텍스 데이터 구조체에 컬러 멤버를 추가해야 함 버텍스 컬러를 지정하는데 32비트 필요 D3DCOLORVALUE 형을 사용할 수 없다. struct ColorVertex { float _x, _y, _z; D3DCOLOR _color; static const DWORD FVF; } Const DWORD ColorVertex::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE; 2009-1학기 컴퓨터게임(DirectX)

셰 이 딩 셰이딩은 레스터라이즈 과정 중에 이루어짐 기본형을 구성하는 픽셀 컬러를 계산하는 데 버텍스 컬러가 이용되는 방식 결정 플랫 셰이딩(Flat shading) 그라우드 셰이딩(Gouraud shading) 플랫 셰이딩 상에서는 기본형의 첫 번째 버텍스에 지정된 컬러를 이용해 기본형의 픽셀 채운다. 2009-1학기 컴퓨터게임(DirectX)

예를 들어 세 개의 버텍스로 이루어진 삼각형이 있다면 첫 번째 버텍스 컬러는 빨간색이다. 예를 들어 세 개의 버텍스로 이루어진 삼각형이 있다면 첫 번째 버텍스 컬러는 빨간색이다. 플랫 셰이딩 상에서는 두 번째와 세 번째 버텍스는 무시되어 삼각형의 컬러는 빨간색이 됨 ColorVertex t[3]; T[0]._color = D3DCOLOR_XRGB(255, 0, 0); T[1]._color = D3DCOLOR_XRGB(0, 255, 0); T[2]._color = D3DCOLOR_XRGB(0, 0, 255); 2009-1학기 컴퓨터게임(DirectX)

기본형 면을 따라 보간된 컬러가 버텍스에 입혀짐 셰이딩 모드 지정 // 플랫 셰이딩 모드 지정 그라우드 셰이딩은 부드러운 셰이딩 방식 기본형 면을 따라 보간된 컬러가 버텍스에 입혀짐 셰이딩 모드 지정 // 플랫 셰이딩 모드 지정 Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT); // 그라우드 셰이딩 모드 지정 Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); 2009-1학기 컴퓨터게임(DirectX)

예제 애플리케이션 컬러를 입힌 삼각형(플랫 셰이딩과 그라우드 쉐이딩) 2009-1학기 컴퓨터게임(DirectX)

IDirect3DDevice9* Device = 0; const int Width = 640; #include "d3dUtility.h" IDirect3DDevice9* Device = 0; const int Width = 640; const int Height = 480; D3DXMATRIX WorldMatrix; IDirect3DVertexBuffer9* Triangle = 0; struct ColorVertex{ ColorVertex(){} ColorVertex(float x, float y, float z, D3DCOLOR c){ _x = x; _y = y; _z = z; _color = c; } 2009-1학기 컴퓨터게임(DirectX)

static const DWORD FVF; }; float _x, _y, _z; D3DCOLOR _color; static const DWORD FVF; }; const DWORD ColorVertex::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE; bool Setup() { // 버텍스 버퍼를 만든다. Device->CreateVertexBuffer( 3 * sizeof(ColorVertex), D3DUSAGE_WRITEONLY, ColorVertex::FVF, D3DPOOL_MANAGED, &Triangle, 0); // 삼각형 데이터로 버퍼를 채운다. ColorVertex* v; Triangle->Lock(0, 0, (void**)&v, 0); // 삼각형 버텍스 데이터를 보관할 버텍스 버퍼 2009-1학기 컴퓨터게임(DirectX)

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0, 0)); Triangle->Unlock(); // 투영 매트릭스를 지정한다. D3DXMATRIX proj; D3DXMatrixPerspectiveFovLH(&proj, D3DX_PI * 0.5f, (float)Width / (float)Height, 1.0f, 1000.0f); Device->SetTransform(D3DTS_PROJECTION, &proj); // 렌더 상태를 지정한다. Device->SetRenderState(D3DRS_LIGHTING, false); return true; } 2009-1학기 컴퓨터게임(DirectX)

d3d::Release<IDirect3DVertexBuffer9*>(Triangle); } void Cleanup() { d3d::Release<IDirect3DVertexBuffer9*>(Triangle); } bool Display(float timeDelta) if( Device ) Device->Clear(0, 0, D3DCLEAR_TARGET |D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0); Device->BeginScene(); Device->SetFVF(ColorVertex::FVF); Device->SetStreamSource(0, Triangle, 0, sizeof(ColorVertex)); 2009-1학기 컴퓨터게임(DirectX)

// 플랫 셰이딩으로 화면 왼쪽에 삼각형을 그린다. D3DXMatrixTranslation(&WorldMatrix, -1.25f, 0.0f, 0.0f); Device->SetTransform(D3DTS_WORLD, &WorldMatrix); Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT); Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); D3DXMatrixTranslation(&WorldMatrix, 1.25f, 0.0f, 0.0f); // 그라우드 셰이딩으로 화면 오른쪽에 삼각형을 그린다. Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); Device->EndScene(); Device->Present(0, 0, 0, 0); } return true; 2009-1학기 컴퓨터게임(DirectX)

2009-1학기 컴퓨터게임(DirectX)