Cơ Bản Về OpenGL | - | Kevin's Blog
Có thể bạn quan tâm
- Home
- Album
- Home Tools
- Kevin’s Blog
- Test
- About me
- Link
- Working
- Learning
- Các kỹ năng cần thiết
- English
- Tử vi bói toán
- Tình yêu và cuộc sống
- Guest Book
About me
Nguyên Bùi Xem hồ sơ
kevinjame2004
Menu chính
- Album
- Home Tools
- Kevin’s Blog
- Test
- About me
- Link
- Working
- Learning
- Android
- Android là gì ?
- Select an Image from gallery in ANDROID and show it in an ImageView
- FE
- Java
- PHP
- Bài 1: Giới thiệu, Cấu hình và cài đặt PHP
- Bài 4: Xử lý giá trị form trong PHP
- Bài 7: Khái niệm cơ bản về Cookie và session trong PHP
- Bài 9: Cơ bản về ngôn ngữ SQL và Mysql
- Bài 10: Kết hợp PHP và MYSQL trong ứng dụng website
- Bài 12: Viết ứng dụng thêm thành viên bằng PHP và MYSQL
- Bài 13: Viết ứng dụng quản lý thành viên bằng PHP và MYSQL
- Bài 14:Viết ứng dụng sửa xóa thành viên bằng PHP và MYSQL
- Plan
- Seminar
- Thesis
- Graphic Design
- Photoshop
- Lý thuyết
- Thực hành
- Illustrator
- Flash
- Các chuyên mục khác
- Tự tạo powerpoint template
- Màu Sắc trong phong thủy
- 5 cách nhận biết ảnh giả
- Các phiên bản film
- Các thể loại trong Graphic Design
- Ecard
- Kinh nghiệm
- Photoshop
- Cơ sở dữ liệu
- Reset pass trong mysql
- Mệnh đề WHERE
- Toán tử BETWEEN…AND
- Từ khoá DISTINCT
- Từ khoá ORDER BY
- GROUP BY và HAVING
- Câu lệnh JOIN
- Tổng quan về SQL
- Đồ họa máy tính
- Cơ bản về OpenGL
- Các đối tượng dồ họa cơ sở
- Using OpenGL with Visual Studio 9.0
- Mạng máy tính
- Cơ bản về IP
- DHCP là gì?
- Tổng quan về IPv6
- Các Bước bấm cable mạng
- Nối mạng hai máy vi tính trong Windows XP
- Tạo mạng LAN gia đình
- Tập lệnh quan trọng của DOS dùng để cấu hình và kiểm tra mạng
- SSID và SID
- Bảo mật website với SSL Certificate của Verisign
- Giới hạn thời gian dùng của một tài khoản user trong Windows XP
- Các lệnh trong Command Prompt
- Change TCP/IP setting
- Changing DNS settings in Windows Vista
- Gỡ bỏ wireless network profile trong Windows 7
- List of SMTP and POP3 Servers (Mail Server)
- Phân tích thuật toán
- Xử lý đa chiều
- Xử lý âm thanh
- PC Trouble Shooting
- Basic
- Crack password Windows
- Thủ thuật Excel
- Chuyển cột thành hàng
- Japanese
- JoomLa
- Cấu hình mail cho Joomla
- Lấy lại password cho Administrator
- Android
- Các kỹ năng cần thiết
- Kỹ năng học tập
- Học cách học
- Sắp xếp thời gian
- Hình thức trình bày luận văn tốt nghiệp
- Ra quyết định theo hướng thích nghi
- Kỹ năng làm việc
- 10 “mẹo” để “lính mới” ghi điểm
- Những sai lầm khi sử dụng nước hoa
- Phát triển sự sáng tạo
- 7 “kỹ năng sống còn” của sinh viên
- Kỹ năng phân tích SWOT
- Năm câu trả lời thông minh trong buổi phỏng vấn
- Bí quyết “ghi điểm” với sếp
- Kỹ năng giao tiếp
- Luyện tập sự tự tin
- Hãy nói “cám ơn”
- Những bí mật chị em không nên kể cùng ai
- Kỹ năng làm việc nhóm
- Kỹ năng giao tiếp trong nhóm
- Kỹ năng học tập
- English
- Tử vi bói toán
- BÓI THEO SỐ
- Tuổi hợp tuổi khắc
- Zodiac – 12 cung hoàng đạo
- “Bí kíp” khi nói chuyện với các chòm sao
- 12 chòm sao thường tin lời ai nhất
- 12 chòm sao và chỉ số làm người xấu
- CUỘC ĐỜI 12 CHÒM SAO
- Miêu tả tính cách của 12 chòm sao
- Mối Quan Hệ Giữa 4 Nhóm Nguyên Tố Hoàng Đạo
- Mối Quan Hệ Giữa 4 Nhóm Nguyên Tố Hoàng Đạo (Phần 2)
- Ngày sinh của bạn nói lên điều gì
- Nguồn động lực cho tình yêu của 12 chòm sao
- Tình yêu và cuộc sống
- Nhận biết tính cách chàng qua cách…ăn
- Những sai lầm thường gặp của đàn ông khi cưa cẩm
- Hoàn hảo trong ngày hẹn đầu
- Quyến rũ với 5 cử chỉ
- Dấu hiệu nhận biết vợ bạn có bồ
- Để chinh phục tình cảm của nàng
- Để nàng thêm yêu
- Con trai và những câu nói mất điểm
- Quy tắc sống và yêu
- Tán tỉnh nàng bằng cái “Alo”
- Học cách để quên một người
- Guest Book
Nhip sống trẻ
- An error has occurred; the feed is probably down. Try again later.
Cơ bản về OpenGL
OpenGL là gì ?
Được phát triển đầu tiên bởi Silicon Graphic, Inc., là một giao diện phần phần mềm hướng thủ tục theo chuẩn công nghiệp hộ trợ đồ họa 3 chiều. Cung cấp khoảng 120 tác vụ để vẽ các primitive trong nhiều mode khác nhau. Với OpenGL, bạn có thể tạo ra ảnh 3 chiều cả tĩnh và động với chất lượng cao.
Là một giao diện phần mềm độc lập với phần cứng (hardware – independent software interface) hộ trợ cho lập trình đồ họa. Để làm được điều này, OpenGL không thực hiện các tác vụ thuộc về hệ điều hành cũng như không nhận dữ liệu nhập của người dùng (người dùng giao tiếp với OpenGL thông qua OpenGL API). Nó là lớp trung gian giữa người dùng và phần cứng. Nghĩa là nó giao tiếp trực tiếp với driver của thiết bị đồ họa.
GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL. GLUT makes it considerably easier to learn about and explore OpenGL programming. GLUT provides a portable API so you can write a single OpenGL program that works across all PC and workstation OS platforms.
Download phiên bản mới nhất của glut ở đây. Giải nén và đặt các file vào đúng vị trí:
– glut32.dll vào C:\WINDOWS\system\ – glut.lib vào C:\Program Files\Microsoft Visual Studio 9.0 \ VC \ lib – glut.h vào C:\Program Files\Microsoft Visual Studio 9.0 \ VC \ Include \ GL \
Tất nhiên GLUT là thư viện phụ thuộc OpenGL cho nên cần có gl.h, glu.h,glu32.dll, opengl32.dll, opengl32.lib, glu32.lib nữa. Tải tại đây. Giải nén và đặt vào các vị trí giống như trên.
Add dòng sau đây vào trước hàm main() #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
Xong, bây giờ tui sẽ hướng dẫn bạn vẽ một hình tam giác với GLUT
#include <GL/glut.h> #pragma comment( linker, “/subsystem:\”windows\” /entry:\”mainCRTStartup\”” ) void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow(“Ve hinh tam giac!!!!”); glutDisplayFunc(renderScene); glutMainLoop(); }
Một số quy ước (convention) về tên hàm OpenGL:
Tên hàm thư viện OpenGL có hình thức như sau:
Gl{tên hàm}[{số tham số}{loại tham số}]
Ví dụ: glClearColor(), glColor3f()
Phần tên hàm được viết hoa cho những chữ cái đứng đầu 1 từ trong tên hàm và ít nhiều nói lean được chức năng của hàm. Phần số tham số và loại tham số xuất hiện tùy theo hàm. Số tham số cho ta biết số lượng tham số sẽ đưa vào khi gọi hàm.
Giải thích các hàm:
void glutInit(int *argc, char **argv); –> //Khởi động GLUT , argc, argv là 2 đối số dòng lệnh của hàm main
void glutInitWindowPosition(int x, int y); —> //Khởi tạo vị trí bắt đầu cửa sổ, x là left of the screen, y là top of the screen, nói chung đây là điểm bên trái, phía trên của cửa sổ, từ đây ta kéo xuống phía dưới, bên phải là đc 1 cửa sổ . Đơn vị của x, y là pixel.
void glutInitWindowSize(int width, int height); –-> //Khởi tạo kích thước cửa sổ. với chiều dài và chiều rộng, cộng thêm 1 điểm bắt đầu mới nói ở trên nữa, bạn đã tưởng tượng ra đc 1 cái cửa sổ chưa
void glutInitDisplayMode(unsigned int mode) –> //định nghĩa mode hiển thị, chỉ ra màu của mode và số + kiểu của buffer + GLUT_RGBA or GLUT_RGB : cửa sổ màu RGBA, đây là mode mặc định + GLUT_SINGLE : cửa sổ buffer đơn + GLUT_DOUBLE : cửa sổ buffer đôi + GLUT_DEPTH : cửa sổ buffer sâu
int glutCreateWindow(char *title); –> tạo cửa sổ có tiêu đề title
Bây giờ ta cần tạo một hàm để trình diễn. Hàm này là do người dùng tạo ra.
void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); //xóa màn hình glBegin(GL_TRIANGLES); //vẽ tam giác glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); //kết thúc glFlush(); }
void glutDisplayFunc(void (*func)(void)); –> Hàm này báo cho GLUT biết phải trình diễn theo hàm nào , đối số của nó là một con trỏ hàm trả về kiểu void
void glutMainLoop(void) –> cuối cùng ta phải lặp lại hàm main liên tục để “trình diễn hình tam giác”. Giống như người ta làm phim hoạt hình đó, các frame nối tiếp nhau trên một màn ảnh.
Hic, mấy cái này dịch từ english sang, ko hiểu lắm, cứ tạm biết vậy đã.
*********************************************************************************************
THAM KHẢO THÊM********************************************************************************************* Các lệnh glClearColor(), glClear(),glFush() là những lệnh cơ bản của Opengl.glClearColor() có nhiệm vụ chọn màu để xoá window, bạn dễ dàng nhận ra là nó có 4 tham số, 4 tham số đó là RGBA( red green blue alpha).Không giống với hàm RGB() trong Win32 API , 4 tham số này có giá trị trong khoảng 0.0f đến 1.0f(kiểu float). Các giá trị R,G,B trong OpenGL thì >=0.0 (không có) và <=1.0 (độ sáng cực đại). Ba tham số đầu là màu đỏ xanh lá cây và xanh da trời, còn tham số thứ 4 là độ sáng tối của window.Bây giờ hãy thay đổi các giá trị của màu xem thử!Hàm glClear() mới thực sự xoá window, nó có những hằng số xác định.Có trường hợp có những hàm chưa được chạy đến khi kết thúc chương trình, để tránh trường hợp này hàm glFlush()được gọi, nó sẽ thực hiện tất cả các hàm chưa được chạy và kết thúc chương trình.
Dùng glClear*() để định màu xóa cho các buffer. Sau đó glClear(GLbitfied mask) để xóa buffer tương ứng với mask Tham số param của hàm glClear() có thể nhận từ 1 đến 4 giá trị sau:
Buffer Name Color buffer GL_COLOR_BUFFER_BIT Depth buffer GL_DEPTH_BUFFER_BIT Accumulation buffer GL_ACCUM_BUFFER_BIT Stencil buffer GL_STENCIL_BUFFER_BIT
Mỗi giá trị trên chỉ đến một buffer tương ứng như trên bảng. Các giá trị có thể kết hợp thông qua toán tử ‘|’ (bitwise-OR). Khi muốn xóa nhiều bộ đệm đồng thời, nên dùng bitwise-OR hơn là gọi tách riêng từng lệnh glClear() một tham số vì hàm glClear() có thể thực sự xóa đồng thời nhiều buffer (chức năng này tùy thuộc phần cứng). Để định màu xóa cho mỗi buffer, ta dùng các hàm glClear*() như sau: glClearColor(), glClearDepth(), glClearAccum(), glClearStencil().
Buộc việc vẽ hoàn tất
Đối với các ứng dụng đồ họa chạy qua mạng, trong đó client chạy phần chương trình chính và hiển thị kết quả đến server, thường thì client sẽ gom nhiều lệnh vẽ vào một packet, sau đó mới gửi đến server. Nhưng làm sao để client biết được khi nào thì ảnh trên server đã vẽ xong và gửi tiếp packet khác? Do đó nó sẽ đợi đến khi nào packet đầy mới gửi tiếp. Nhưng packet có thể không bao giờ đầy vì việc vẽ bên client đã hoàn tất và như vậy server không thấy được trọn vein kết quả vẽ OpenGL cung cấp hàm glFlush() để chúng ta giải quyết vấn đề này. Lệnh này buộc client gửi packet ngay cả khi packet chưa đầy. Lệnh này không đợi cho việc vẽ hoàn tất, nó buộc việc vẽ phải bắt đầu thực hiện và do đó đảm bảo tất cả các lệnh trước đó thực hiện trong một thời gian giới hạn. Nếu máy chạy local thì ta không cần dùng lệnh này.
Một lệnh khác cũng gần giống là lệnh glFinish(), nó thực hiện chức năng giống glFlush() nhưng nó đợi phản hồi từ phần cứng đang vẽ hoặc mạng để khẳng định việc vẽ đã hoàn tất. Lệnh này hữu dụng khi ta muốn đồng bộ hóa các phần vẽ. Ví dụ ta muốn một phần nào đó vẽ hoàn tất xong thì mới thực hiện các phần khác. Nhưng lạm dụng lệnh này sẽ làm chậm chương trình vì nó phải đợi phản hồi.
Cấu trúc vertex Trong OpenGL, mọi đối tượng hình học đều được mô tả cơ bản từ các vertex. Cấu trúc này bao gồm bộ 4 số thực chỉ tọa độ trong không gian. Để chỉ định một vertex, ta dùng:
glVertex{234}{sifd}[v](TYPEcoords);
Vì sao có số 4? Vì OpenGL dùng tọa độ tương đối theo một số thứ tư. Khi ta ghi tọa độ dạng (x,y,z,w) thì sự thực là tọa độ 3 chiều (x/w,y/w,z/w). Mặc định w=1.0, z=0.
Ví dụ:
glVertex2s(2, 3); // khai báo vertex có tọa độ (2,3,0) glVertex3d(0.0, 0.0, 3.1415926535898); // toạ độ như tham số glVertex4f(2.3, 1.0, -2.2, 2.0); // tọa độ (1.15,0.5,1.1) GLdouble dvect[3] = {5.0, 9.0, 1992.0}; //khai báo 1 vecteor glVertex3dv(dvect); //khai báo vertex thông qua vector nêu trên
Trong một số máy tính, việc truyền tham số bằng vector sẽ hiệu quả hơn truyền bộ 3 số riêng lẻ (tùy thuộc phần cứng).
Để tạo một đối tượng hình học từ các vertex, ta bao khối khai báo vertex bằng hai hàm glBegin(param) và glEnd(). Tham số param đưa vào cho hàm glBegin() sẽ giúp OpenGL quyết định vẽ gì từ các vertex khai báo bên trong.
Ví dụ:
glBegin(GL_POLYGON); glVertex2f(0.0, 0.0); glVertex2f(0.0, 1.0); glVertex2f(0.5, 1.0); glVertex2f(1.0, 0.5); glVertex2f(0.5, 0.0); glEnd();
Các tham số có thể đưa vào hàm glBegin(Glenum mode)
Giá trị Ý nghĩa GL_POINTS Từng vertex được vẽ riêng GL_LINES Mỗi cặp vertex được coi như 2 đầu một đoạn thẳng GL_POLYGON Các vertex được xem như biên của một đa giác lồi GL_TRIANGLES Bộ 3 vertex được xem các đỉnh một tam giác (không lặp) GL_QUADS Bộ 4 vertex được xem như 4 đỉnh 1 đa giác (không lặp). GL_LINE_STRIP Một loạt các đoạn được nối với nhau (có lặp) GL_LINE_LOOP Như trên nhưng vertex đầu và cuối được nối với nhau (lặp vòng) GL_TRIANGLE_STRIP Bộ 3 vertex xem như các đỉnh tam giác (có lặp) GL_TRIANGLE_FAN Vertex 0 là đỉnh chung kết hợp cặp đỉnh bất kỳ tạo tam giác
[Sưu tâm và chỉnh sửa]
Share this:
- Share
10 Responses
- P.Thien, on August 27, 2011 at 2:46 pm said:
quá tuyệt vời
- Noname, on October 25, 2011 at 10:08 am said:
hay!!!!!!!!!!!!!
- thanhlikes09, on May 5, 2012 at 1:15 pm said:
dễ hiểu lắm
- hong lieu, on September 26, 2012 at 4:47 pm said:
thanks!
- Tonyboy36, on May 8, 2013 at 12:26 am said:
hiện tại e đang cần vẽ cột cờ Hà Nội bằng OpenGL, mà trong khi kiến thức thì cũng mới chỉ lờ mờ nắm được, làm sao để có thể vẽ được 1 phần, ví dụ tầng 2 một cách nhanh nhất bây giờ???
- kevinjame, on May 10, 2013 at 5:44 am said:
Để vễ một khối hình nào đó với 2D thì bạn chia hình đó thành các polygon (đa giác) , với 3D thì bạn lại chi thành các surfaces (mặt) rồi vẽ từng thành phần nhỏ này.
Chúc bạn thành công. Thân.
- Hà Việt Đức, on May 10, 2013 at 9:29 am said:
Bạn ơi mình đã làm theo nhưng nó báo lỗi đường dẫn tới thư viện glu.h là sao hả bạn mình viết mình viết trên Dev C++ bạn à.
- doan cau, on May 16, 2013 at 9:06 pm said:
glVertex3s(2, 3,7). 2 và 3 là tọa độ điểm ảnh trên màn hình vậy 7 là gì mọi người
- Nguyễn Hải Linh, on July 22, 2013 at 11:01 am said:
cám ơn…mình đang cần những thứ này
- Pham T, on March 30, 2014 at 9:05 pm said:
thanks
Leave a comment
This site uses Akismet to reduce spam. Learn how your comment data is processed.
ScanVirus
Chuyên mục
Design Góc tin học Phần cứng Phần mềm Internet - mạng Ebook Cảm nhận cuộc sống Tình Yêu Stories Nghệ thuật sống Tử Vi-Bói toán Cà phê cuối tuần Thư giản - giải trí Thư viện hình ảnh Âm nhạc Funny story Funny Clips Tổ chức quản lýSống khỏe làm đẹp
Lưu Trữ
Lưu Trữ Select Category Ban tin cong nghe (8) Cà phê cuối tuần (34) Design (1) Ebook (2) funny clip (15) Funny story (28) Khoa hoc (7) Meo vat (3) Music (82) Nghệ thuật sống (56) Organization (17) public (20) Song khoe-lam dep (21) Stories (72) Truyen co tich (2) Truyen cuoi (32) Tình Yêu và Cuộc Sống (46) Tử vi (183) Thủ Thuật Internet – Mạng (11) Thủ thuật Phần cứng (5) Thủ thuật Phần mềm (16) Thu thuat wordpress (2) Thư viện hình (3) welcome (1)-
Recent Posts
- Hướng dẫn cài đặt mã Pin cho sim điện thoại
- Pomodoro – Phương pháp tập trung
- Hướng dẫn bảo mật facebook
- Every Heart
- Top con giáp nam lăng nhăng, dễ ngoại tình nhất
Recent Comments
kevinjame on Đinh Mão Chọn vợ ha on Đinh Mão Chọn vợ kjwi on Đinh Mão Chọn vợ Hoahk on Đinh Mão Chọn vợ Hoahk on Đinh Mão Chọn vợ Lịch
January 2025
« JunS M T W T F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Thống kê
Số lượt truy cậpSố người hiện online
Liên kết
Ứng Dụng Toán Học Shop wordpress plugin
Blog at WordPress.com. WP Designer.
- Subscribe Subscribed
- kevinjame.wordpress.com Sign me up
- Already have a WordPress.com account? Log in now.
-
- kevinjame.wordpress.com
- Customize
- Subscribe Subscribed
- Sign up
- Log in
- Copy shortlink
- Report this content
- View post in Reader
- Manage subscriptions
- Collapse this bar
Từ khóa » Các Lệnh Opengl
-
Lập Trình Kỹ Thuật đồ Hoạ Với OpenGL Căn Bản Qua Ví Dụ
-
[PDF] Hướng Dẫn Lập Trình OpenGL Căn Bản
-
OpenGL Là Gì Cấu Trúc Lệnh Trong OpenGL - Tài Liệu Text - 123doc
-
Hướng Dẫn Lập Trình Opengl Căn Bản
-
C++ Bài 3: Phép Quay Và Phép Dịch Trong OpenGL
-
C++ Bài 2: Vẽ Các Hình Học Cơ Bản Trong Opengl
-
Hướng Dẫn Làm Game Với OpenGL - Phần 1 : Giới Thiệu OpenGL
-
Tìm Hiểu Về OpenGL (1/3) - Viblo
-
OpenGL Là Gì? OpenGL Có Tác Dụng Gì?
-
OpenGL – Chương 1 (II): Cú Pháp Lệnh Của OpenGL - Tâm Carbon Art
-
OpenGL – Chương 2 (II): Mô Tả Điểm, Đường Thẳng Và Đa Giác
-
[PDF] Chương 4 Một Số Công Cụ Hữu Dụng Của OpenGL
-
[PDF] Chương 2: Vẽ Các đối Tượng Hình Học Cơ Bản Trong OpenGL
-
IITHƯ VIỆN OPENGL – CÁC PHÉP BIẾN ĐỔI TRONG OPENGL