Trang 3 / 3 FirstFirst 123
Hiển thị kết quả từ 21 đến 30 / 30
  1. #21
    Tham gia
    17-07-2002
    Location
    Hà Nội
    Bài viết
    702
    Like
    0
    Thanked 9 Times in 8 Posts
    Ông lancelot ăn nói cẩn thận, nhảy vào mà xưng chú với cả anh, ở đây lắm "thằng" già khú đấy.
    Chỉ chỗ load paper thằng nào chả làm được, mới biết được vài chữ tiếng anh thế chưa đủ trình để hót đâu.
    Viết gì thì phải nhớ và có trách nhiệm với những gì mình viết, nếu không bị xóa ráng chịu.
    Babe - F

  2. #22
    Tham gia
    30-04-2003
    Bài viết
    1,165
    Like
    0
    Thanked 5 Times in 5 Posts
    Ông lancelot ăn nói cẩn thận, nhảy vào mà xưng chú với cả anh, ở đây lắm "thằng" già khú đấy.
    Chỉ chỗ load paper thằng nào chả làm được, mới biết được vài chữ tiếng anh thế chưa đủ trình để hót đâu.
    Viết gì thì phải nhớ và có trách nhiệm với những gì mình viết, nếu không bị xóa ráng chịu.
    Babe - F
    Mod gì mà cãi nhau với "dân đen" vậy cha?

  3. #23
    Tham gia
    29-11-2004
    Bài viết
    6
    Like
    0
    Thanked 0 Times in 0 Posts
    Ở đây không nói chuyện về điện - BabeF
    Tôi cũng không cãi nhau - BabeF
    Được sửa bởi CrazyBabe lúc 00:06 ngày 09-12-2004 Reason: Xóa luôn khỏi lèo nhèo

  4. #24
    Tham gia
    03-12-2004
    Bài viết
    72
    Like
    0
    Thanked 0 Times in 0 Posts
    phần terrain này các bạn tìm đọc cuốn Focus on 3d Terrain của NXB Premier Press là hay nhất có nhiều phương pháp tạo địa hình.
    đơn giản xúc tích gắn gọn .

  5. #25
    Tham gia
    16-07-2004
    Bài viết
    662
    Like
    0
    Thanked 3 Times in 3 Posts
    Chửi nhau nữa đê đang thích nghe đây

    Bác Crazy có cái Hình em nào đẹp thía ,bồ bác hả đọc xong xóa luôn cái bài này đê

  6. #26
    Tham gia
    30-04-2003
    Bài viết
    1,165
    Like
    0
    Thanked 5 Times in 5 Posts
    CrazyBabe mấy nay bận đi làm ăn hay sao mà ít thấy xuất đầu lộ diện trên diễn đàn vậy?

  7. #27
    Tham gia
    22-09-2004
    Bài viết
    145
    Like
    0
    Thanked 0 Times in 0 Posts
    Tôi muốn viết một cái terrain editor. Hiện nay cần nghiên cứu về tạo heightmap (tự động, nâng lên hạ xuống, làm phẳng v.v...) và cách vẽ paint texture lên các bề mặt, theo kiểu alpha và blend. Có ai có tài liệu hoặc thư viện không làm ơn chỉ giúp?

  8. #28
    Tham gia
    23-08-2006
    Bài viết
    1
    Like
    0
    Thanked 0 Times in 0 Posts
    Mình có 2 câu hỏi về vấn đề terrain rendering:
    - Câu hỏi 1: Về vấn đề LOD (Level of detail)
    Mình có tham khảo một số thuật toán về LOD, chẳng hạn: Geomipmap, geoclipmap, ROAM, SOAR, Chunk LOD...
    ROAM thì có vẻ là khá cũ, ngày nay, khi phần cứng độ họa đã trở nên mạnh mẽ thì ROAM có vẻ không phù hợp, vì nó chiếm tài nguyên CPU khá lớn. Geomipmap và geoclipmap thì thích hợp để render các terrain kích thước nhỏ (theo mình). Mình được biết là engine của Farcry dùng geomipmap với map 1024x1024. Chunk LOD thì hiệu quả khi render 1 map kích thước lớn.
    Mình muốn viết cái demo terrain kiểu Land Object (đi trên địa hình) và Aircraft (bay trên địa hình). Vậy thì với phần cứng hiện nay, thuật toán nào là hiệu quả nhất? (Chiếm ít tài nguyên CPU càng tốt)
    - Câu hỏi 2: Vấn đề về Index Buffer
    Mình định viết demo bằng DX. Mình tổ chức terrain theo dạng cây tứ phân (QuadTree). Mỗi lá của cây là một terrain block (có kích thước theo mình đặt là 17x17 - tương ứng n = 4 (17 = 2^4 + 1)). Mình dùng 1 Vertex Buffer để lưu các đỉnh của toàn terrain. Vậy:
    + Vấn đề 1: Nên dùng 1 index buffer để lưu toàn bộ các indices trên toàn bộ các terrain block, hay mỗi terrain block tạo 1 Index buffer. Cái nào hiệu quả hơn.
    + Vấn đề 2: Mình được biết render kiểu TRIANGLESTRIP hiệu quả hơn 60% (ko biết có nhớ nhầm ko ) so với TRIANGLELIST. Nhưng không biết tổ chức các indices trên mỗi terrain block như thế nào để có thể render dạng TRIANGLESTRIP. Cụ thể là khi render dòng thứ i (dạng TRIANGLESTRIP), mình không biết làm thế nào để kết nối với các indices ở dòng thứ i+1 để render.
    Tạm thời hỏi vậy thôi. Có gì mình sẻ hỏi tiếp .
    Welcome mọi đóng góp !

  9. #29
    Tham gia
    12-02-2007
    Location
    HCM - NT
    Bài viết
    218
    Like
    0
    Thanked 1 Time in 1 Post
    Ko biết post lên có thừa hay không nhưng mà cứ đưa lên 1 cách tạo heightmap mà tui biết:

    Bước 1: Chuẩn bị 1 file BITMAP (trắng đen) thể hiện địa hình dạng 2D
    Nhỏ thôi, không cần lớn để không làm chậm quá trình đọc file. Ví dụ (128x128) -> (128 km x 128 km hay m,...).



    Tại sao phải là trắng đen, Vì 1 pixel của hình trắng đen có giá trị R = G = B = height;
    Màu đen (height = 0) là nơi có địa hình thấp nhất.
    Màu trắng (height = 255) là nơi có địa hình cao nhất.

    Bước 2: Xây dựng MAP dưới dạng MESH
    Code:
    typedef struct TagVERTEX {
        float x,y,z;
        float nx,ny,nz;   
        D3DCOLOR color;
    }VERTEX;
    Xây dựng cấu trúc mảng VERTEX aMap[widthBMP][heightBMP].(Cấu trúc này tui cài đặt theo kiểu DX, với OpenGL thì đơn giản hơn nhiều).

    - Giải mã format file BMP trên (lưu dạng *.TGA cho dễ giải mã) và duyệt từng PIXEL để lấy giá trị màu -> Height.

    Code:
    // Xây dựng HEIGHT
    for (int i = 0;i<widthBMP;i++){
     for (int j = 0;j<heightBMP;i++){
       aMap[i][j].x = i * DONVI;
       aMap[i][j].y = GetHeight(i,j) * DONVI; // <- GetHeight tự viết
       aMap[i][j].z = j * DONVI;
     }
    }
    
    // Make IndexBuff
    int aIndexBuffer[];
    int nIndex=0;
    /*
    
    (0)---(1)(4)--(5)   .........
      |   /  |   / |    .........
      |  /   |  /  |    .........
      | /    | /   |    .........
    (2)--(3) (6)--(7)   .........
    .........
    .........
    
    */
    for (i = 0;i<widthBMP-1;i++){
      for (j = 0;j<heightBMP-1;j++){
         aIndexBuffer[nIndex] = j*widthBMP+ i;
         nIndex++;
         aIndexBuffer[nIndex] = j*widthBMP+ i + 1;
         nIndex++;
         aIndexBuffer[nIndex] = (j+1)*widthBMP+ i;
         nIndex++;
         aIndexBuffer[nIndex] = (j+1)*widthBMP+ i + 1;
         nIndex++;
      }
    }
    Như vậy ta đã có 1 mảng aHeightMap. Tuy nhiên, nếu vẽ nó lên thì vẫn chưa hoàn chỉnh vì nó vẫn còn bị bậc thang do GetHeight. Do đó chưa cần phải vội vàng vẽ.


    Bước 3: Xử lý SMOOTH
    - Có rất nhiều thuật toán xử lý SMOOTH nhưng với dạng HEIGHTMAP này thì có lẽ chỉ nên xử dụng kỹ thuật tính trung bình các height trong MAP.
    Ví dụ:
    Code:
    ......
    ......[1]  [2]  [3] ......
                |
    ......[4]<-[5]->[6] ......
                |
    ......[7]  [8]  [9] ......
    ......
    
    Height[5] =  Height[1] 
               + Height[2]
               + Height[3]
               + Height[4]
               + Height[5]
               + Height[6]
               + Height[7]
               + Height[8]
               + Height[9]
    Height[5] = Height[5] / 9
    Code:
    void SmoothMap(VERTEX aMap[][heightBMP])
      for (int i = 1;i<widthBMP-1;i++){
       for (int j = 1;j<heightBMP-1;i++){
         aMap[i][j].y += aMap[i-1][j-1].y + aMap[i][j].y + aMap[i][j+1].y +
                         aMap[i][j-1].y + + aMap[i][j+1].y +
                         aMap[i+1][j-1].y + aMap[i+1][j].y + aMap[i+1][j+1].y;
         aMap[i][j].y  = aMap[i][j].y / 9;
    
         // Tính VECTOR PHÁP TUYẾN.....
       }
      }
    }
    Gọi chừng 3 -> 5 (Load càng nhiều thì nó càng mượt)lần hàm SmoothMap thì chúng ta sẽ có 1 MAP mượt mà.
    Lúc này có lẽ ta nên load lại MAP để tính VECTOR PHÁP TUYẾN... Tuơng đối dễ


    Bước cuối cùng:
    Có lẽ cũng là bước khó nhất. Là dùng TEXTURE và MULTI_TEXURE (BUMP MAPPING) để trang điểm cho cái MAP dễ thương của mình.
    Được sửa bởi eXecutive lúc 20:52 ngày 18-08-2007

  10. #30
    Tham gia
    16-07-2004
    Bài viết
    662
    Like
    0
    Thanked 3 Times in 3 Posts
    Lạ nhỉ ,em thử lấy cái Height Map của để sinh terrain mà sinh ra cũng đẹp lắm chứ đâu có cái hình bậc thang như của anh đâu

Trang 3 / 3 FirstFirst 123

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
  •