Bài giảng Đồ họa máy tính - Chương 8: Tô màu vật thể 3 chiều

Giới thiệu

Mô hình tô màu

Sử dụng nguồn sáng

Tô màu phẳng, tô màu trơn

Dán texture lên mặt đa giác

 

ppt31 trang | Chuyên mục: Đồ Họa Máy Tính | Chia sẻ: tuando | Lượt xem: 389 | Lượt tải: 0download
Tóm tắt nội dung Bài giảng Đồ họa máy tính - Chương 8: Tô màu vật thể 3 chiều, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ĐỒ HỌA MÁY TÍNH 
Trường Đại Học Bách Khoa TP Hồ Chí Minh 
Khoa Khoa học & Kỹ thuật Máy tính 
CHƯƠNG 8: 
TÔ MÀU 
VẬT THỂ 3 CHIỀU 
NỘI DUNG TRÌNH BÀY 
Giới thiệu 
Mô hình tô màu 
Sử dụng nguồn sáng 
Tô màu phẳng, tô màu trơn 
Dán texture lên mặt đa giác 
GIỚI THIỆU 
Tập trung vào tính toán màu sắc cho pixel 
Dựa vào mô hình màu ( mô hình hóa việc ánh sáng tương tác với đối tượng ) 
Không mô phỏng hết các nguyên lý vật lý của sự phát tán và phản xạ ánh sáng 
Đưa ra mô hình mang tính xấp xỉ và tạo nên nhiều mức độ chân thực khác nhau 
GIỚI THIỆU 
Mô hình khung dây ( wireframe ) 
đơn giản , chỉ có các cạnh được vẽ 
nhìn xuyên qua vật thể , khó phân biệt được vật thể 
GIỚI THIỆU 
Line Drawing: mô hình khung dây với các mặt khuất được loại bỏ . 
chỉ có các cạnh được vẽ 
nhìn giống khối rắn , phân biệt được vật thể 
GIỚI THIỆU 
Tô màu phẳng (flat shading): 
ánh sáng phản xạ được tính tại một điểm bất kỳ 
các điểm thuộc mặt được tô bởi một màu 
thấy rõ ranh giới giữa các mặt 
GIỚI THIỆU 
Tô màu mượt (smooth shading): 
màu được tính ở một số điểm , sau đó nội suy cho các điểm còn lại . 
ranh giới giữa các mặt biến mất 
a/s phản chiếu 
GIỚI THIỆU 
Tạo bóng đổ , dán texture lên bề mặt đối tượng 
MÔ HÌNH TÔ MÀU 
Nguồn sáng không màu có nhiều mức xám 
Nguồn sáng điểm và nguồn sáng nền 
Ánh sáng tới tương tác với bề mặt theo 3 cách : (a) hấp thụ chuyển thành nhiệt , (b) phản xạ , (c) truyền vào trong 
Thành phần ánh sáng phản xạ 
A/s khuyếch tán : phát tán theo mọi hướng , tương tác mạnh với bề mặt , màu sắc phụ thuộc vào màu sắc vật thể 
A/s phản chiếu : tính định hướng cao , không đi vào vật thể , phản xạ ở bề mặt vật thể , tăng độ sáng bề mặt đối tượng , màu giống màu a/s tới 
MÔ HÌNH TÔ MÀU 
Yếu tố hình học để xác định ánh sáng phản xạ 
vector pháp tuyến m của bề mặt 
vector v từ P đến mắt nhìn 
vector s từ P đến nguồn sáng 
MÔ HÌNH TÔ MÀU 
Thành phần ánh sáng khuyếch tán 
phần ánh xạ phản xạ đến được mắt nhìn , ký hiệu I d 
khuyếch tán đồng nhất theo mọi hướng  chỉ phụ thuộc m, s. 
định luật Lambert: 
I s : cường độ n/s , ρ d : h/s p/x khuyếch tán 
MÔ HÌNH TÔ MÀU 
Thành phần ánh sáng khuyếch tán 
Ví dụ : hệ số p/x khuyếch tán 0, 0.2, 0.4, 0.6, 0.8, 1.0. Cường độ nguồn sáng là 1, cường độ a/s nền 0.4 
MÔ HÌNH TÔ MÀU 
Thành phần ánh sáng phản chiếu 
tăng độ sáng , tăng mức độ chân thực cho đối tượng có đặc tính sáng bóng . 
lượng ánh sáng phản xạ lớn ở hướng p/x r. 
f : [1, 200] 
MÔ HÌNH TÔ MÀU 
Thành phần ánh sáng phản chiếu 
f  vô cùng : tập trung chủ yếu ở hướng p/x 
Giảm tg tính toán , dùng vector nửa đường h = s + v.  = 0, nhìn thấy lượng a/s phản chiếu nhiều nhất 
MÔ HÌNH TÔ MÀU 
Thành phần ánh sáng phản chiếu 
hệ số  s từ trên xuống là 0.25, 0.5, 0.75. Hệ số f từ trái sang phải là 3, 6, 9, 25, 200. 
MÔ HÌNH TÔ MÀU 
Ánh sáng nền : 
khắc phục hiện tượng phần không nhận được a/s có màu đen hoàn toàn , thêm a/s nền . 
không có vị trí cố định , chiếu sáng đồng nhất theo mọi hướng 
Thêm I a : cường độ ,  a : hệ số phản chiếu nền 
 a : 0.0, 0.1, 0.3, 0.5, 0.7: càng lớn khung cảnh càng sáng 
