Thứ Hai, 29 tháng 8, 2011

Lỗi _fseek trong ứng dụng DemoII3_2.Cpp và lỗi #define UNICODE

Khi Build và chạy thử ứng dụng DemoII3_2 của cuốn sách "Tricks of the 3D Game Programming Gurus" đã gây  ra lỗi sau:

Thứ 1: các biến, các struct, các functions trong thư viên của Microsoft mặc định là các Biến, Struct và Functions hổ trợ UNICODE và gây ra lỗi không thể chuyển "* char" sang "LPSTR" hay đại loại như vậy.

Thứ 2: ứng dụng sau khi build thành công khi chạy xảy ra lỗi gây ra Exception nghiêm trọng liên quan đến thao tác File "Greengrid.bmp"

Giải pháp cho những lỗi này như sau:
Thứ 1: Ta chỉnh lại bộ "Character Set" từ hỗ trợ UNICODE sang Not Set hoặc MultiBye trong
Project Properties Papes\Configuration Properties\ General
hoặc thêm
#undef UNICODE đầu các File.CPP


Thứ 2: Lỗi liên quan đến File gây ra Exception nghiêm trọng là do có 2 thư viện hỗ trợ thao tác File :
Winbase.h
io.h

Trong hàm Load_Bitmap_File trong thư viện T3DLib1 chúng ta mở dùng hàm OpenFile() được hổ trợ bởi Winbase.h. Sau đó, ta dùm hàm
_lseek(file_handle,-(int)(bitmap->bitmapinfoheader.biSizeImage),SEEK_END);
để di chuyển khi thao tác File. Tuy nhiên hàm _fseek không được hổ trợ bởi Winbase.h mà được hổ trợ bởi io.h. Chính nguyên nhân này đã gây ra lỗi dừng chương trình đột ngột.
Cách khắc phục như sau:
ta dùng hàm _ffseek hổ trợ bởi Winbase.h thay cho _fseek hổ trợ bởi io.h

Trên đây là lỗi mình đã gặp phải khi Build up DemoII3_2, ứng dụng mẫu của cuốn sách "Tricks of the 3D Game Programming Gurus" với trình biên dịch Microsoft Visual C++ 2008 và bộ Microsoft DirectX SDK (2010).


Good luck!

Thứ Ba, 16 tháng 8, 2011

Lỗi thiếu thư viên của DirectX với ứng dụng T3DConsole2 trong chương 3

Trước tiên, để có thể lập trình với thư viện DirectX, ta cần có một bộ thư viên Microsoft DirectX SDK được cài đặt trên máy. Cái này có thể download trên trang của Microsoft, dung lượng trên dưới 400MB.

Bước kế tiếp ta phải thêm tùy cho cho môi trường Microsoft Visual C++ 2008 biết được đường dẫn đến các thư mục liên quan đến DirectX như sau:

Chọn Tools\Options\Projects and Solutions\VC++ Directories
- Trong mục Executable Files ta thêm đường dẫn đến ....\Microsoft DirectX SDK (2010)\Utilities\Bin\x86
- Trong mục Include Files ta thêm đường dẫn đến ....\Microsoft DirectX SDK (2010)\Include
- Trong mục Library Files ta thêm đường dẫn đến ....\Microsoft DirectX SDK (2010)\Lib\x86

Do các chương trình mẫu trong CD được tác giả xây dựng với DirectX 9cho nên khi ta build va compile những chưng trình này với bộ DirectX mới chắc chắn sẽ có lỗi xảy ra. Nguyên nhân do, một số Files.h cũng như File.Lib (một số COMponent) trong bộ DirectX 2010 không còn hổ trợ nữa. Vì vậy, khi ta build thử ứng dụng "T3DConsole2" sẽ bắt gặp lỗi.

1) Download các File.h  và bỏ vào thư mục ....\Microsoft DirectX SDK (2010)\Include gồm: dls1.h
dmdls.h
dmerror.h
dmksctrl.h
dmplugin.h
dmusbuff.h
dmusicc.h
dmusicf.h
dmusici.h
//======================================
Mình fixed được lỗi này nhờ thông tin từ một Entry trên diễn đàn như sau:

Microsoft® DirectX SDK earlier than August 2007

Information: The DirectX SDK from November 2007 is the first one which supports Microsoft® Visual Studio 2008. But it's also the first version which doesn't support DirectMusic which is needed to compile OpenTTD. That is why we must copy the missing files from an older version, prefered the final one for DirectMusic: 'August 2007'.
Extract (no double-click, do not install) dxsdk_aug2007.exe in an extra directory and you get a file called dxsdk_aug2007.exe (yes that's right, both files have the same name).
Extract the second dxsdk_aug2007.exe in an extra directory.
Now copy following 9 files from .\dxsdk_aug2007\dxsdk_aug2007\Include\ to <personal folder>\shared\include (note: Please update the paths as necessary):

//============================================

2) DirectX SDK 2010 không còn cung cấp thư viện DDraw.lib nhưng ta có thể tìm được DDraw.h nhờ Windows SDK có cung cấp file.h này .Do đó khi ta Build ứng dụng sẽ gặp lỗi. Cách làm đơn giản là Download DDraw.lib và bỏ vào thư muc \Microsoft DirectX SDK (2010)\Lib\x86. Mình nghĩ DDraw.DLL sẽ có sẵn trong thư mục System32\ nên ta không cần download thư mục này.

