1. Trang chủ
  2. » Công Nghệ Thông Tin

Kỹ thuật đồ họa máy tính

8 1,6K 18
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Kỹ thuật đồ hoạ máy tính
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Kỹ thuật đồ họa máy tính
Thể loại Bài luận
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 8
Dung lượng 255,54 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kỹ thuật đồ họa máy tính

Trang 1

Phụ lục

Chế độ Graphics

1 Chế độ Graphic

ở chế độ Text (văn bản) mà hình được chia làm 80 cột và 25 hàng và toạ độ của nó

là (1,1)-(80,25) có nghĩa là gồm có 25 hàng mỗi hàng chứa được 80 ký tự

Để có thể vẽ đồ thị, tô màu hình ảnh trên máy vi tính ta phải chuyển sang chế độ Graphic Trong chế độ này màn hình được cấu tạo như là ma trận điểm hay lưới vuông các điểm, tương ứng với một vùng nhớ trên màn hình Mỗi điểm sáng trên màn hình được gọi là một Pixel

- Trong chế độ đơn sắc mỗi Pixel tương ứng với một Bit

- Trong chế độ 4 màu mỗi Pixel tương ứng với một 2 bit

- Trong chế độ 16 màu mỗi Pixel tương ứng với 4 Bit

- Trong chế độ 256 màu mỗi Pixel tương ứng với 8 Bit

Có nhiều kiểu màn hình khác nhau, sau đây là các kiểu tiêu biểu thường gặp nhất :

a CGA (Color Graphic Adapter) : có 2 chế độ

- Chế độ phân giải cao : 640 X 200 đen trắng

- Chế độ phân giải trung bình : 320 X 200 4 màu

b Hercule (MGDA : Monochrome Graphic Display Adapter) :

là mạch điều khiển màn hình đơn sắc với độ phân giải cao 720 X 348

c EGA (Enhanced) :

độ phân giải 640 X 350 16 màu hoặc 320 X 200 256 màu

d VGA (Video Graphic Array) :

640 X 480 16 màu hoặc 256 màu

e SVGA (Super Video Graphic Array) :

1024 X 768 256 màu

2 Các file cần thiết cho việc vẽ đồ hoạ :

Graph.TPU

*.BGI (Borland Graphic Interface) là các file chứa các điều khiển tương

ứng với các màn hình khác nhau : CGA.BGI, EGAVGA.BGI, HERC.BGI

*.CHR là các file Font chữ trong chế độ đồ hoạ :

Goth.CHR (chữ Gothic), Litt.CHR (Small Font), Sans.CHR (Sans Serif), Trip

CHR (cao gấp 3)

Và ở đầu chương trình phải khai báo sử dụng Unit Graph.TPU :

Uses Graph;

3 Thủ tục khởi tạo đồ hoạ :

Thủ tục khởi tạo chế độ đồ hoạ có dạng sau :

Trang 2

InitGraph(Var GraphDriver, GraphMode : Integer; Path : String);

Trong đó Path là tham số báo cho PASCAL biết thư mục chứa các file điều khiển

đồ hoạ của Turbo Pascal (các tệp đã nói ở trên)

GraphicDriver là tham biến nguyên, chứa giá trị xác định kiểu màn hình :

0 Detect

1 CGA

2 MCGA

3 EGA

4 EGA64

5 EGAMono

6 IBM8514

7 HercMono

8 ATT400

9 VGA

10 PC3270

Mỗi một kiểu màn hình lại có nhiều chế độ đồ hoạ (GraphicMode) tương ứng với độ phân giải và và bảng màu khác nhau GraphicMode là tham biến nguyên, chứa giá trị xác định Mode đồ hoạ bảng sau cho biết các giá trị GraphDriver, GraphMode

Graphic Driver Graphic Mode Độ phân giải Số màu

Trong lời gọi thủ tục InitGraph(GD, GM, Path), nếu trước đó ta gán

GD: = Detect (=0) thì thủ tục InitGraph phải tự xác định lấy kiểu màn hình cũng như Mode đồ hoạ sao cho tốt nhất mà máy có thể có được