MÔ HÌNH TÔ MÀU 
Tổng hợp các thành phần ánh sáng 
Thêm màu sắc 
MÔ HÌNH TÔ MÀU 
Chỉ định camera, nguồn sáng , vector pháp tuyến đỉnh 
Sau khi thực hiện phép biến đổi mô hình – phép nhìn , tất cả được biểu diễn trong hệ tọa độ camera 
glBegin(GL_POLYGON ); 
for(int i = 0; i< 3; i++){ 
	glNormal3f(norm[i].x, norm[i].y , norm[i].z ); 
	glVertex3f(pt[i].x, pt[i].y , pt[i].z );} 
glEnd (); 
SỬ DỤNG NGUỒN SÁNG 
Tạo nguồn sáng 
- vị trí 
 GLfloat 	 myLightPosition [] = {3.0, 6.0, 5.0, 1.0}; 
	glLightfv(GL_LIGHT0, GL_POSITION, myLightPosition ); 
	 glEnable(GL_LIGHTING ); //enable 
	glEnable(GL_LIGHT0);//enable this particular source 
 ( x , y , z , 1)  nguồn sáng điểm , ( x , y , z , 0)n/s định hướng 
	- màu sắc 
	 GLfloat 	amb0[] = {0.2, 0.4, 0.6, 1.0}; 
	 GLfloat 	diff0[] = {0.8, 0.9, 0.5, 1.0}; 
	 GLfloat 	spec0[] = {1.0, 0.8, 1.0, 1.0}; 
	glLightfv(GL_LIGHT0, GL_AMBIENT, amb0); 
	glLightfv(GL_LIGHT0, GL_DIFFUSE, diff0); 
	glLightfv(GL_LIGHT0, GL_SPECULAR, spec0); 
SỬ DỤNG NGUỒN SÁNG 
Nguồn sáng dạng đèn pha 
 glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0); // góc cắt bằng 450 
 glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 4.0); //  = 4.0 
 GLfloat dir[] = {2.0, 1.0, -4.0}; // hướng của nguồn sáng 
 glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir); 
Suy giảm ánh sáng theo khoảng cách glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0); GL_LINEAR_ATTENUATION và GL_QUADRATIC_ATTENUATION 
SỬ DỤNG NGUỒN SÁNG 
Chỉ định thuộc tính vật liệu 
	 GLfloat 	 myDiffuse [] = {0.8, 0.2, 0.0, 1.0}; 
	 glMaterialfv(GL_FRONT, GL_DIFFUSE, myDiffuse); 
