Topic này thảo luận về những kĩ thuật dựng địa hình thời gian thực. Các bạn cứ post bài thoải mái hén, đầu tháng sau rảnh tôi sẽ làm một bài basic về vấn đề này. Hì hì, nếu các bài post chất lượng quá càng hay, tui...đỡ phải làm hẹ hẹ, sướng....
Topic này thảo luận về những kĩ thuật dựng địa hình thời gian thực. Các bạn cứ post bài thoải mái hén, đầu tháng sau rảnh tôi sẽ làm một bài basic về vấn đề này. Hì hì, nếu các bài post chất lượng quá càng hay, tui...đỡ phải làm hẹ hẹ, sướng....
Tạo địa hình từ raw file là một kỹ thuật hiệu quả và phổ biến để tạo ra địa hình dạng Height Map realtime
(code C)
#define MAP_SIZE 1024
#define STEP_SIZE 16
#define HEIGHT_RATIO 1.5f
//Lưu Map trong mảng này
BYTE g_HeightMap[MAP_SIZE*MAP_SIZE];
// Nạp .RAW File
void NapRawFile(LPSTR strTen, int nSize, BYTE *pHeightMap)
{
FILE *pFile = NULL;
pFile = fopen( strName, "rb" );
if ( pFile == NULL )
{
return;
}
fread( pHeightMap, 1, nSize, pFile );
fclose(pFile);
}
int Height(BYTE *pHeightMap, int X, int Y)
{
int x = X % MAP_SIZE;
int y = Y % MAP_SIZE;
if(!pHeightMap) return 0;
return pHeightMap[x + (y * MAP_SIZE)];
}
void SetVertexColor(BYTE *pHeightMap, int x, int y)
{
if(!pHeightMap) return;
//Set địa hình màu xanh, hoặc load texture tại đây
float fColor = -0.15f + (Height(pHeightMap, x, y ) / 256.0f);
glColor3f(0, 0, fColor );
}
//Render height map
void RenderHeightMap(BYTE pHeightMap[])
{
int X = 0, Y = 0;
int x, y, z;
if(!pHeightMap) return;
glBegin( GL_QUADS );
for ( X = 0; X < (MAP_SIZE-STEP_SIZE); X += STEP_SIZE )
for ( Y = 0; Y < (MAP_SIZE-STEP_SIZE); Y += STEP_SIZE )
{
x = X;
y = Height(pHeightMap, X, Y );
z = Y;
SetVertexColor(pHeightMap, x, z);
glVertex3i(x, y, z);
x = X;
y = Height(pHeightMap, X, Y + STEP_SIZE );
z = Y + STEP_SIZE ;
// Set Màu hoặc load texture
SetVertexColor(pHeightMap, x, z);
glVertex3i(x, y, z);
x = X + STEP_SIZE;
y = Height(pHeightMap, X + STEP_SIZE, Y + STEP_SIZE );
z = Y + STEP_SIZE ;
SetVertexColor(pHeightMap, x, z);
glVertex3i(x, y, z);
x = X + STEP_SIZE;
y = Height(pHeightMap, X + STEP_SIZE, Y );
z = Y;
SetVertexColor(pHeightMap, x, z);
glVertex3i(x, y, z);
}
glEnd();
//Set lại màu mặc định
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
}
Trong GLScene() nhớ gọi NapRawFile("Đường dẫn/File name.raw", MAP_SIZE * MAP_SIZE, g_HeightMap);
Được sửa bởi gtechvn lúc 13:47 ngày 07-11-2003
ừm.có phải là cái này quá cao siêu hay em quá dốt nên ko biết kô nữa.
xin chen vô hỏi 1 câu khá thiếu iốt là raw là cái gì vậy?????dx hỗ trợ cái này với mức độ nào
Hic, raw là một từ chỉ những cái gì thô thô, đơn giản nhất, ví dụ như raw data thì chỉ dữ liệu kô nén, kô mã hóa, nói chung là nguyên bản. Ở đây raw data là một bản đồ chỉ độ cao của terrain. DX hỗ trợ như thế nào àh ? Hic, cái này kô fụ thuộc vào renderer mà phụ thuộc vào thuật toán render của bạn.
ừm.em lại có 1 số câu hỏi từ câu trả lời của bác.
tọa độ bản đồ là sao???có nghĩa là 1 model terrain người ta lập trình các giới hạn tọa độ của nó trên các model í ấy à???vậy thì cái này hơi bị siêu à nha.bác có thể nói rõ hơn được kô???
còn nếu ta có 1 tọa độ giới hạn động vd như ta ở trên trực thăng thì làm seo mà giời hạn tọa độ của nó được khi object trựvcthăng lun bay và con ngừơi lun di chuyễn trong cái trực thăng í
phương thức render hình như được DX hỗ trợ từ đầu tới chân rùi mà???
Hic, đọc xong post của pác này nhức đầu chả hiểu gì cả ?
Kô fải tọa độ bản đồ hén. Terrain ở đây được tạo từ các mesh, rite ? Các mesh liền nhau có chung đỉnh, rite ? Độ cao của các đỉnh này được lấy từ raw map đó.
Giới hạn frustum view ? Đó là do tính toán và renderer của bạn.
Phương thức render thì platform như Direct3D (kô fải DX à nha) sinh ra để làm nên dĩ nhiên nó fải hỗ trợ "từ đầu đến chân" rùi, nhưng nên nhớ còn rất nhiều flatform khác như OpenGL, Glide hoặc là Matrox...linh tinh, nhiều lém.
Đúng là chú quang này hỏi lung tung, dễ hiểu như vậy mà...
Nếu muốn 1 model ngồi trên trực thăng thì phải tự lập trình thôi. Terrain thì có liên quan gì đâu ?
hi vong các pa post cái gì đó mới mẻ hơn.
Đối với bác thì cũ, nhưng quan trọng là có thành viên thấy mới là được, phục vụ từ cơ bản tới nc mà
Bên engine 3dgamestudio có terrain dạng *.hmp; Ai có cái nào đẹp đẹp gửi tui với.
Bookmarks