2008-10-06 22 views
6

Tôi đang lập trình một ứng dụng cho một 32 bit processor with limited memory (512k flash, 32k RAM).Kỹ thuật cho đồ họa động (thuật toán)

display trên thiết bị này là 128x160 với màu 16 bit, thường sẽ tiêu thụ 40k ram nếu tôi đã lưu bộ đệm trên bộ xử lý của mình. Tôi không có nhiều RAM, vì vậy tôi đang tìm kiếm các kỹ thuật, mẹo, thủ thuật, ý tưởng để tạo dữ liệu màn hình khi đang di chuyển.

Những điều có thể giúp:

  • Có lẽ bạn biết của một tài nguyên cho loại hạn chế
  • Có lẽ bạn đã tạo đồ họa hấp dẫn một cách nhanh chóng
  • Có một thuật toán chung tôi có thể sử dụng để kết hợp các phần tử trong bộ nhớ chương trình (bao gồm trộn alpha) khi đang quét trong khi quét màn hình
  • Kỹ thuật dựng hình đơn giản (hoặc nguồn bsd/mit/apache) miễn phí)
  • ???

Tôi có một hệ số nhân nhưng không có bộ xử lý dấu chấm động. Màn hình hiển thị chính nó có một bộ điều khiển rất đơn giản và bộ nhớ cho màn hình - nhưng đọc và viết là tốn kém vì vậy tôi không muốn sử dụng nó như là không gian làm việc của tôi nếu tôi có thể tránh nó.

-Adam

Trả lời

8

Nói cách khác, bạn đang ở trong khá nhiều các nhà phát triển tình hình trò chơi cùng một nơi tại thời điểm Tandys, quang phổ và máy tính sớm. Vì vậy, đây là khuyến nghị của tôi:

Bạn nên đọc các tác phẩm của Michael Abrash trên đồ họa máy tính. Chúng được viết trong thời gian mà một bộ xử lý điểm nổi là một phần cứng tùy chọn, và chúng mô tả rất nhiều kỹ thuật cơ bản (các dòng Bresenham, vv) được sử dụng trong các ngày kết xuất phần mềm cũ (được cho là 'xấu') .

Bạn có thể đọc hầu hết "Sách đen" của mình here.

Bổ sung, bạn có thể tìm thấy rất nhiều tệp BBS cũ mà hầu hết mọi người đã sử dụng trở lại trong ngày để tìm hiểu lập trình đồ họa here. Chỉ cần tìm kiếm đồ họa, dòng, và những gì không.

Hy vọng điều đó sẽ hữu ích!

Cập nhật: Tôi cũng gọi lại bằng cách sử dụng this trong lần thử đầu tiên để vẽ mọi thứ trên màn hình. Không thể nói bao nhiêu thời gian tôi đã cố gắng để hiểu toán học đằng sau nó (tốt, để được công bằng tôi đã được như 15 vào thời điểm đó). Rất tốt (và đơn giản) giới thiệu 3D, và một thủ tướng rất tốt đẹp về biến đổi, chất độn đa giác và nội suy.

3

Loại dữ liệu nào bạn sẽ hiển thị trên màn hình?

Nếu đó không phải là hình ảnh chụp ảnh, bạn có thể xem xét sử dụng bảng màu. Ví dụ: Một bảng màu 256 sử dụng 8 bit cho mỗi pixel sẽ yêu cầu 20kb, (cộng với 256 x 2byte cho bảng tra cứu) mà ít nhất là tốt hơn 40kb.

2

Tôi tin rằng kỹ thuật cơ bản để xử lý loại tình huống này là chia màn hình thành các sọc ngang hẹp và chỉ đệm hai sọc đó vào RAM. Một sọc sẽ được hiển thị, trong khi bạn vẽ một sọc kế tiếp.Khi quét 'tia' chạm vào sọc tiếp theo (và bắn ra một ngắt cho bạn để bắt), bạn trao đổi hai và bắt đầu vẽ sọc tiếp theo xuống.

Tác dụng phụ khó chịu của việc này là bạn có cứng giới hạn thời gian về thời gian bạn có thể chi tiêu để hiển thị từng sọc. Vì vậy, tôi đoán nó sẽ là hấp dẫn để dính với một cái gì đó nhàm chán nhưng với hiệu suất dự đoán, như sprites.

Hơi offtopic nhưng đây là cách phần cứng Nintendo DS 3D hoạt động. Bạn có thể thấy nó nếu bạn cố gắng hiển thị quá nhiều đa giác xung quanh cùng một tọa độ y - polys sẽ ngẫu nhiên nhấp nháy và thả ra khi màn hình làm mới vượt qua phần cứng hiển thị.

Ngoài ra, tôi muốn đề xuất của người đăng bài thứ hai rằng bạn sử dụng hiển thị được tạo màu. Rất khó để làm toán nhanh trên pixel 16 bit, nhưng nhanh hơn trong 8bit nếu bạn thông minh về cách bạn đặt bảng màu của mình.

0

Một số ý kiến ​​cho rằng sẽ kết hợp đồ họa đẹp và bộ nhớ thấp:

  • cửa hàng nền và sprites trong nháy mắt.
  • Lưu trữ đồ họa được tạo động trong RAM bằng cách sử dụng bảng màu đến một nửa byte.
  • Sử dụng tính năng cửa sổ của trình điều khiển LCD để chỉ cập nhật phần màn hình bạn cần.