Trong trường hợp màn hình có thể chạy nhiều Mode khác nhau, ta có thể tự chọn lấy GraphDriver và GraphMode bằng cách gán giá trị thích hợp cho GD và GM trước khi gọi thủ tục InitGraph :

GD:=EGA; GM:=EGAHi;

InitGraph(GD,GM,'C:\TP\BGI');

Trang 3

hoặc cũng có thể viết dưới dạng số :

GD:=3; GM:=1;

InitGraph(GD,GM,'C:\TP\BGI');

Hai hàm GetDriverName; và GetModeName(GM) cho ta tên của Driver và Mode màn hình ứng với hai số GD, GM

Ví dụ 1:

Uses Crt,Graph;

Var

GD,GM : Integer;

Begin

GD:=3; GM:=1;

InitGraph(GD,GM,' ');

DirectVideo:=False;

Writeln(GetDriverName);

Writeln(GetModeName(GM));

Readln;

CloseGraph;

End

Khi khởi tạo chế độ đồ hoạ xuất hiện hàm GraphResult có các giá trị sau

Tên hằng Giá trị số Kiểu lỗi

grNotDetected -2 Không có phần cứng đồ hoạ

grFileNotFound -3 Thiếu tệp EGAVGA.BGI, Graph.TPU

Ví dụ 2 :

Uses Crt, Graph;

Var

gd, gm : Integer;

Begin

gd:=0;

InitGraph(gd,gm,' ');

If GraphResult<> 0 Then Halt;

Circle(320,240,200);

Readln;

End

4 Các lệnh đồ hoạ :

SetColor(m); đặt màu cho đường vẽ với m nguyên : từ 0 đến 15 (Black, Blue ) SetBkColor(m); đặt màu nền cho màn hình

MoveTo(x,y); di chuyển con trỏ đến điểm có toạ độ (x,y)

LineTo(x,y); vẽ đoạn thẳng từ vị trí con trỏ đến điểm có toạ độ (x,y)

LineRel(dx,dy); vẽ đoạn thẳng là đường chéo chính của hình chữ nhật góc trên bên trái là từ vị trí con trỏ và 2 cạnh là dx, dy

Line(x1,y1,x2,y2); vẽ đoạn thẳng từ điểm (x1,y1) đến điểm có toạ độ (x2,y2)

Trang 4

GetX; cho hoành độ của con trỏ

GetY; cho tung độ của con trỏ

GetMaxX; cho hoành độ lớn nhất của màn hình (639)

GetMaxY; cho tung độ lớn nhất của màn hình (479)

PutPixel(x,y,m); vẽ điểm có toạ độ là (x,y) màu là m

m:=GetPixel(x,y); cho màu của điểm (x,y)

Circle(x,y,r); vẽ đường tròn tâm là điểm (x,y) bán kính là r

Arc(x,y,start,end,r); vẽ cung tròn tâm là (x,y) bán kính là r start là góc bắt đầu, end

là góc cuối (start và end từ 0-360)

Ellipse(x,y,start,end,rx,ry); vẽ cung elip tâm là (x,y) bán kính ngang là rx, bán kính

đứng là ry, start là góc bắt đầu, end là góc cuối (start và end từ 0-360)

PieSlice(x,y,start,end,r); vẽ hình quạt đặc tâm là (x,y) bán kính là r start là góc bắt

đầu, end là góc cuối (start và end từ 0-360)

Rectangle(x1,y1,x2,y2); vẽ hình chữ nhật đỉnh trên bên trái là (x1,y1), đỉnh dưới bên phải là (x2,y2)

Bar(x1,y1,x2,y2); vẽ hình chữ nhật đặc đỉnh trên bên trái là (x1,y1), đỉnh dưới bên phải là (x2,y2)

Bar3D(x1,y1,x2,y2,depth,top); vẽ hình hộp chữ nhật đỉnh trên bên trái là (x1,y1),

