Trang 1 / 3 123 LastLast
Hiển thị kết quả từ 1 đến 10 / 30
  1. #1
    Tham gia
    17-07-2002
    Location
    Hà Nội
    Bài viết
    702
    Like
    0
    Thanked 9 Times in 8 Posts

    Thông tin Realtime terrain rendering

    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....
    Quote Quote

  2. #2
    Tham gia
    24-06-2003
    Bài viết
    65
    Like
    0
    Thanked 0 Times in 0 Posts
    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

  3. #3
    Tham gia
    21-11-2002
    Location
    Hồ Chí Minh
    Bài viết
    3,422
    Like
    17
    Thanked 206 Times in 121 Posts
    ừ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

  4. #4
    Tham gia
    17-07-2002
    Location
    Hà Nội
    Bài viết
    702
    Like
    0
    Thanked 9 Times in 8 Posts
    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.

  5. #5
    Tham gia
    21-11-2002
    Location
    Hồ Chí Minh
    Bài viết
    3,422
    Like
    17
    Thanked 206 Times in 121 Posts
    ừ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à???

  6. #6
    Tham gia
    17-07-2002
    Location
    Hà Nội
    Bài viết
    702
    Like
    0
    Thanked 9 Times in 8 Posts
    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.

  7. #7
    Tham gia
    15-05-2003
    Bài viết
    110
    Like
    0
    Thanked 0 Times in 0 Posts
    Đú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 ?

  8. #8
    Tham gia
    19-10-2003
    Bài viết
    45
    Like
    0
    Thanked 31 Times in 1 Post
    hi vong các pa post cái gì đó mới mẻ hơn.

  9. #9
    Tham gia
    24-06-2003
    Bài viết
    65
    Like
    0
    Thanked 0 Times in 0 Posts
    Đố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à

  10. #10
    Tham gia
    20-01-2004
    Bài viết
    2
    Like
    0
    Thanked 0 Times in 0 Posts
    Bên engine 3dgamestudio có terrain dạng *.hmp; Ai có cái nào đẹp đẹp gửi tui với.

Trang 1 / 3 123 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •