Tôi nhận thấy bạn đã chấp nhận câu trả lời nhưng tôi nghĩ điều này xứng đáng với một số nhận xét khác. Xin lỗi để báo cho bạn ra khỏi trật tự, tôi trả lời bởi những gì tôi nghĩ là quan trọng.
Thay vì tạo một công cụ 3D từ đầu, tôi quyết định mô phỏng chính xác như tôi có thể có sẵn: World of Warcraft's.
Tuy nhiên, tôi muốn tập trung vào công cụ dựng hình 3D và thực tế chứ không phải giao diện, vì vậy tôi không nghĩ mình sẽ sử dụng nó [lua] cho dự án này.
Từ hai đoạn này, tôi có thể cho bạn biết rằng bạn không cố gắng mô phỏng công cụ trò chơi. Chỉ Phần phụ trợ hiển thị 3D. Nó không phải là điều tương tự, và phần phụ trợ hiển thị là một phần rất nhỏ so với công cụ trò chơi đầy đủ.
này, bằng cách này, có thể giúp trả lời một câu hỏi của bạn:
World of Warcraft dường như được sử dụng cả hai! Trong thực tế, thông thường nó sử dụng DirectX, nhưng bạn có thể sử dụng opengl bằng cách khởi động nó bằng công tắc "-opengl" thông qua dòng lệnh.
Đúng, họ đã triển khai cả hai. Số lượng công việc để làm điều đó là không thể bỏ qua, nhưng kết xuất hiển thị, theo kinh nghiệm của tôi, tối đa là 10% tổng số mã, thường ít hơn. Vì vậy, nó không phải là việc xúc phạm để thực hiện nhiều cái.
Hơn nữa, phần lập trình của công cụ trò chơi hiện nay không phải là đoạn lớn nhất. Phần lớn các kịch bản lua được xem xét ở khía cạnh đó, ví dụ:
Đối với WoW, hỗ trợ OSX có nghĩa là OpenGL. Vì vậy, họ đã làm điều đó. Họ cũng muốn hỗ trợ phần cứng cũ hơn ... Vì vậy, họ hỗ trợ phần cứng cấp DX8. Đó là 3 chương trình phụ trợ. Tôi không biết họ thực sự triển khai bao nhiêu, nhưng tất cả đều tập trung vào cơ sở khách hàng mà họ muốn tiếp cận.
Nhiều back-end trong một công cụ trò chơi là thứ ít nhiều cần thiết để mở rộng cho tất cả các cạc đồ họa/hệ điều hành/nền tảng. Tôi chưa thấy một động cơ trò chơi thực thực sự nào không hỗ trợ nhiều phụ trợ (ngay cả tựa đề của bên thứ nhất có xu hướng hỗ trợ một back-end thay thế cho mục đích gỡ lỗi).
ok, đó là một lời nói đầu dài .. Bây giờ, câu hỏi chính của tôi là: Tôi có nên sử dụng DirectX, OpenGL, thư viện bao bọc như sdl hay không?
Vâng, điều này phụ thuộc rất lớn vào những gì bạn muốn thoát ra khỏi nó. Tôi có thể thêm rằng danh sách lựa chọn của bạn không phải là khá hoàn chỉnh:
- DirectX9
- DirectX10
- DirectX11
- OpenGL < 3.1 (trước API NỮA được lấy ra)
- OpenGL> = 3.1
- OpenGL ES 1.1 (chỉ khi bạn cần.Nó không phải lập trình)
- OpenGL ES 2,0
Yep, những API đủ khác nhau mà bạn cần phải quyết định cái nào bạn muốn xử lý.
Nếu bạn muốn tìm hiểu các khái niệm cơ bản về dựng hình 3D, bất kỳ thứ gì trong số đó đều có thể hoạt động. OpenGL < 3.1 có xu hướng ẩn nhiều thứ mà cuối cùng phải xảy ra trong mã người dùng cho các mã khác (ví dụ: thao tác ma trận, xem this plug).
DX SDK đi kèm với rất nhiều mẫu giúp hiểu khái niệm cơ bản, nhưng chúng cũng có xu hướng sử dụng các tính năng mới nhất và tuyệt vời nhất của DX khi nó không nhất thiết cần thiết khi bắt đầu (ví dụ: sử dụng hình học shader để render sprites. Mặt khác, hầu hết các hướng dẫn GL đều có xu hướng sử dụng các tính năng cơ bản không thực hiện trên phần cứng hiện đại (ví dụ: glBegin/glEnd, select/picking, ... xem danh sách những thứ đã bị xóa khỏi GL 3.1 hoặc this other plug) và có xu hướng ghép các khái niệm sai cho rất nhiều thứ.
Cái nào được sử dụng nhiều nhất trong thế giới thực?
Đối với trò chơi, DirectX9 là tiêu chuẩn hiện nay trong thế giới PC. Bởi một lợi nhuận xa.
Tuy nhiên, tôi hy vọng DirectX11 sẽ chiếm được nhiều thị phần hơn vì nó cho phép một số công việc đa luồng hơn. Thật không may phức tạp hơn đáng kể so với DX9.
không ai sử dụng OpenGL anyway (rất ít người biết về công tắc bí mật).
Hỏi chủ sở hữu máy tính những gì họ nghĩ.
Câu hỏi phụ, bạn có thực sự nghĩ các nhà cung cấp phần cứng sẽ tiêu tốn năng lượng trong trình điều khiển OpenGL nếu đây thực sự là trường hợp (tôi nhận ra tôi đã khái quát nhận xét của bạn, xin lỗi)? có những tập quán thế giới thực của nó. Mặc dù không có nhiều trò chơi. Và Apple làm cho OpenGL phù hợp hơn thông qua iphone (cũng là OpenGL ES, thực sự).
Nếu đó là một cái gì đó thường được thực hiện, đừng lập trình viên thường tạo cơ 3d riêng của họ "wrapper",
Nó thường là một phần đầy đủ của thiết kế động cơ. Tâm trí bạn, nó không trừu tượng các API ở cùng cấp độ, nó thường là nhiều hơn tại một "vẽ này với tất cả các chuông và còi của nó trên đó". Thuật toán kết xuất nào được áp dụng trên bản vẽ đó có xu hướng trở lại cụ thể.
Điều này, tuy nhiên, rất phụ thuộc vào công cụ trò chơi. Nếu bạn muốn hiểu rõ hơn, bạn có thể nhìn vào UE3, nó chỉ có released free (beer) for non-commercial use (Tôi chưa xem nó, vì vậy tôi không biết liệu chúng có lộ ra các phần phụ trợ hay không, nhưng nó đáng xem). Để lấy lại nhận xét của tôi rằng công cụ trò chơi không chỉ có nghĩa là 3D, look at this.
"Tại sao họ làm điều đó?" Vì Mac OSX không hỗ trợ DirectX? –
SDL chỉ đơn thuần là một lớp trừu tượng nền tảng, nó thay thế cả OpenGL lẫn DirectX. Tuy nhiên, khi SDL được sử dụng, nó thường được sử dụng với OpenGL, vì cả hai thư viện nền tảng chéo. Cũng đáng chú ý là SDL không cung cấp một bộ công cụ widget, vì vậy nếu đó là một yêu cầu (không phải là rất phổ biến trong trò chơi 3D toàn màn hình), một cái gì đó giống như Qt có thể là một lựa chọn tốt hơn cho một ứng dụng nền tảng chéo. – codelogic
@gf: điểm tốt. Làm cho tôi tự hỏi tại sao họ không hỗ trợ linux nguyên bản kể từ khi họ đã trải qua tất cả các rắc rối để làm cho OpenGL làm việc cho mac .. chỉ nên cần những thay đổi tương đối tầm thường. ồ, đoán là tôi sẽ không bao giờ tìm ra. –