đỉnh dưới bên phải là (x2,y2), depth là chiều sâu, top là một biến kiểu Boolean bằng True nếu có vẽ 3 đường phía trên bằng False nếu có vẽ

SetWriteMode(WriteMode: Integer); đặt mode vẽ đường thẳng Nếu

WriteMode=CopyPut (=0) : vẽ đường thẳng như bình thường; còn nếu

WriteMode=XORPut (=1) : vẽ đường thẳng, nếu đường thẳng đã có thì xoá nếu chưa có thì vẽ (XOR với từng điểm ảnh trên màn hình)

Ví dụ :

Uses Crt, Graph;

Var

gd, gm, x, y, m, dem : Integer;

Begin

gd:=0;

InitGraph(gd,gm,' ');

Bar3d(100,100,300,300,50,True);

Readln;

ClearDevice;

Bar3d(100,100,300,300,50,False);

Readln;

dem:=0;

MoveTo(320,240);

Repeat

x:=Random(640);

y:=Random(480);

m:=Random(15);

SetColor(m);

{LineTo(x,y);}

PutPixel(x,y,m);

Trang 5

Delay(10);

dem:=dem+1;

If dem=500 Then

Begin

dem:=0;

ClearDevice;

End;

Until KeyPressed;

Readln;

Repeat

m:=Random(15);

SetBkColor(m);

ClearDevice;

Delay(300);

Until KeyPressed;

SetBkColor(Black);

ClearDevice;

CloseGraph;

End

5 Làm hình chuyển động :

Cho z: Word; p : Pointer; x1,y1,x2,y2 : Integer;

z:=ImageSize(x1,y1,x2,y2); z bằng số byte đủ chứa hình ảnh của hình chữ nhật (x1,y1,x2,y2)

Getmem(p,z); tạo vùng nhớ mới có kích cỡ bằng z byte và p trỏ đến vùng nhớ đó GetImage(x1,y1,x2,y2,p^); đ−a hình ảnh vào vùng nhớ mà p trỏ tới

PutImage(x,y,p^,PutMode);

Với PutMode=XorPut; OrPut; AndPut; CopyPut;

Ví dụ :

Uses Crt, Graph;

Var

z: Word;

p: Pointer;

x1,y1,x2,y2 : Integer;

gd, gm : Integer;

Begin

gd:=0;

InitGraph(gd,gm,' ');

Circle(20,20,10);

Circle(20,20,5);

PutPixel(20,20,Red);

x1:=0; y1:=0;x2:=40;y2:=40;

z:=ImageSize(x1,y1,x2,y2);

Getmem(p,z);

GetImage(x1,y1,x2,y2,p^);

Trang 6

PutImage(x1,y1,p^,XorPut);

y1:=240;

For x1:=1 To 640 Do

Begin

PutImage(x1,y1,p^,XorPut);

Delay(10);

PutImage(x1,y1,p^,XorPut);

End;

CloseGraph;

End

6 Khái niệm ViewPort

ViewPort (cửa sổ nhìn) là một hình chữ nhật trong màn hình và khi ta thiết lập thì các thao tác về đồ hoạ đ−ợc thực hiện ttrong đó nh− là một màn ảnh nhỏ

Để đặt ViewPort ta dùng lệnh

SetViewPort(x1,y1,x2,y2,Clip);

x1,y1,x2,y2 là các số nguyên :

Clip : Boolean bằng True nếu không cho phép vẽ ra ngoài, bằng False nếu cho phep {ClipOn=True, ClipOff=False}

Và khi đó gốc toạ độ đ−ợc chuyển về điểm có toạ độ là (x1,y1) và toạ độ mới của

điểm này là (0,0)

Ví dụ :

Uses Crt, Graph;

Var

x1,y1,x2,y2 : Integer;

gd, gm : Integer;

Begin

gd:=0;

InitGraph(gd,gm,' ');

SetViewPort(320,240,639,479,True);

Circle(0,0,200);

Readln;

ClearviewPort;

SetViewPort(320,240,639,479,False);

ClearViewPort;