//===========================================

Mình fixed được lỗi này nhờ thông tin từ một Entry trên diễn đàn như sau:
Hi Jaki,

As far as I know, we can get ddraw.h from Windows SDK, but not ddraw.lib. Ddraw.lib comes from Windows SDK or Windows DDK. See the information from http://blogs.msdn.com/b/chuckw/archive/2010/06/16/wither-directdraw.aspx

In the DirectX SDK (June 2010) release, the DDRAW.H and DDRAW.LIB files are no longer there. The latest version of DirectX SDK which contains the ddraw.lib is February 2010, you can download it from http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=2c7da5fb-ffbb-4af6-8c66-651cbd28ca15

Hope this information helps.

Cheers,
Yi
//===========================================


3) Một lỗi nữa chắc chắn gặp phải đó là:
error LNK2019: unresolved external symbol.....
error LNK2019: unresolved external symbol.....
error LNK2019: unresolved external symbol.....
error LNK2019: unresolved external symbol.....
error LNK2019: unresolved external symbol.....
Lỗi này xẩy ra không quá trình Compiling. Nguyên nhân là do các File.Obj như T3DLib1.Ojb, T3DLib2.Ojb, T3DLib3.Ojb không link được với mã nguồn chứa các function thực.
Cách sửa lỗi cũng khá đơn giản. Chúng ta hãy Link các thư viên dxguid.lib dsound.lib dinput8.lib d3d10.lib winmm.lib trước khi biên dịch. Cách làm như sau:

Solution: include Linker as:
Project\Properties\Linker\Commandline\Additional Option
dxguid.lib dsound.lib dinput8.lib d3d10.lib winmm.lib


Trên đây là 3 lỗi mình đã gặp phải khi Build up ứng dụng mẫu của cuốn sách "Tricks of the 3D Game Programming Gurus" với trình biên dịch Microsoft Visual C++ 2008 và bộ Microsoft DirectX SDK (2010).

Good luck!

Thứ Sáu, 12 tháng 8, 2011

Sữa lỗi thư viện T3LIB của tác giả Andre LaMothe để có thể chạy trên nền lập trình .NET mới

Do tác giả đã viết cuốn sách này năm 2003, khi ấy tác giả sử dụng môi trường biên dịch Microsoft Visual 6 cộng với DirectX SDK 9, cho nên một số lỗi sẽ xảy ra và gây khó khăn cho những người lập trình muốn tìm hiêu sách cũng như muốn biên dịch ứng dụng từ source code trong CD trên những nền lập trình mới.

Với mong muốn ghi lại những lỗi mình từng gặp phải làm tài liệu cũng như giúp một số anh em lập trình khác đỡ tốn thời gian hơn, nên mình cố gắng viết lại những sự cứ gặp phải khi Build, Compile những Samples trong CD đi kèm với cuốn sách "Tricks of the 3D Game Programming Gurus".

Trình biên dịch mình sử dụng là Microsoft Visual C++ 2008 bản Express Edition và thư viện hỗ trợ Microsoft DirectX SDK tháng 06/2010.

Thứ Tư, 10 tháng 8, 2011

Một chút cảm nghĩ về cuốn sách "Tricks of The 3D Game Programming Gurus"

Một cuốn sách về chủ đề lập trình Game được xuất bản vào năm 2003 của tác giả André LaMothe. Đây là cuốn sách thứ 2 sau cuốn Tricks of  Windows Game Programming Gurus". Tác giả đã giúp người đọc nắm được những nguyên tác cơ bản nhất liên quan đến lập trình Game. Đồng thời, cuốn sách được viết khá dễ hiệu này giúp các lập trình viên yêu thích Game nhanh chóng và dễ dàng bước vào một trong thế giới lập trình đòi hỏi kĩ thuật cao nhất hiện nay.

Phần I, người đọc được giới thiệu những bước đầu tiên với Lập trình Game 3D. Bên cạnh đó, ngược đọc cũng nắm được một ứng dụng Windows bình thường và một ứng dụng có sử dụng thư viện hỗ trợ DirectX.

Phần II, tác giả cung cấp những khái niệm 'toàn là Toán" như Trigonometry, Vectors, Matrics, Quanternions...
Với cách trình bày dễ hiểu, tác giả đã giúp người đọc mường tượng được phần lớn kiến thức Toán đã được học ứng dụng vào xây dựng một chương trình Game như thế nào.

Phần III, IV, V, cuốn sách cung cấp những kĩ thuật chuyên sâu liên quan đến lập trình Game như Lighting, Texture Mapping, Clipping in 3D, Buffering, Animation, Motion, Collision Detection....

Tóm lại, một cuốn sách với hơn 1660 trang giúp cho người đọc hiểu được và có thể xây dựng được những Game 3D đơn giản. Đồng thời, những kiến thức toán học phổ thông sẽ trở nên gần gũi và thực tế hơn thông qua những hướng dẫn của tác giả. Riêng cá nhân mình, Tricks of The 3D Game Programming Gurus là một trong những cuốn sách lập trình đáng để đọc nhất.