2010-11-22 17 views
5

tôi cần tạo khối lập phương với các góc trơn và các cạnh trơn trong C++ với openGL. cho tất cả tôi biết tôi có ba lựa chọn: Bezier đường cong (có thể, là nó có thể?), Một khối lập phương với xi lanh cho các cạnh và hình cầu cho các góc hoặc tải một .3ds của một khối lập phương.Cách tốt nhất để vẽ hình lập phương với các cạnh trơn tru? Bezier Curve, tải một .3ds hoặc khác?

Bất kỳ ý tưởng nào?

+0

Xem câu hỏi này trên [làm cho một con xúc xắc có các cạnh trơn tru] (http: //stackoverflow.com/q/3480161/59303) - cụ thể là câu trả lời của tôi. – ChrisF

+0

cảm ơn, điều này không xuất hiện trong tìm kiếm của tôi – QuantumKarl

+0

Tải một .3ds không tự động hiển thị hình ảnh cho bạn. Bạn phải phân tích cú pháp 3ds và tự render nó. Câu hỏi hiển thị không liên quan gì đến định dạng tệp. –

Trả lời

2

Bạn có thể mô phỏng một hình lập phương có ánh sáng mượt mà bằng cách chỉ các normals trực tiếp ra khỏi tâm (mô phỏng một quả cầu hình tròn 8). Nó hoàn toàn phụ thuộc vào chính xác những gì bạn đang cố gắng làm. Sử dụng phương pháp trên có thể hoàn toàn đủ tốt.

Nếu bạn muốn xác định khối lập phương có các góc cong (đóng lên) thì bạn sẽ phải chia nhỏ khối lập phương. Trong thực tế, nếu bạn chia nhỏ mạnh xung quanh các góc nhưng bỏ qua các khuôn mặt phẳng, bạn sẽ nhận được một hiệu ứng tốt.

Tất cả những gì bạn nghĩ đến là cách bạn chia nhỏ ở các cạnh. Hãy suy nghĩ về cách bạn có thể mịn nó ra và bạn sẽ, chắc chắn, đưa ra một giải pháp tốt :)

+0

khối lập phương chính nó sẽ là một phần của một lớp học trẻ em để vẽ một khối lập phương rubik, vì vậy không cần phải nhìn thấy gần nhưng cần phải được tìm kiếm khá tốt. Liệu một khối lập phương phía sau các khối lập phương khác có ảnh hưởng gì không? bạn nghĩ điều này sẽ mất bao lâu để học? tôi khá giới hạn thời gian – QuantumKarl

3

pseduocode:

mesh rounded_cube(int size, int edge_radius) 
{ 
    mesh result = sphere(edge_radius) 
    vertex octants[] = result.verteces() 
    for each v in octants 
    { 
     if (v.x != 0.0) 
      v.x = size * (v.x/abs(v.x)); 
     if (v.y != 0.0) 
      v.y = size * (v.y/abs(v.y)); 
     if (v.z != 0.0) 
      v.z = size * (v.z/abs(v.z)); 
    } 

    for i in result.vertices().size() 
    { 
     result.vertex[i] += octants[i] 
    } 

    return result; 

} 
+0

+1: nếu tôi có đại diện cho enuff :) – QuantumKarl

Các vấn đề liên quan