Circle(0,0,200);

Readln;

CloseGraph;

End

7 Hiển thị văn bản trong chế độ đồ hoạ

DirectVideo:=False; cho phép dùng lệnh Write, Writeln trong chế độ đồ hoạ

OutText(xau); cho hiện nội dung xâu ở tại vị trí con trỏ

Trang 7

OutTextXY(a,b,xau); cho hiện nội dung xâu ở tại điểm (x,b)

SetTextStyle(Font,huong,kichco);

font : 0 : bình thường

1 : Cao gấp 3

2 : chữ nhỏ

3 : chữ Sans Serif

4 : Kiểu gô-tic (Gothic)

12 *.CHR có bao nhiêu tệp *.CHR thì có bấy nhiêu chữ

Huong : 0 : hướng in ngang

1 : hướng in đướng

Kichco : 1-10 là hệ số phóng to của chữ

SetTextJustify(ngang,dung);

ngang : 0 : LeftText : vị trí hiện tại của con trỏ ở bên trái của Text

1 : CenterText : vị trí hiện tại của con trỏ ở giữa của Text

2 : RightText : vị trí hiện tại của con trỏ ở bên phải của Text

dung : 0 : BottomText : vị trí hiện tại của con trỏ ở bên dưới của Text

1 : CenterText : vị trí hiện tại của con trỏ ở giữa theo chiều đứng của Text

2 : TopText : vị trí hiện tại của con trỏ ở bên trên của Text

8 Tô màu miền kín

Trước khi tô màu miền nào đó thi ta phải đặt mẫu nền cần tô bằng lệnh

SetFillStyle(Pattern, color);

Color : là màu cần tô cho miền kín từ 0-15

Pattern : là mẫu nền cần tô cho miền kín 0-12

0 : tô màu cùng màu nền

1 : màu đặc

2 : đường đứt nét

12 : kiểu người dùng đinh nghĩa

Sau đó muốn tô màu miền kín chứa điểm (x,y) ta dùng lệnh

FloodFill(x,y,m);

với m chính là màu của đường kín chứa điểm (x,y)

Ví dụ :

Uses Crt, Graph, dos;

Const

(* Pattern : FillPatternType = ($80,$63,$63,$63,$7f,$63,$63,$63);*)

Pattern : FillPatternType = ($1a,$2b,$4c,$8d,$8d,$4c,$2b,$1a);

Var

gd,gm, i : integer;

Begin

gd:=0;

InitGraph(gd,gm,' ');

SetColor(red);

Circle(320,240,100);

Trang 8

For i:=0 To 11 Do

Begin

SetFillStyle(i,Cyan);

FloodFill(320,240,red);

Readln;

End;

SetFillPattern(Pattern,Red);

SetFillStyle(12,Red);

Circle(320,240,100);

FloodFill(320,240,red);

Readln;

CloseGraph;

End

9 Lấy thời gian và ngày tháng của hệ thống

Để lấy ngày và giờ của hệ thống ta phải sử dụng Unit DOS và khai báo các biến : Var

gio,phut,giay,pt,nam,thang,ngay,dw: Word;

tương ứng là giờ, phút, giây, phần trăm giây và năm, tháng, ngày, thứ tự của ngày trong tuần và sau đó dùng lệnh :

GetTime(gio,phut,giay,pt);

GetDate(nam,thang,ngay,dw);

Còn để đặt thời gian và ngày tháng ta dùng lệnh :

SetTime(gio,phut,giay,pt);

SetDate(nam,thang,ngay,dw);

Ví dụ :

Uses Crt, Graph, dos;

Var

gio,phut,giay,pt,nam,thang,ngay,dw:Word;

Begin

GetTime(gio,phut,giay,pt);

GetDate(nam,thang,ngay,dw);

clrscr;

Writeln(gio,':',phut,':',giay);

Writeln(ngay,'/',thang,'/',nam);

Readln;

End

Ngày đăng: 27/08/2012, 09:05

TỪ KHÓA LIÊN QUAN

w