GL_BACK, GL_FRONT_AND_BACK 
GL_AMBIENT, GL_SPECULAR,GL_EMISSION 
TÔ MÀU PHẲNG, TÔ MÀU TRƠN 
Tô màu mặt đa giác 
di chuyển theo các đường quét , xác định màu cho mỗi pixel. 
đa giác lồi hiệu quả vì mỗi đường quét chỉ cắt đa giác tối đa ở 2 điểm 
for ( int y = ybott ; y <= ytop ; y++) { 
	 find xleft and xright ; 
	for ( int x = xleft ; x <= xright ; x++) { 
	 find the color c for this pixel; 
	 put c into the pixel at (x, y) ; } } 
TÔ MÀU PHẲNG, TÔ MÀU TRƠN 
Tô màu phẳng : 
nguồn sáng ở xa , mặt là đa giác phẳng  các điểm thuộc mặt có cùng màu sắc 
glShadeModel(GL_FLAT ); 
for ( int y = ybott ; y <= ytop ; y++) { 
	 find xleft and xright ; 
	find the color c for this scan line; 
	for ( int x = xleft ; x <= xright ; x++) {	 
	 put c into the pixel at (x, y) ; } } 
TÔ MÀU PHẲNG, TÔ MÀU TRƠN 
Tô màu Gouraud : 
color left = lerp( color 1 , color 4 , f ), 
for ( int y = ybott ; y <= ytop ; y++){ 
	 find xleft and xright ; 
	 find colorleft and colorright ; 
	 colorinc = ( colorright – colorleft )/ ( xright – xleft ) 
	for ( int x = xleft , c = colorleft ; x <= xright ; x++, c += colorinc ) { 
	 put c into the pixel at (x, y); } } 
TÔ MÀU PHẲNG, TÔ MÀU TRƠN 
Tô màu Gouraud : 
glShadeModel(GL_SMOOTH ); 
TÔ MÀU PHẲNG, TÔ MÀU TRƠN 
Tô màu Phong : 
chậm hơn nhiều so với phương pháp tô màu Gouraud 
OpenGL không hỗ trợ phương pháp tô màu này 
DÁN TEXTURE LÊN MẶT ĐA GIÁC 
DÁN TEXTURE LÊN MẶT ĐA GIÁC 
Có hai loại texture: texture bitmap và texture được tạo bằng giải thuật 
Color3 texture(float s, float t){ 
	return txtr[(int)(s * C)][(int)(t *R)];} 
float fakeSphere(float s, float t){ 
	float	r = sqrt((s - 0.5)*(s - 0.5) + (t - 0.5)*(t - 0.5)); 
	if (r < 0.3) return 1- r/0.3; 
	else return 0.2; } 
DÁN TEXTURE LÊN MẶT ĐA GIÁC 
Các bước để dán texture lên bề mặt 
đọc hoặc tạo dữ liệu texture vào mảng textureData 
tạo đối tượng texture: 
glGenTextures(1, & textureObject ); 
gán kiểu texture 
glBindTexture(GL_TEXTURE_2D, textureObject ); 
gán số liệu cho đối tượng texture 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, wid , height, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData ); 
DÁN TEXTURE LÊN MẶT ĐA GIÁC 
Các bước để dán texture lên bề mặt 
lựa chọn texture: 
glBindTexture(GL_TEXTURE_2D, textureObject ); 
gán tọa độ texture cho các đỉnh của đa giác 
glBegin(GL_QUADS ); 
	glTexCoord2f(0.0, 0.0); glVertex3f(1.0, 2.5, 1.5); 
	glTexCoord2f(0.0, 0.6); glVertex3f(1.0, 3.7, 1.5); 
	glTexCoord2f(0.8, 0.6); glVertex3f(2.0, 3.7, 1.5); 
	glTexCoord2f(0.8, 0.0); glVertex3f(2.0, 2.5, 1.5); 
glEnd (); 
DÁN TEXTURE LÊN MẶT ĐA GIÁC 
Ứng dụng của texture 
Tạo đối tượng phát sáng 
Điều chỉnh hệ số phản xạ 
Mô phỏng sự gồ ghề bằng phép ánh xạ Bump 

File đính kèm:

  • pptbai_giang_do_hoa_may_tinh_chuong_8_to_mau_vat_the_3_chieu.ppt