Cách làm việc của ứng dụng

Một phần của tài liệu Đồ án lập trình game bằng ngôn ngữ c++ và mã nguồn mở opengl (Trang 144 - 150)

Hình 2.2 là cửa sổ khi bắt đầu ứng dụng thể hiện một hình cầu 3-D .Thơng qua hình cầu này ta cĩ thể minh họa được một số giải thuật đồ họa 3-D.

Hình 2.2: Trước khi thực

KILOBOOKS.COM

2.2.1. Các phép biến hình OpenGL.

Trước khi thực hiện các phép biến hình thì đối tượng hình cầu được khởi động bằng

các giá trị: m_xRotation = 0.0f; m_yRotation = 0.0f; m_zRotation = 0.0f; m_xTranslation = 0.0f; m_yTranslation = 0.0f; m_zTranslation = -5.0f; m_xScaling = 1.0f; m_yScaling = 1.0f; m_zScaling = 1.0f; 2.2.1.1.Phép tịnh tiến:

Để thực hiện phép tịnh tiến ta dùng phím phải của con chuột để di chuyển hình cầu, các biến m_xTranslation, m_yTranslation, m_zTranslation nhận giá trị mới thì

InvalidateRect được gọi để vẽ lại hình.

KILOBOOKS.COM

2.2.1.2. Phép Quay:

Ngược lại với phép tịnh tiến để thực hiện phép quay ta dùng phím trái của con

chuột để điều khiển hình cầu quay theo các trục tuỳ ý, lúc này các biến m_xRotation,

m_yRotation, m_zRotation nhận giá trị mới thì InvalidateRect được gọi để vẽ lại hình.

Hình 2.2.1.2: Sau khi thực hiện phép quay

2.2.1.3. Phép Co giãn:

Để thực hiện phép co giãn hình cầu ta thơng qua ba thanh trượt tương ứng với ba

trục X, Y, Z. Thanh trựơt cĩ giá trị từ 1 – 100, khi ta di chuyển các thanh trượt các biến

m_xScaling, m_yScaling, m_zScaling nhận giá trị mới thì InvalidateRect được gọi để vẽ

lại hình.

Hình 2.2.1.3: Sau khi thực hiện phép co giản theo ba trục

2.2.2. Kiểu bĩng , chiếu sáng, hiệu ứng răng cưa và các thao tác vẽ đối tượng 3-D: 2.2.2.1. Kiểu bĩng:

Một phương diện quan trọng của OpenGL là kiểu bĩng dùng thể hiện đối tượng trong

cảnh. Co hai kiểu bĩng: mượt (smooth) và phẳng (flat). Để chọn kiểu bĩng, sử dụng hàm

glShadeMode() như sau:

KILOBOOKS.COM

Đối số đơn của hàm là hằng thể hiện kiểu bĩng được chọn, là GL_SMOOTH, hoặc

GL_FAT. Với bĩng mượt, OpenGL phải xác định màu bĩng cho từng pixel trên đa giác. Trong đối số bĩng phẳng, toàn bộ đa giác dùng chung một màu bĩng. Hàm

OnCheckSmooth() kiểm tra kiểu bĩng.

void CFormCommandView::OnCheckSmooth() {

// TODO: Add your control notification handler code here m_Smooth = !m_Smooth; If(m_Smooth) glShadeModel(GL_SMOOTH); else glShadeModel(GL_FLAT); this->GetRenderView()->InvalidateRect(NULL,FALSE); (adsbygoogle = window.adsbygoogle || []).push({});

Hình 2.2.2.1a:Kiểu bĩng mượt Hình 2.2.2.1 Kiểu bĩng phẳng

2.2.2.2. Chiếu sáng đối tượng:

Đầu tiên đối tượng được vẽ cĩ màu trong suốt để đối tượng cĩ ánh sáng chiếu với

màu sắc tùy ý chương trình sử dụng CColorDialog cho người dùng tùy ý chọn.

Hình 2.2.2.2a: Chọn màu chiếu sáng Hình 2.2.2.2b:Chiếu sáng

KILOBOOKS.COM

Trên màn hình, một đường thẳng là tập hợp của các pixel được chiếu sáng trong hệ

thống kẽ ơ vuơng. Do đĩ, chỉ cĩ đường nằm ngang hoặc thẳng đứng là được vẽ một cách

suơng sẽ. Cịn các đường nghiêng sẽ cĩ hiện tượng răng cưa. Hàm OnCheckAntialias() sẽ

làm giảm hiệu ứng răng cưa:

void CFormCommandView::OnCheckAntialias() { m_Antialias = !m_Antialias; if(m_Antialias) { glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); glLineWidth(1.5); } else { glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT,GL_NICEST); glLineWidth(1.0); } GetRenderView()->InvalidateRect(NULL,FALSE); }

Hình 2.2.2.3a:Chưa khử răng cưa Hình 2.2.2.3b:Đã khử răng cưa

2.2.2.4. Các thao tác vẽ đối tượng 3-D:

Đa giác là hình tạo bởi các đường nối (cạnh) giữa một tập hợp các vertex. Một đa

giác cĩ ít nhất ba cạnh. Như vậy, đa giác đơn giản nhất là tam giác.

OpenGL cĩ thể vẽ đa giác như các điểm, các đường ngồi, hay đối tượng đặc.

KILOBOOKS.COM

giác OpenGL cĩ hai mặt trước và sau cĩ thể vẽ theo cách riêng, và cĩ thể quay một đa giác để xem mặt bên kia.

Hàm glPogonMode() được dùng để vẽ đa giác:

Chương trình cho phép vẽ hình cầu với các chế độ điểm (GL_POINT), khung lưới (GL_LINE), đa giác đặc (GL_FILL).

void CFormCommandView::OnRadioModel0() { glPolygonMode(GL_FRONT_AND_BACK,GL_POINT); this->GetRenderView()->InvalidateRect(NULL,FALSE); } void CFormCommandView::OnRadioModel0() { glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); this->GetRenderView()->InvalidateRect(NULL,FALSE); } void CFormCommandView::OnRadioModel0() { glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); this->GetRenderView()->InvalidateRect(NULL,FALSE); }

KILOBOOKS.COM

Hình 2.2.2.4a: Hình cầu vẽ bằng khung lưới

Hình 2.2.2.4b: Thao tác vẽ hình cầu đặc

Hình 2.2.2.4c: Hình cầu vẽ bằng điểm

Một phần của tài liệu Đồ án lập trình game bằng ngôn ngữ c++ và mã nguồn mở opengl (Trang 144 - 150)