Những kiến thức lý thuyết có liên quan đến đồ án, về OpenGL: Sử dụng các hàm sau để vẽ các hình khối cơ bản: o Mặt trước của hình được xác đinh là mặt được vẽ ngược chiều kim đồng hồ bằ
Trang 1Khoa Công nghệ thông tin
Lớp: TH2005/02
Môn: Đồ họa máy tính
BÁO CÁO ĐỒ ÁN 3D HỌC ĐỒ HỌA BA CHIỀU
Nhóm thực hiện:
0512175 Nguyễn Đăng Khoa demonuns75@yahoo.com
0512186 Huỳnh Duy Khương khuong_4kan_nyd@yahoo.com.vn
0512191 Nguyễn Trung Kiên nike17lhp@yahoo.com
Trang 2Những kiến thức lý thuyết có liên quan đến đồ án, về OpenGL:
Sử dụng các hàm sau để vẽ các hình khối cơ bản:
o Mặt trước của hình được xác đinh là mặt được vẽ ngược chiều kim đồng
hồ bằng cách dùng hàm glFrontFaceGL_CCW)
o gluCylinder: vẽ hình trụ rỗng
o gluDisk: vẽ mặt đĩa (sử dụng kết hợp với gluCylinder để vẽ hình nón,
hình trụ đặc)
Trang 3o gluSphere: vẽ hình cầu.
o gluQuadricOrientation: xác định hướng của hình (mặt trước, mặt sau)
o gluNewQuadric, gluDeleteQuadric: tạo và hủy đối tượng GLUquadric
dùng để xác định các thông số vẽ cần thiết khi sử dụng hàm
gluCylinder, gluDisk, gluSphere.
o glVertex3f: để xác định các điểm vẽ khi vẽ hình lập phương (vẽ từng
mặt phẳng của hình)
Sử dụng các hàm sau để thực hiện các phép biến đổi hình học:
o Về bản chất ma trận của ModelView trong OpenGL là ma trận biến đổi
Affine, nên khi vẽ một hình nào trong OpenGL thì tất cả các điểm của
hình sẽ nhân với ma trận ModelView để ra tọa độ mới tương ứng với
phép biến đổi Affine hiện tại, rồi mới được vẽ ra
o glTranslatef: (bản chất) nhân ma trận ModelView với ma trận biểu
o glMultMatrixf: nhân ma trận ModelView với ma trận bất kỳ
o glLoadIdentity: kết hợp với hàm glMatrixMode(GL_MODELVIEW) để ma
trận ModelView thành ma trận đơn vị
Sử dụng các hàm sau để thực hiện các phép chiếu:
o glOrtho: thiết đặt khung nhìn của phép chiếu trực giao Khung nhìn
của phép chiếu trực giao là một hình hộp
o gluPerspective: thiết đặt khung nhìn của phép chiếu phối cảnh Khung
nhìn của phép chiếu phối cảnh là một chóp cụt
Sử dụng các hàm sau để thiết lập vật liệu cho hình khối, chiếu sáng, tạo
bóng, sương mù:
o glEnable(GL_COLOR_MATERIAL), glDisable(GL_COLOR_MATERIAL):
bật/tắt hiệu ứng vật liệu cho các hình khối
o glColorMaterial, glMaterialfv: thiết đặt các thông số liên quan của
vật liệu như độ sáng, màu vật liệu phụ thuộc vào yếu tố môi trường nào
o glEnable(GL_LIGHTING), glDisable(GL_LIGHTING): bật/tắt hiệu ứng
chiếu sáng
Trang 4o glLightfv: hiệu chỉnh các thông số của một nguồn sáng trong OpenGL
(có 8 nguồn sáng trong OpenGL) như: vị trí, hướng chiếu, góc chiếu,
màu, … của nguồn sáng
o glNormal3f: chỉ định vector pháp tuyến của mặt phẳng, dùng trong kỹ
thuật chiếu sáng
o Tạo bóng: sử dụng một phép biến đổi để biến đổi các hình 3D thành
dạng phẳng và nằm trên một mặt phằng xác định, và các hình được vẽ ra
là màu đen
o glEnable(GL_FOG), glDisable(GL_FOG): bật/tắt hiệu ứng sương mù
o glFogfv, glFogf: thiết đặt các thông số liên quan đến hiệu ứng sương
mù như: màu sắc, vị trí bắt đầu, vị trí kết thúc, độ dày đặc, … của sương
mù
Sử dụng các hàm sau để ánh xạ texture:
o glGenTextures: tạo texture
o glBindTexture: áp dụng texture cho các hình khối
o glTexImage2D: đưa dữ liệu (ảnh) vào texture
o glTexParameteri: thay đổi các tham số của texture như bộ lọc… của
texture
o gluQuadricTexture: cho phép áp dụng texture nào cho hình Dùng kết
hợp với các hàm gluSphere, gluCylinder, gluDisk để ánh xạ hiệu
ứng texture
o glTexCoord2f: ánh xạ texture cho các hình dạng phẳng
Sử dụng các hàm để xác định màu sắc cho hình khối:
o glColor4f: xác định màu cho các hình
4 Ý tưởng cài đặt:
Cấu trúc của chương trình được thiết kế theo hướng đối tượng, gồm có các
lớp chính sau:
Trang 6- Danh sách các thuộc tính, phương thức của từng lớp:
_ObjectOpenGL: lớp trừu tượng, cung cấp các phương thức thuần ảo để
các lớp con định nghĩa lại, các phương thức dùng chung cho các lớp con
Là lớp mô tả các thuộc tính chung của hình khối
mô tả ma trận4x4) mô tảphép biến đổiAffine hiệntại của hình
Được sửdụng trong
Rotate, Scale,Translate,
Axisymmetric
Trang 7lúc nào cũngnằm ở tâmcủa hình Vídụ: hình nónthì mCenter
là tâm củamặt phẳngđáy
r
hình Mảng 4phần tử ứngvới R, G, B,A
Bật tắt chế độ
vẽ hình ramàn hình
leTex ture
Boolean
Bật tắt ánh xạtexture lênhình
Phươ ng thức
Kiể u trả
e
void
Hàm ảo Quayhình một gócAngle, quaymột trục bất kỳ
Trang 8(trục có thể cómột đầu đặt tạitâm tọa độ hoặckhông).
late
void
Hàm ảo Tịnhtiến hình theo
ba trục Ox, Oy,Oz
d
Hàm ảo Cogiãn hình theo
3 trục Ox, Oy,Oz
mmetr ic
void
Hàm ảo Thựchiện phép đốixứng với mộttrục bất kỳ
lor
void
Đặt lại màu củahình
d
Hàm ảo Vẽhình ra mànhình Tại lớpnày, chỉ đặt lạimàu và vật liệucho hình Cáclớp sau sẽ thựchiện vẽ hìnhtương ứng vớilớp đó
_Cone: kế thừa từ lớp _ObjectOpenGL Là lớp thể hiện thông tin và phụ
trách vẽ hình nón
Trang 9double
Chiều caocủa hình nón
es
dùng để vẽhình nón Là
1 tham sốtrong hàm
gluCylinder, gluDisk của
1 tham sốtrong hàm
gluCylinder, gluDisk của
OpenGL
icCon e
GLUqu adric
Là 1 tham sốtrong hàm
gluCylinder.
icDis k
GLUqu adric
Là 1 tham sốtrong hàm
gluDisk.
Phươ ng thức
Kiểu
Trang 10Không có phương thức mới
_Cubic: kế thừa từ lớp _ObjectOpenGL Là lớp thể hiện thông tin và phụ
phương
Phươ ng thức
Kiểu
Không có phương thức mới
_Cylinder: kế thừa từ lớp _ObjectOpenGL Là lớp thể hiện thông tin và
t
double
Chiều caocủa hình trụ
s
dùng để vẽhình trụ Là
1 tham sốtrong hàm
gluCylinder , gluDisk
Trang 111 tham sốtrong hàm
gluCylinder , gluDisk
của OpenGL
icCyli nder
GLUqu adric
Là 1 tham sốtrong hàm
gluCylinder
cDisk1
GLUqu adric
Là 1 tham sốtrong hàm
gluDisk.
cDisk2
GLUqu adric
Là 1 tham sốtrong hàm
gluDisk.
Phương thức
Kiểu
Không có phương thức mới
_Sphere : kế thừa từ lớp _ObjectOpenGL Là lớp thể hiện thông tin và
es
dùng để vẽhình cầu Là
Trang 121 tham sốtrong hàm
1 tham sốtrong hàm
Là 1 tham sốtrong hàm
gluSphere.
Phương thức
Kiểu
Không có phương thức mới
_LightSource: kế thừa từ lớp _ObjectOpenGL Là lớp thể hiện thông tin
Mảng 3 chiềuứng với tọa
Mảng 3 chiềuứng với tọa
Trang 13độ x, y, z, làtọa độ củamột điểm,điểm này và
vị trí củanguồn sáng
sẽ tạo thànhhướng củanguồn sáng
CutOf f
sáng củanguồn sáng
entLi ght
float[
]
Màu của ánhsáng xungquanh Mảnggồm 4 phần
tử ứng với R,
G, B, A Cònmàu phảnchiếu củanguồn sáng
là mColor đặt
_ObjectOpenGL
x
bật nguồnsáng nàotrong
OpenGL
Trang 146 mQuad
ricCo ne
GLUqu adric
Được dùng
để vẽ nguồnsáng, chủ yếu
là để minhhọa nguồnsáng đangnằm ở đâu
Là tham số
gluCylinder
trongOpenGL
ricSp here
GLUqu adric
Được dùng
để vẽ nguồn
tham số củahàm
gluSphere
trongOpenGL
Phương thức
Kiểu
Không có phương thức mới
_Vector: kế thừa từ lớp _ObjectOpenGL, sử dụng lớp _Vector3D Là lớp
thể hiện thông tin và phụ trách vẽ vector
Điểm bắt đầucủa vector
Trang 15gluCylinder, gluDisk
trongOpenGL
Phương thức
le
Boole an
Bật tắt việc
vẽ trục tọa độ
ra màn hình
Phương thức
Kiểu
độ ra màn
Trang 16float []
Chứa các hệ
phương trìnhmặt phẳng
Mảng 4 phần
tử ứng với hệ
số A, B, C, Dtrong phươngtrình đườngthẳng
le
Boolean
Bật tắt việc
vẽ nền ramàn hình
Phương thức
Trang 17Ma trận đểbiến đổi các
thành dạngphẳng và nằmtrên mặt nền
Ma trận nàythay đổi khinguồn sángthay đổi vịtrí
nd
_Grou nd
Tham chiếuđến đổi tượngnền Dùng đểtính ma trậnbiến đổi
le
Boole an
Bật tắt việc
vẽ bóng ramàn hình
Phương thức
Kiểu
torMatr ix
trận biếnđổi ứng với
vị trí mới
Trang 18của nguồnsáng.
của cáchình (tham
số của hàm
là tập hợpcác hìnhcần tạobóng) lênnền
_Texture: Lớp dùng để điều khiển việc ánh xạ texture lên các hình.
Mảng 1 phầntử
le
Boole an
Bật tắt việc
texture lênhình
Phương thức
Nạp texturelên bộ nhớ
Dùng hình
Trang 19để làmtexture.
Tham sôcủa hàm làđường dẫnchỉ đến fileảnh Trả vềfalse nếunạp texturethất bại
áp dụngtexture lêncác hình
(Áp dụngđược haykhông còntùy thuộcvào biếnmEnable)
_Fog: Lớp dùng để điều khiển việc tạo sương mù.
Trang 20của sương
mù (Tínhtheo trục Oz)
ity
của sươngmù
le
Boole an
Bật tắt việctạo sươngmù
Phương thức
mEnable)
_Vector3D: Lớp mô tả thông tin và các phương thức sử lý của một vector
trong không gian Oxyz
Thuộc
Trang 211 mX float Giá trị x của
Thực hiệnphép trừ 2vector
r _Vector 3D(floa t[] P)
_Vector3D
Ép kiểufloat[] sangkiểu
_Vector3D
r float[]
(_Vecto r3D P)
_Vector3D
Ép kiểu_Vector3Dsang kiểufloat[]
_Affine: Lớp mô tả thông tin về một phép biến đổi Affine bất kỳ.
Affine
Phương thức
Kiểu
Trang 22mMatrixthành matrận mô tảcho phépquay quanhmột trục bất
kỳ với gócquay Angle
mMatrixthành matrận mô tảcho phép cogiãn theotheo 3 trục
Ox, Oy, Oz
te
mMatrixthành matrận mô tảcho phéptịnh tiếntheo 3 trục
Ox, Oy, Oz
etric
mMatrixthành matrận mô tảcho phépđối xứng
Trang 23qua mộttrục bất kỳ.
y
mMatrixthành matrận đơn vị
độ mới ứngvới phépbiến đổi đó
r+
_Affi ne
Kết hợp 2phép biếnđổi Affine
_Math3D: Lớp chứa các hàm static, các hàm này thực hiện các phép toán 3
chiều Tất cả các hàm này đều được lấy từ thư viện gltool.h
gthSquared
float
Lấy bìnhphươngchiều
Trang 24dài củađoạnthẳng.
d
Thựchiện cogiãnvectortheo hệ
số chotrước
gth
float
Lấychiềudài củavector
tor
void
Chuyểnmộtvectorthànhvector
có chiềudài đơnvị
d
Tích cóhướngcủa 2vector
tion
void
Tìmphươngtrìnhmặt
Trang 25adowMatrix
void
Lập matrận biếnđổi làmcác hình
3 chiềuthànhhìnhphẳng
và nằmtrên mộtmặtphẳngdựa vàophươngtrìnhmặtphẳng
và vị tríđèn
at
Tínhchiềudài củađoạnthẳng
eenVectors
float
Tính gócgiữa 2vector
ctor
float[
Tìmvector
Trang 26] pháp
tuyếncủa mặtphẳng
d
Saochép cácgiá trị từ
ma trậnnguồnsang matrậnđích
_Form1: lớp form, dùng để xử lý giao diện, Trong lớp này chứa nhiều
control cơ bản, nên sẽ không liêt kê các phương thức và thuộc tính liên
quan đến control Chỉ nêu các thuộc tính và hàm có liên quan đến các lớp ở
trên
Thu ộc
bj
List<_ObjectOpenGL>
Tập hợpcác hìnhkhối cơbản
ight Sour ce
List<_LightSource>
Tập hợpcácnguồnsáng
ecto r
List<_Vector>
Tập hợpcácvector,
Trang 27chỉ dùng
để minhhọa trụckhi thựchiệnphépquayquanhtrục,hoặcphép đốixứngtrục
tượngdùng đểlưu cácthông sốcần thiếtkhi tạosươngmù
ure
tượngdùng đểlưu cácthông sốcần thiếtkhi ánh
Trang 28axes
tượngdùng để
vẽ trụctọa độ
Phương thức
Ki ểu trả
id
Hàmchính,dùng để
vẽ cáchình lênmànhình,trục tọa
độ, tạobóng,sươngmù,texture,nền,nguồnsáng
id
Thiết lậpcác
Trang 29thông sốban đầuchoOpenGL
id
Thiết đặtphépchiếutrực giaohoặcphépchiếuphốicảnh
Lớp Form1 có một đối tượng simpleOpenGlControl1 thuộc lớp
simpleOpenGlControl (thuộc Tao Framework), tất cả các hàm OpenGL sẽ
được vẽ lên trên đối tượng này
Khi người dùng yêu cầu một chức năng nào đó trên giao diện thì chương
trình chỉ việc gọi chức năng tương ứng được cung cấp bởi các lớp đã trình
bày, rồi sau đó cho đối tượng simpleOpenGlControl vẽ lại là được
5 Hướng dẫn sử dụng:
Chưa làm kịp
Trang 306 Tự đánh giá:
- Ưu điểm:
o Về phần cài đặt: chương trình được tổ chức theo hướng đối tượng,
nên khi thiết kế giao diện chỉ cần dùng hàm của những lớp bên dưới
để thực hiện, nên dễ tổ chức và quản lý
o Về chương trình: dễ sử dụng, cho phép chỉnh nhiều thông số
- Khuyết điểm:
o Ít hình khối
o Chỉ cho phép vẽ một hình trên màn hình nên không thấy được tính
tương tác
o Về phần tạo bóng vẫn chưa hoàn thiện, khi hình và nguồn sáng nằm
về 2 phía của nền thì vẫn hiện bóng (sai)
- Các ý tưởng chưa cài đặt kịp:
o Cho phép vẽ nhiều hình trên màn hình, về phần thiết kế bên dưới thì
đã cho phép vẽ nhiều hình trên màn hình (biến lstObj có kiểu list)
o Cho phép 2 hình tương tác với nhau với nhau
o Cho phép thực hiện Animation, ví dụ người dùng tịnh tiến hình thì
cho hình di chuyển từ từ đến vị trí mới
o Cho phép người dùng nhập vào nhiều phép biến đổi liên tiếp rồi
dùng hiệu ứng Animation để mô tả các phép biến đổi đó
- Nhận xét về đề bài project:
o Tương đối khó
o Phù hợp với môn đồ họa máy tính
o Nên cho đồ án vào đầu mỗi học kỳ để sinh viên có thời gian chuẩn bị
kỹ hơn
7 Tài liệu tham khảo:
OpenGL® SUPERBIBLE Fourth Edition Comprehensive Tutorial and
Reference; Richard S Wright, Jr., Benjamin Lipchak, Nicholas Haemel
http://nehe.gamedev.net/
http://members.hellug.gr/nkour/Tao.OpenGL_Builder/Tao_Builder-html.zip
Slide của thầy Bùi Tiến Lên