Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 2 © 2004 by Premier Press, a division of Course Technology All rights reserved No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system without written permission from Course PTR, except for the inclusion of brief quotations in a review The Premier Press logo and related trade dress are trademarks of Premier Press and may not be used without written permission DirectX is a registered trademark of Microsoft Corporation in the U S and/or other countries © Microsoft Corporation, 2002 All rights reserved All other trademarks are the property of their respective owners Important: Course PTR cannot provide software support Please contact the appropriate software manufacturer’s technical support line or Web site for assistance Course PTR and the author have attempted throughout this book to distinguish proprietary trademarks from descriptive terms by following the capitalization style used by the manufacturer Information contained in this book has been obtained by Course PTR from sources believed to be reliable However, because of the possibility of human or mechanical error by our sources, Course PTR, or others, the Publisher does not guarantee the accuracy, adequacy, or completeness of any information and is not responsible for any errors or omissions or the results obtained from use of such information Readers should be particularly aware of the fact that the Internet is an ever-changing entity Some facts may have changed since this book went to press Educational facilities, companies, and organizations interested in multiple copies or licensing of this book should contact the publisher for quantity discount information Training manuals, CD-ROMs, and portions of this book are also available individually or can be tailored for specific needs ISBN: 1-59200-349-4 Library of Congress Catalog Card Number: 2004090736 Printed in the United States of America 04 05 06 07 08 BH 10 9 8 7 6 5 4 3 2 1 Course PTR, a division of Course Technology 25 Thomson Place Boston, MA 02210 http://www courseptr com Senior Vice President, Course PTR Group: Andy Shafran Publisher: Stacy L Hiquet Senior Marketing Manager: Sarah O’Donnell Marketing Manager: Heather Hurley Manager of Editorial Services: Heather Talbot Senior Acquisitions Editor: Emi Smith Associate Marketing Manager: Kristin Eisenzopf Project/Copy Editor: Karen A Gill Technical Reviewer: Joseph Hall Retail Market Coordinator: Sarah Dubois Interior Layout: Marian Hartsough Cover Designer: Steve Deschene CD-ROM Producer: Brandon Penticuff Indexer: Sharon Shock Proofreader: Sean Medlock Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 3 Thông tin v ề tác gi ả W ENDY J ONES là ng ườ i đ ã dành tr ọ n ni ề m đ am mê c ủ a cô ấ y cho máy tính ngay t ừ l ầ n đầ u tiên cô đượ c nhìn th ấ y chi ế c máy Apple IIe khi còn h ọ c ở tr ườ ng ph ổ thông K ể t ừ khi ti ế p c ậ n v ớ i nó, cô ấ y đ ã dành m ọ i kho ả ng th ờ i gian r ả nh r ỗ i vào công vi ệ c h ọ c l ậ p trình BASIC và k ỹ thu ậ t đồ ho ạ , v ẽ nh ữ ng ý t ưở ng c ủ a mình lên gi ấ y v ẽ và th ự c hi ệ n nó trên máy tính Ngoài BASIC thì cô c ũ ng đ ã l ầ n l ượ t ti ế p c ậ n v ớ i các ngôn ng ữ khác nh ư Pascal, C, Java và C++ Ngh ề nghi ệ p c ủ a Wendy là m ộ t chu ỗ i thay đổ i nh ư chính s ự phát tri ể n c ủ a máy tính v ậ y, t ừ b ỏ môi tr ườ ng l ậ p trình DOS, cô t ự trang b ị cho mình nh ữ ng ki ế n th ứ c v ề l ậ p trình Window và sao đ ó r ấ t nhanh chóng nh ả y sang th ế gi ớ i NET M ặ c dù các công ty Internet đ em l ạ i r ấ t nhi ề u ti ề n, nh ư ng đ ó không ph ả i là t ấ t c ả , chính vì th ế Wendy đ ã m ở r ộ ng k ỹ n ă ng l ậ p trình c ủ a mình sang l ĩ nh v ự c l ậ p trình games và d ồ n t ấ t c ả s ứ c l ự c c ủ a mình cho ni ề m đ am mê đ ó Wendy đ ã hi ệ n th ự c hoá đượ c ni ề m đ am mê này khi cô nh ậ n đượ c m ộ t đề ngh ị làm vi ệ c cho công ty Atari’s Humongous Entertainment v ớ i t ư cách là m ộ t l ậ p trình viên Trong xu ố t quá trình làm vi ệ c ở Atari, cô ấ y đ ã làm vi ệ c trên c ả hai môi tr ườ ng PC và máy ch ơ i game cá nhân, b ị qu ấ n theo hàng lo ạ t nh ữ ng thách th ứ c mà công vi ệ c đ ó đ em đế n Hi ệ n t ạ i Wendy đ ang làm vi ệ c các ph ầ n m ề m dành cho PocketPC và trên nh ữ ng thi ế t b ị ch ơ i game c ầ m tay N ế u b ạ n có b ấ t c ứ góp ý hay nh ữ ng câu h ỏ i v ề quy ể n sách này, b ạ n có th ể liên h ệ v ớ i cô theo đị a ch ỉ mail: gadget2032@yahoo com Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 4 B ố c ụ c c ủ a sách L ờ i gi ớ i thi ệ u P H Ầ N I N H Ữ NG K I Ế N T H Ứ C N Ề N T Ả NG Ch ươ ng 1 DirectX là gì, t ạ i sao và làm th ế nào để s ử d ụ ng nó Ch ươ ng 2 Ví d ụ đầ u tiên s ử d ụ ng DirectX Ch ươ ng 3 Phông n ề n, khung hình, ho ạ t c ả nh P H Ầ N II N H Ữ NG T HÀNH P H Ầ N C Ơ B Ả N C Ủ A M Ộ T T H Ế G I Ớ I 3D Ch ươ ng 4 Nh ữ ng ki ế n th ứ c c ơ b ả n v ề 3D Ch ươ ng 5 Ma tr ậ n, các phép bi ế n đổ i và phép xoay trong không gian Ch ươ ng 6 B ả ng m ầ u, v ậ t li ệ u ph ủ và ánh sáng trong không gian Ch ươ ng 7 Chia nh ỏ và làm m ị n đố i t ượ ng Ch ươ ng 8 V ậ t th ể , đ i ể m chèn và các hi ệ u ứ ng P H Ầ N III N H Ữ NG K I Ế N T H Ứ C B Ổ X UNG Ch ươ ng 9 S ử d ụ ng DirectInput Ch ươ ng 10 Hi ệ u ứ ng âm thanh b ằ ng DirectSound Ch ươ ng 11 Xây d ự ng m ộ t d ự án m ẫ u P H Ầ N IV P H Ụ L Ụ C Ph ụ l ụ c A Gi ả i đ áp các bài t ậ p cu ố i các ch ươ ng Ph ụ l ụ c B Cách s ử d ụ ng CD-ROM Gi ả i thích các thu ậ t ng ữ Ch ỉ m ụ c các t ừ khoá Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 5 L Ờ I GI Ớ I THI Ệ U ậ p trình game có th ể nói là m ộ t công vi ệ c c ự c k ỳ thú v ị trong th ế gi ớ i l ậ p trình b ở i nó đ em l ạ i cho b ạ n c ơ h ộ i đượ c t ạ o ra m ộ t th ế gi ớ i ả o n ơ i mà nh ữ ng sinh v ậ t huy ề n bí, nh ữ ng vùng đấ t ch ư a h ề đượ c bi ế t đế n ngay c ả trong nh ữ ng gi ấ c m ơ Li ệ u b ạ n có th ể tìm th ấ y đ i ề u này ở m ộ t n ơ i nào khác? V ớ i nó, b ạ n có th ể đ em đế n cho m ọ i ng ườ i kh ả n ă ng tr ở thành b ấ t c ứ m ộ t nhân v ậ t nào, m ộ t con ng ườ i nào mà h ọ mong mu ố n và h ơ n c ả là m ộ t môi tr ườ ng để h ọ có th ể s ố ng theo đ úng s ở thích C ũ ng chính b ở i th ế mà ngành công nghi ệ p Game đ ã phát tri ể n không ng ừ ng, v ượ t qua m ọ i gi ớ i h ạ n và kéo theo nó là phát tri ể n c ủ a công ngh ệ ph ụ c v ụ cho nó Ch ỉ vài n ă m tr ướ c đ ây, có l ẽ ở c ấ p độ ng ườ i s ử d ụ ng còn ch ư a h ề bi ế t đế n các thi ế t b ị th ể hi ệ n hình ả nh 3D ngo ạ i tr ừ các máy tr ạ m đắ t ti ề n SGI d ự a trên n ề n t ả ng OpenGL T ạ i th ờ i đ i ể m đ ó có th ể nói OpenGL m ớ i ch ỉ đ ang ở th ờ i k ỳ phôi thai Đế n khi các máy tính cá nhân PC đ ã đượ c ph ổ bi ế n h ơ n, OpenGL đ ã m ở r ộ ng n ề n t ả ng c ủ a mình và đ i ề u đ ó th ự c s ự đ ã đ em đế n m ộ t cú huých m ạ nh đầ u tiên trong l ị ch s ử phát tri ể n game c ũ ng nh ư nh ữ ng ứ ng d ụ ng mô ph ỏ ng không gian 3D T ạ i th ờ i đ i ể m đ ó, Windows v ẫ n ch ư a ph ả i là n ề n t ả ng t ố t nh ấ t để phát tri ể n games, tuy nhiên h ọ c ũ ng r ấ t nhanh chóng nh ậ n ra nh ữ ng l ợ i nhu ậ n t ừ ngành công nghi ệ p này Chính vì th ế phiên b ả n DirectX đầ u tiên c ũ ng s ớ m đượ c Microsoft tung ra Tuy nhiên trong th ờ i gian đầ u này thì s ự ph ổ bi ế n c ủ a n ề n t ả ng này v ẫ n còn r ấ t h ạ n ch ế do OpenGL đ ã đượ c th ừ a nh ậ n là ph ươ ng th ứ c chu ẩ n để phát tri ể n đồ ho ạ 3D trên môi tr ườ ng Windows Ngày nay, h ầ u h ế t các game phát tri ể n trên PC bán trên th ị tr ườ ng đề u đượ c xây d ự ng trên n ề n t ả ng DirectX, nó đ ã giúp cho nh ữ ng game th ủ có th ể t ậ n h ưở ng đượ c m ộ t công ngh ệ đồ ho ạ tiên ti ế n và hi ệ n th ự c nh ấ t v ề th ế gi ớ i Nh ữ ng c ầ n ph ả i có nh ữ ng gì để ti ế p c ậ n công ngh ệ này? Nh ữ ng kinh nghi ệ m và ki ế n th ứ c v ề l ậ p trình C++ c ũ ng nh ư lý thuy ế t l ậ p trình h ướ ng đố i t ượ ng (OOP) s ẽ giúp b ạ n có th ể hi ể u đượ c t ấ t c ả nh ữ ng bài gi ả ng đượ c trình bày trong quy ể n sách này Ngoài ra b ạ n c ũ ng nên trang b ị thêm cho mình m ộ t vài k ỹ n ă ng v ề toán h ọ c và hình ho ạ , tuy nhiên h ầ u h ế t nh ữ ng khái ni ệ m toán h ọ c s ử d ụ ng c ũ ng s ẽ đượ c gi ả i thích chi ti ế t Nh ữ ng hi ể u bi ế t v ề Visual Studio NET hay b ấ t k ỳ s ả n ph ẩ m nào trong b ộ Visual Studio c ũ ng s ẽ r ấ t là h ữ u ích L Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 6 Làm th ế nào để s ử d ụ ng quy ể n sách này hi ệ u qu ả ? Quy ể n sách này đượ c chia làm 3 ph ầ n chính Ph ầ n đầ u tiên s ẽ mô t ả c ở b ả n v ề DirectX, làm th ế nào để thi ế t l ậ p và ch ạ y m ộ t ứ ng d ụ ng s ử d ụ ng n ề n t ả ng này Ph ầ n th ứ hai s ẽ cung c ấ p cho b ạ n nh ữ ng khái ni ệ m c ơ b ả n ph ụ c v ụ quá trình thi ế t k ế và xây d ự ng m ộ t môi tr ườ ng 3D, kèm theo đ ó là gi ớ i thi ệ u nh ữ ng khái ni ệ m v ề 3D và Direct3D Ph ầ n 3 và ph ầ n cu ố i s ẽ xoay quanh các ki ế n th ứ c khác c ủ a n ề n t ả ng DirectX nh ư x ử lý âm thanh thông qua DirectSound, l ấ y các thông tin đầ u vào t ừ ng ườ i dùng thông qua DirectInput Quy ể n sách k ế t thúc b ằ ng m ộ t d ự án minh ho ạ nh ỏ v ớ i hi v ọ ng đ em đế n cho b ạ n m ộ t cái nhìn toàn c ả nh h ơ n v ề t ấ t các các ki ế n th ứ c chúng ta đ ã h ọ c và áp d ụ ng c ụ th ể chúng nh ư th ế nào N ế u b ạ n đ ã t ừ ng làm quen v ớ i môi tr ườ ng DirectX và c ũ ng đ ã t ừ ng vi ế t m ộ t vài ứ ng d ụ ng s ử d ụ ng n ề n t ả ng này, b ạ n có th ể b ỏ qua ph ầ n m ộ t Tôi ngh ĩ r ằ ng b ấ t k ỳ ai khi m ớ i ti ế p c ậ n v ớ i môi tr ườ ng l ậ p trình game và DirectX nên đọ c quy ể n sách này m ộ t cách tu ầ n t ự để có th ể hi ể u h ế t đượ c nh ữ ng kh ả n ă ng mà DirectX có th ể đ em l ạ i Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 7 Ch ươ ng 1 DirectX là gì, t ạ i sao và làm th ế nào để s ử d ụ ng nó Ch ươ ng 2 Ví d ụ đầ u tiên s ử d ụ ng DirectX Ch ươ ng 3 Phông n ề n, khung hình, ho ạ t c ả nh PH Ầ N I KI Ế N TH Ứ C N Ề N T Ả NG Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 8 DirectX là gì, T ạ i sao và Làm th ế nào để s ử d ụ ng nó irectX v ề th ự c ch ấ t là m ộ t h ệ th ố ng các giao di ệ n l ậ p trình ứ ng d ụ ng (API) ph ụ c v ụ cho quá trình phát tri ể n các game trên n ề n t ả ng h ệ đ i ề u hành Windows N ế u nh ư t ạ i th ờ i đ i ể m m ộ t vài n ă m tr ướ c, nh ữ ng ng ườ i phát tri ể n game th ườ ng ph ả i v ậ t l ộ n v ớ i nh ữ ng v ấ n đề n ả y sinh t ừ s ự không t ươ ng thích c ủ a ph ầ n c ứ ng - không th ể phát tri ể n nh ữ ng s ả n ph ẩ m game để t ấ t c ả m ọ i ng ườ i đề u có th ể t ậ n h ưở ng đượ c nh ữ ng tính n ă ng c ủ a game đ ó Thì ngày nay, Microsoft đ ã đ em t ớ i m ộ t n ề n t ả ng DirectX Nó cung c ấ p cho nh ữ ng ng ườ i phát tri ể n game m ộ t ph ươ ng th ứ c đơ n nh ấ t, m ộ t n ề n t ả ng th ư vi ệ n API “s ạ ch” ( đ ã đượ c chu ẩ n hoá) để h ọ có th ể vi ế t và ch ạ y trên h ầ u h ế t các n ề n t ả ng mà không c ầ n ph ả i lo ng ạ i nhi ề u v ề ph ầ n c ứ ng c ủ a PC Ch ỉ m ộ t vài n ă m sau khi phiên b ả n DirectX đượ c đề xu ấ t, s ố l ượ ng game đượ c phát tri ể n trên n ề n t ả ng Windows đ ã t ă ng lên m ộ t cách nhanh chóng Trong ch ươ ng này, chúng ta s ẽ đề c ậ p t ớ i các v ấ n đề : DirectX là gì v ậ y T ạ i sao nó l ạ i h ữ u d ụ ng đế n th ế Thành ph ầ n nào đ ã xây d ự ng nên n ề n t ả ng DirectX API DirectX là gì? DirectX là m ộ t t ậ p h ợ p th ư vi ệ n các hàm API đượ c Microsoft thi ế t k ế để cung c ấ p cho nh ữ ng ng ườ i phát tri ể n game m ộ t giao di ệ n l ậ p trình c ấ p th ấ p để liên k ế t t ớ i các ph ầ n c ứ ng c ủ a PC ch ạ y trên h ệ đ i ề u hành Windows Phiên b ả n hi ệ n t ạ i c ủ a nó là 9 0(c), m ỗ i m ộ t đố i t ượ ng API c ủ a DirectX cung c ấ p m ộ t kh ả n ă ng truy c ậ p khác nhau t ớ i t ừ ng lo ạ i ph ầ n c ứ ng c ủ a h ệ th ố ng, nó bao g ồ m h ệ th ố ng đồ ho ạ , âm thanh và k ế t n ố i m ạ ng, t ấ t c ả chúng đề u đượ c xây d ự ng trên m ộ t giao di ệ n chu ẩ n Giao di ệ n này cho phép nh ữ ng ng ườ i phát tri ể n có th ể vi ế t nh ữ ng game c ủ a h ọ b ằ ng cách s ử d ụ ng t ậ p h ợ p cách hàm này l ạ i v ớ i nhau mà không c ầ n ph ả i quan tâm nhi ề u t ớ i ph ầ n c ứ ng mà nó s ẽ đượ c s ử d ụ ng D CH ƯƠ NG 1 Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 9 Nh ữ ng thành ph ầ n t ạ o nên DirectX H ệ th ố ng th ư vi ệ n API c ủ a DirectX đượ c phân chia ra làm nhi ề u thành ph ầ n nh ỏ , m ỗ i thành ph ầ n này đả m nhi ệ m nh ữ ng nhi ệ m v ụ khác nhau c ủ a h ệ th ố ng Chúng có th ể đượ c s ử d ụ ng hoàn toàn độ c l ậ p v ớ i nhau, b ạ n có th ể ch ỉ c ầ n thêm nh ữ ng thành ph ầ n nào mà game c ủ a b ạ n c ầ n t ớ i mà thôi Sau đ ây là danh sách các thành ph ầ n đ ó: DirectX Graphic Thành ph ầ n này đả m nhi ệ m t ấ t c ả các ch ứ c n ă ng k ế t xu ấ t đồ ho ạ c ủ a h ệ th ố ng Nó cung c ấ p nh ữ ng hàm API để ng ườ i dùng có th ể qu ả n lý quá trình v ẽ 2D c ũ ng nh ư 3D, ngoài ra nó c ũ ng h ỗ tr ợ c ả quá trình kh ở i t ạ o và xác l ậ p độ phân gi ả i cho game c ủ a b ạ n DirectInput T ấ t c ả nh ữ ng gì ng ườ i dùng nh ậ p vào s ẽ đượ c qu ả n lý b ở i các hàm API trong thành ph ầ n này Nó bao g ồ m kh ả n ă ng h ỗ tr ợ các thi ế t b ị nh ư bàn phím, chu ộ t, gamepad, joystick V ớ i phiên b ả n m ớ i nh ấ t hi ệ n nay c ũ ng đ ã h ỗ tr ợ c ả các thi ế t b ị t ươ ng tác th ự c (force-feedback) nh ư c ầ n lái, chân ga cho các game đ ua t ố c độ DirectPlay Kh ả n ă ng k ế t n ố i m ạ ng đượ c cung c ấ p cho nh ữ ng h ệ th ố ng game c ủ a b ạ n thông qua thành ph ầ n DirectPlay này Nh ữ ng hàm ph ụ c v ụ k ế t n ố i này đ em đế n cho b ạ n kh ả n ă ng phát tri ể n ứ ng d ụ ng có th ể giao ti ế p v ớ i b ấ t k ỳ m ộ t máy nào khác, cho phép không ch ỉ m ộ t ng ườ i có th ể ch ơ i game đ ó DirectPlay đ em đế n cho b ạ n m ộ t giao di ệ n l ậ p trình c ấ p cao nh ằ m giúp b ạ n tránh kh ỏ i nh ữ ng v ấ n đề khó kh ă n trong quá trình l ậ p trình ứ ng d ụ ng liên k ế t m ạ ng DirectSound N ế u b ạ n mu ố n chèn thêm các hi ệ u ứ ng âm thanh ho ặ c nh ạ c n ề n, b ạ n s ẽ c ầ n ph ả i s ử d ụ ng t ớ i nh ữ ng hàm API do thành ph ầ n này cung c ấ p Ch ứ c n ă ng c ủ a DirectSound là cho phép b ạ n có th ể t ả i và ch ơ i m ộ t ho ặ c nhi ề u file nh ạ c d ạ ng WAV c ũ ng nh ư toàn b ộ kh ả n ă ng đ i ề u khi ể n quá trình ch ơ i nh ạ c đ ó DirectMusic Thành ph ầ n này mang đế n cho b ạ n kh ả n ă ng t ạ o các b ả n nh ạ c “ độ ng” (t ạ i th ờ i đ i ể m ch ươ ng trình ch ạ y, không c ầ n ph ả i l ư u tr ữ trong c ơ s ở d ữ li ệ u c ủ a game) Nó có kh ả n ă ng h ỗ tr ợ h ầ u h ế t các ch ứ c n ă ng chính c ủ a m ộ t ph ầ n m ề m ch ơ i nh ạ c midi nh ư t ự ch ạ y l ạ i theo m ộ t qui trình đ ã xác l ậ p, bi ế n đổ i âm l ượ ng để phù h ợ p v ớ i ho ạ t c ả nh trong game, thay đổ i nh ị p c ủ a giai đ i ệ u và nhi ề u ch ứ c n ă ng cao c ấ p khác DirectShow B ạ n có th ể c ắ t m ộ t ho ạ t c ả nh phim ho ặ c l ồ ng ghép âm thanh và game c ủ a mình thông qua thành ph ầ n này AVI, MP3, MPEG và ANF ch ỉ là m ộ t trong s ố r ấ t nhi ề u các lo ạ i đị nh d ạ ng file mà DirectShow h ỗ tr ợ V ớ i DirectShow, b ạ n s ẽ không ph ả i t ả i t ấ t c ả các đố i t ượ ng file này lên b ộ nh ớ , thay vào đ ó là truy c ậ p tr ự c ti ế p d ữ li ệ u trên ổ c ứ ng ho ặ c CD-ROM DirectSetup Sau khi game c ủ a b ạ n đ ã hoàn thành, b ạ n s ẽ mu ố n phát hành DirectSetup cung c ấ p cho b ạ n nh ữ ng ch ứ c n ă ng giúp ứ ng d ụ ng có th ể t ự độ ng cài đặ t nh ữ ng phiên b ả n DirectX m ớ i nh ấ t lên h ệ th ố ng c ủ a ng ườ i s ử d ụ ng Chú ý: H ệ th ố ng đồ ho ạ DirectX bao g ồ m toàn b ộ các ch ứ c n ă ng c ủ a c ả DirectDraw và Direct3D Phiên b ả n DirectX 7 0 là phiên b ả n cu ố i cùng phân tách hai thành ph ầ n này thành hai đố i t ượ ng độ c l ậ p Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 10 T ạ i sao DirectX l ạ i c ầ n thi ế t? Tr ướ c khi h ệ đ i ề u hành Windows đượ c phát hành, các l ậ p trình viên ch ủ y ế u phát tri ể n các game trên n ề n t ả ng h ệ đ i ề u hành DOS Đấ y là m ộ t h ệ đ i ề u hành đơ n nhi ệ m, không h ỗ tr ợ giao di ệ n đồ ho ạ (non-GUI) và cách duy nh ấ t để th ự c hi ệ n các thao tác đồ ho ạ này là truy c ậ p tr ự c ti ế p vào ph ầ n c ứ ng và th ự c thi chúng Đ i ề u này đ em đế n c ả nh ữ ng l ợ i ích c ũ ng nh ư nh ữ ng v ấ n đề khó kh ă n c ầ n gi ả i quy ế t Ta có th ể ví d ụ ra, b ở i vì s ử d ụ ng cách truy c ậ p tr ự c ti ế p gi ữ a mã game và ph ầ n c ứ ng, l ậ p trình viên có th ể có đượ c toàn b ộ s ứ c m ạ nh c ũ ng nh ư quy ề n đ i ề u khi ể n c ủ a h ệ th ố ng, đ i ề u nay đ em đế n kh ả n ă ng ho ạ t độ ng v ớ i hi ệ u su ấ t và ch ấ t l ượ ng cao c ủ a h ệ th ố ng game Tuy nhiên, m ặ t trái c ủ a v ấ n đề là nh ữ ng nhà phát tri ể n game này s ẽ ph ả i t ự xây d ự ng cho mình nh ữ ng th ư vi ệ n h ỗ tr ợ cho t ừ ng lo ạ i thi ế t b ị ph ầ n c ứ ng n ế u h ọ mu ố n game có kh ả n ă ng h ỗ tr ợ Nó bao g ồ m ngay c ả nh ữ ng thi ế t b ị r ấ t ph ổ thông nh ư card âm thanh và đồ ho ạ T ạ i th ờ i đ i ể m đ ó, không ph ả i t ấ t c ả các thi ế t b ị đề u tuân theo m ộ t chu ẩ n nh ấ t đị nh Chính đ i ề u này đ ã làm cho quá trình thao tác trên màn hình đồ ho ạ c ự c k ỳ khó kh ă n đặ c bi ệ t khi b ạ n mu ố n phát triên các game có độ phân gi ả i trên 320 x 240 pixel Ch ỉ vi ệ c vi ế t các game s ử d ụ ng độ phân gi ả i 640 x 480 c ũ ng đ ã khi ế n các l ậ p trình viên ph ả i truy c ậ p tr ự c ti ế p vào b ộ nh ớ video và t ự mình qu ả n lý toàn b ộ quá trình c ậ p nh ậ t các thanh ghi s ử lý c ủ a card đồ ho ạ đ ó Và h ọ đ ã ngh ĩ r ằ ng đ ã đế n lúc c ầ n ph ả i tìm ki ế m m ộ t cách đ i khác đơ n gi ả n và hi ệ u qu ả h ơ n Khi mà phiên b ả n Windows 3 1 chính th ứ c phát hành, nh ữ ng v ấ n đề đ ó v ẫ n ch ư a h ề đượ c gi ả i quy ế t H ơ n th ế , b ở i vì Windows ch ạ y trên n ề n DOS nên chính nó vô tình đ ã làm gi ả m đ i tài nguyên h ệ th ố ng giành cho các game và nó c ũ ng đ ã lo ạ i b ỏ toàn b ộ kh ả n ă ng truy c ậ p tr ự c ti ế p mà nh ữ ng nhà phát tri ể n game v ẫ n hay dùng tr ướ c đ ó t ừ r ấ t lâu r ồ i V ậ y là h ầ u h ế t các game h ỗ tr ợ Window t ạ i th ờ i đ i ể m đ ó ch ủ y ế u là nh ữ ng game đ ánh bài và các game đơ n gi ả n khác Trong khi đ ó các game hành độ ng v ẫ n ti ế p t ụ c đượ c phát tri ể n trên n ề n t ả ng DOS M ặ c dù tr ướ c đ ó, Microsoft đ ã c ố g ắ ng cung c ấ p cho ng ườ i phát tri ể n m ộ t cách cách truy c ậ p nhanh h ơ n t ớ i các thi ế t b ị đồ ho ạ thông qua h ệ th ố ng th ư vi ệ n có tên WinG Nó là ti ề n thân c ủ a DirectX và ch ỉ h ỗ tr ợ r ấ t ít ch ứ c n ă ng WinG th ự c s ự là m ộ t ý t ưở ng hay, tuy nhiên nó v ẫ n ch ư a th ể đ em t ớ i cho nh ữ ng ng ườ i phát tri ể n kh ả n ă ng truy c ậ p h ệ th ố ng t ố t h ơ n so v ớ i nh ữ ng cách mà h ọ v ẫ n thích làm trên n ề n h ệ đ i ề u hành DOS Chính vì th ế , Microsoft đ ã có nh ữ ng c ả i ti ế n và b ổ xung thêm khá nhi ề u ch ứ c n ă ng trong phiên b ả n đầ u tiên DirectX, hay còn đượ c bi ế t t ớ i v ớ i cái tên GameSDK (b ộ công c ụ phát tri ể n game) DirectX đ ã cung c ấ p cho các l ậ p trình viên m ộ t th ư vi ệ n độ c l ậ p để phát tri ể n, nó là l ớ p trung gian gi ữ a game và các ph ầ n c ứ ng c ủ a PC Lúc này thì quá trình thao tác đồ ho ạ đ ã tr ở nên d ễ dàng h ơ n r ấ t nhi ề u Tuy nhiên phiên b ả n đầ u tiên c ủ a DirectX v ẫ n ch ư a h ỗ tr ợ đượ c nhi ề u d ạ ng ph ầ n c ứ ng khác nhau, nh ư ng đ ó th ự c s ự đ ã là m ộ t thay đổ i r ấ t có ý ngh ĩ a và th ự c s ự đ áp ứ ng đượ c mong mu ố n c ủ a nh ữ ng ng ườ i phát tri ể n game Ch ỉ m ộ t vài n ă m sau, h ọ đ ã phát hành phiên b ả n DirectX 9, m ỗ i m ộ t phiên b ả n đề u đ ã đượ c b ổ xung và t ă ng kh ả n ă ng h ỗ tr ợ nh ữ ng công ngh ệ m ớ i nh ư k ế t n ố i m ạ ng, k ế t xu ấ t âm thanh, hình ả nh và h ỗ tr ợ r ấ t nhi ề u d ạ ng thi ế t b ị đầ u vào m ớ i
Trang 2Press and may not be used without written permission
DirectX is a registered trademark of Microsoft Corporation in the U.S and/or
other countries
© Microsoft Corporation, 2002 All rights reserved
All other trademarks are the property of their respective owners
Important: Course PTR cannot provide software support Please contact the
appropriate software manufacturer’s technical support line or Web site for
assistance
Course PTR and the author have attempted throughout this book to
distinguish proprietary trademarks from descriptive terms by following the
capitalization style used by the manufacturer
Information contained in this book has been obtained by Course PTR from
sources believed to be reliable However, because of the possibility of human
or mechanical error by our sources, Course PTR, or others, the Publisher
does not guarantee the accuracy, adequacy, or completeness of any
information and is not responsible for any errors or omissions or the results
obtained from use of such information Readers should be particularly aware
of the fact that the Internet is an ever-changing entity Some facts may have
changed since this book went to press
Educational facilities, companies, and organizations interested in multiple
copies or licensing of this book should contact the publisher for quantity
discount information Training manuals, CD-ROMs, and portions of this book
are also available individually or can be tailored for specific needs
ISBN: 1-59200-349-4
Library of Congress Catalog Card Number: 2004090736
Printed in the United States of America
04 05 06 07 08 BH 10 9 8 7 6 5 4 3 2 1
Course PTR, a division of Course Technology
25 Thomson Place Boston, MA 02210 http://www.courseptr.com
Marketing Manager:
Heather Hurley
Manager of Editorial Services:
Heather Talbot
Senior Acquisitions Editor:
Emi Smith
Associate Marketing Manager:
Kristin Eisenzopf
Project/Copy Editor:
Karen A Gill
Technical Reviewer:
Joseph Hall
Retail Market Coordinator:
Sarah Dubois
Interior Layout:
Marian Hartsough
Cover Designer:
Steve Deschene
CD-ROM Producer:
Brandon Penticuff
Indexer:
Sharon Shock
Proofreader:
Sean Medlock
Trang 3Thông tin về tác giả
W ENDY J ONES là người đã dành trọn niềm đam mê của cô ấy cho máy tính ngay từ lần đầu tiên cô được nhìn thấy chiếc máy Apple IIe khi còn học ở trường phổ thông Kể từ khi tiếp cận với nó, cô ấy đã dành mọi khoảng thời gian rảnh rỗi vào công việc học lập trình BASIC và kỹ thuật đồ hoạ, vẽ những ý tưởng của mình lên giấy vẽ và thực hiện nó trên máy tính Ngoài BASIC thì cô cũng đã lần lượt tiếp cận với các ngôn ngữ khác như Pascal, C, Java và C++
Nghề nghiệp của Wendy là một chuỗi thay đổi như chính sự phát triển của máy tính vậy,
từ bỏ môi trường lập trình DOS, cô tự trang bị cho mình những kiến thức về lập trình Window và sao đó rất nhanh chóng nhảy sang thế giới NET Mặc dù các công ty Internet đem lại rất nhiều tiền, nhưng đó không phải là tất cả, chính vì thế Wendy đã mở rộng kỹ năng lập trình của mình sang lĩnh vực lập trình games và dồn tất cả sức lực của mình cho niềm đam mê đó
Wendy đã hiện thực hoá được niềm đam mê này khi cô nhận được một đề nghị làm việc cho công ty Atari’s Humongous Entertainment với tư cách là một lập trình viên Trong xuốt quá trình làm việc ở Atari, cô ấy đã làm việc trên cả hai môi trường PC và máy chơi game cá nhân, bị quấn theo hàng loạt những thách thức mà công việc đó đem đến
Hiện tại Wendy đang làm việc các phần mềm dành cho PocketPC và trên những thiết bị chơi game cầm tay
Nếu bạn có bất cứ góp ý hay những câu hỏi về quyển sách này, bạn có thể liên hệ với cô theo địa chỉ mail: gadget2032@yahoo.com
Trang 4Bố cục của sách
Lời giới thiệu
PHẦN I NHỮNG KIẾN THỨC NỀN TẢNG
Chương 1 DirectX là gì, tại sao và làm thế nào để sử dụng nó
Chương 2 Ví dụ đầu tiên sử dụng DirectX
Chương 3 Phông nền, khung hình, hoạt cảnh
PHẦN II NHỮNG THÀNH PHẦN CƠ BẢN CỦA MỘT THẾ GIỚI 3D
Chương 4 Những kiến thức cơ bản về 3D
Chương 5 Ma trận, các phép biến đổi và phép xoay trong không gian
Chương 6 Bảng mầu, vật liệu phủ và ánh sáng trong không gian
Chương 7 Chia nhỏ và làm mịn đối tượng
Chương 8 Vật thể, điểm chèn và các hiệu ứng
PHẦN III NHỮNG KIẾN THỨC BỔ XUNG
Chương 9 Sử dụng DirectInput
Chương 10 Hiệu ứng âm thanh bằng DirectSound
Chương 11 Xây dựng một dự án mẫu
PHẦN IV PHỤ LỤC
Phụ lục A Giải đáp các bài tập cuối các chương
Trang 5ập trình game có thể nói là một công việc cực kỳ thú vị trong thế giới lập trình bởi
nó đem lại cho bạn cơ hội được tạo ra một thế giới ảo nơi mà những sinh vật huyền bí, những vùng đất chưa hề được biết đến ngay cả trong những giấc mơ Liệu bạn có thể tìm thấy điều này ở một nơi nào khác? Với nó, bạn có thể đem đến cho mọi người khả năng trở thành bất cứ một nhân vật nào, một con người nào mà họ mong muốn và hơn cả là một môi trường để họ có thể sống theo đúng sở thích
Cũng chính bởi thế mà ngành công nghiệp Game đã phát triển không ngừng, vượt qua mọi giới hạn và kéo theo nó là phát triển của công nghệ phục vụ cho nó Chỉ vài năm trước đây, có lẽ ở cấp độ người sử dụng còn chưa hề biết đến các thiết bị thể hiện hình ảnh 3D ngoại trừ các máy trạm đắt tiền SGI dựa trên nền tảng OpenGL Tại thời điểm đó
có thể nói OpenGL mới chỉ đang ở thời kỳ phôi thai Đến khi các máy tính cá nhân PC đã được phổ biến hơn, OpenGL đã mở rộng nền tảng của mình và điều đó thực sự đã đem đến một cú huých mạnh đầu tiên trong lịch sử phát triển game cũng như những ứng dụng
mô phỏng không gian 3D
Tại thời điểm đó, Windows vẫn chưa phải là nền tảng tốt nhất để phát triển games, tuy nhiên họ cũng rất nhanh chóng nhận ra những lợi nhuận từ ngành công nghiệp này Chính
vì thế phiên bản DirectX đầu tiên cũng sớm được Microsoft tung ra Tuy nhiên trong thời gian đầu này thì sự phổ biến của nền tảng này vẫn còn rất hạn chế do OpenGL đã được thừa nhận là phương thức chuẩn để phát triển đồ hoạ 3D trên môi trường Windows Ngày nay, hầu hết các game phát triển trên PC bán trên thị trường đều được xây dựng trên nền tảng DirectX, nó đã giúp cho những game thủ có thể tận hưởng được một công nghệ đồ hoạ tiên tiến và hiện thực nhất về thế giới
Những cần phải có những gì để tiếp cận công nghệ này?
Những kinh nghiệm và kiến thức về lập trình C++ cũng như lý thuyết lập trình hướng đối tượng (OOP) sẽ giúp bạn có thể hiểu được tất cả những bài giảng được trình bày trong quyển sách này Ngoài ra bạn cũng nên trang bị thêm cho mình một vài kỹ năng về toán học và hình hoạ, tuy nhiên hầu hết những khái niệm toán học sử dụng cũng sẽ được giải thích chi tiết Những hiểu biết về Visual Studio NET hay bất kỳ sản phẩm nào trong bộ Visual Studio cũng sẽ rất là hữu ích
L
Trang 6phần cuối sẽ xoay quanh các kiến thức khác của nền tảng DirectX như xử lý âm thanh thông qua DirectSound, lấy các thông tin đầu vào từ người dùng thông qua DirectInput Quyển sách kết thúc bằng một dự án minh hoạ nhỏ với hi vọng đem đến cho bạn một cái nhìn toàn cảnh hơn về tất các các kiến thức chúng ta đã học và áp dụng cụ thể chúng như thế nào
Nếu bạn đã từng làm quen với môi trường DirectX và cũng đã từng viết một vài ứng dụng
sử dụng nền tảng này, bạn có thể bỏ qua phần một Tôi nghĩ rằng bất kỳ ai khi mới tiếp cận với môi trường lập trình game và DirectX nên đọc quyển sách này một cách tuần tự
để có thể hiểu hết được những khả năng mà DirectX có thể đem lại
Trang 7Chương 1
DirectX là gì, tại sao và làm thế nào để sử dụng nó
Chương 2
Ví dụ đầu tiên sử dụng DirectX
Chương 3
Phông nền, khung hình, hoạt cảnh
PHẦN I KIẾN THỨC NỀN TẢNG
Trang 8DirectX là gì, Tại sao và
Làm thế nào để sử dụng nó
irectX về thực chất là một hệ thống các giao diện lập trình ứng dụng (API) phục
vụ cho quá trình phát triển các game trên nền tảng hệ điều hành Windows Nếu như tại thời điểm một vài năm trước, những người phát triển game thường phải vật lộn với những vấn đề nảy sinh từ sự không tương thích của phần cứng - không thể phát triển những sản phẩm game để tất cả mọi người đều có thể tận hưởng được những tính năng của game đó Thì ngày nay, Microsoft đã đem tới một nền tảng DirectX Nó cung cấp cho những người phát triển game một phương thức đơn nhất, một nền tảng thư viện API “sạch” (đã được chuẩn hoá) để họ có thể viết và chạy trên hầu hết các nền tảng
mà không cần phải lo ngại nhiều về phần cứng của PC Chỉ một vài năm sau khi phiên bản DirectX được đề xuất, số lượng game được phát triển trên nền tảng Windows đã tăng lên một cách nhanh chóng
Trong chương này, chúng ta sẽ đề cập tới các vấn đề:
DirectX là gì vậy
Tại sao nó lại hữu dụng đến thế
Thành phần nào đã xây dựng nên nền tảng DirectX API
DirectX là gì?
D
Trang 9Những thành phần tạo nên DirectX
Hệ thống thư viện API của DirectX được phân chia ra làm nhiều thành phần nhỏ, mỗi thành phần này đảm nhiệm những nhiệm vụ khác nhau của hệ thống Chúng có thể được
sử dụng hoàn toàn độc lập với nhau, bạn có thể chỉ cần thêm những thành phần nào mà game của bạn cần tới mà thôi Sau đây là danh sách các thành phần đó:
DirectX Graphic Thành phần này đảm nhiệm tất cả các chức năng kết xuất đồ hoạ của hệ thống Nó cung cấp những hàm API để người dùng có thể quản lý quá trình vẽ 2D cũng như 3D, ngoài ra nó cũng hỗ trợ cả quá trình khởi tạo và xác lập
độ phân giải cho game của bạn
DirectInput Tất cả những gì người dùng nhập vào sẽ được quản lý bởi các hàm API trong thành phần này Nó bao gồm khả năng hỗ trợ các thiết bị như bàn phím, chuột, gamepad, joystick Với phiên bản mới nhất hiện nay cũng đã hỗ trợ cả các thiết bị tương tác thực (force-feedback) như cần lái, chân ga cho các game đua tốc
độ
DirectPlay Khả năng kết nối mạng được cung cấp cho những hệ thống game của bạn thông qua thành phần DirectPlay này Những hàm phục vụ kết nối này đem đến cho bạn khả năng phát triển ứng dụng có thể giao tiếp với bất kỳ một máy nào khác, cho phép không chỉ một người có thể chơi game đó DirectPlay đem đến cho bạn một giao diện lập trình cấp cao nhằm giúp bạn tránh khỏi những vấn đề khó
khăn trong quá trình lập trình ứng dụng liên kết mạng
DirectSound Nếu bạn muốn chèn thêm các hiệu ứng âm thanh hoặc nhạc nền, bạn sẽ cần phải sử dụng tới những hàm API do thành phần này cung cấp Chức năng của DirectSound là cho phép bạn có thể tải và chơi một hoặc nhiều file nhạc
dạng WAV cũng như toàn bộ khả năng điều khiển quá trình chơi nhạc đó
DirectMusic Thành phần này mang đến cho bạn khả năng tạo các bản nhạc
“động” (tại thời điểm chương trình chạy, không cần phải lưu trữ trong cơ sở dữ liệu của game) Nó có khả năng hỗ trợ hầu hết các chức năng chính của một phần mềm chơi nhạc midi như tự chạy lại theo một qui trình đã xác lập, biến đổi âm lượng để phù hợp với hoạt cảnh trong game, thay đổi nhịp của giai điệu và nhiều
chức năng cao cấp khác
DirectShow Bạn có thể cắt một hoạt cảnh phim hoặc lồng ghép âm thanh và game của mình thông qua thành phần này AVI, MP3, MPEG và ANF chỉ là một trong
số rất nhiều các loại định dạng file mà DirectShow hỗ trợ Với DirectShow, bạn sẽ không phải tải tất cả các đối tượng file này lên bộ nhớ, thay vào đó là truy cập trực
tiếp dữ liệu trên ổ cứng hoặc CD-ROM
DirectSetup Sau khi game của bạn đã hoàn thành, bạn sẽ muốn phát hành DirectSetup cung cấp cho bạn những chức năng giúp ứng dụng có thể tự động cài
đặt những phiên bản DirectX mới nhất lên hệ thống của người sử dụng
Chú ý:
Hệ thống đồ hoạ DirectX bao gồm toàn bộ các chức năng của cả DirectDraw và Direct3D Phiên bản DirectX 7.0 là phiên bản cuối cùng phân tách hai thành phần này thành hai đối tượng độc lập.
Trang 10cũng như những vấn đề khó khăn cần giải quyết Ta có thể ví dụ ra, bởi vì sử dụng cách truy cập trực tiếp giữa mã game và phần cứng, lập trình viên có thể có được toàn bộ sức mạnh cũng như quyền điều khiển của hệ thống, điều nay đem đến khả năng hoạt động với hiệu suất và chất lượng cao của hệ thống game Tuy nhiên, mặt trái của vấn đề là những nhà phát triển game này sẽ phải tự xây dựng cho mình những thư viện hỗ trợ cho từng loại thiết bị phần cứng nếu họ muốn game có khả năng hỗ trợ Nó bao gồm ngay cả những thiết bị rất phổ thông như card âm thanh và đồ hoạ
Tại thời điểm đó, không phải tất cả các thiết bị đều tuân theo một chuẩn nhất định Chính điều này đã làm cho quá trình thao tác trên màn hình đồ hoạ cực kỳ khó khăn đặc biệt khi bạn muốn phát triên các game có độ phân giải trên 320 x 240 pixel Chỉ việc viết các game sử dụng độ phân giải 640 x 480 cũng đã khiến các lập trình viên phải truy cập trực tiếp vào bộ nhớ video và tự mình quản lý toàn bộ quá trình cập nhật các thanh ghi sử lý của card đồ hoạ đó Và họ đã nghĩ rằng đã đến lúc cần phải tìm kiếm một cách đi khác đơn giản và hiệu quả hơn
Khi mà phiên bản Windows 3.1 chính thức phát hành, những vấn đề đó vẫn chưa hề được giải quyết Hơn thế, bởi vì Windows chạy trên nền DOS nên chính nó vô tình đã làm giảm đi tài nguyên hệ thống giành cho các game và nó cũng đã loại bỏ toàn bộ khả năng truy cập trực tiếp mà những nhà phát triển game vẫn hay dùng trước đó từ rất lâu rồi Vậy
là hầu hết các game hỗ trợ Window tại thời điểm đó chủ yếu là những game đánh bài và các game đơn giản khác Trong khi đó các game hành động vẫn tiếp tục được phát triển trên nền tảng DOS
Mặc dù trước đó, Microsoft đã cố gắng cung cấp cho người phát triển một cách cách truy cập nhanh hơn tới các thiết bị đồ hoạ thông qua hệ thống thư viện có tên WinG Nó là tiền thân của DirectX và chỉ hỗ trợ rất ít chức năng WinG thực sự là một ý tưởng hay, tuy nhiên nó vẫn chưa thể đem tới cho những người phát triển khả năng truy cập hệ thống tốt hơn so với những cách mà họ vẫn thích làm trên nền hệ điều hành DOS
Chính vì thế, Microsoft đã có những cải tiến và bổ xung thêm khá nhiều chức năng trong phiên bản đầu tiên DirectX, hay còn được biết tới với cái tên GameSDK (bộ công cụ phát triển game) DirectX đã cung cấp cho các lập trình viên một thư viện độc lập để phát triển, nó là lớp trung gian giữa game và các phần cứng của PC Lúc này thì quá trình thao