2011-12-24 13 views
11

Chcę się samemu nauczyć o bibliotekach graficznych i trochę się z nimi zabawić. Zbudowałem mały program, który definiuje linie i kształty jako listy pikseli, ale nie mogę znaleźć sposobu na bezpośredni dostęp do ekranu, dzięki czemu mogę wyświetlać punkty na ekranie bez pośrednich.Czy istnieje sposób na uzyskanie dostępu do sprzętu bezpośrednio w języku Python?

Chodzi o to, że nie chcę używać żadnej gotowej biblioteki graficznej, takiej jak gnom, kakao, itp. Zwykle używam Pythona do kodowania, a mój program używa Pythona, ale mogę również kodować i integrować z nim moduły C .

Jestem świadomy, że dostęp do sprzętu ekranowego bezpośrednio odbiera wieloplatformową stronę Pythona, ale pomijam to ze względu na proces uczenia się. Czy istnieje jakiś sposób uzyskania dostępu do sprzętu bezpośrednio w Pythonie, a jeśli tak, to co to jest?

+7

Nikt, nawet state-of-the-art gier wideo (większość czasu, w każdym razie) robi rzeczy, które niskim poziomie. To jest praca kierowcy. W przypadku praktycznie wszystkich aplikacji jest to całkowicie niepraktyczne: szalenie skomplikowane, trudne do niemożliwości przeniesienie na dość inny sprzęt i podatne na zerwanie za każdym razem, gdy producent sprzętu coś ulepsza (np. Rozciąga się na potok), a to jest tuż poza zasięgiem mojej głowy. Nie można się z tego niczego nauczyć, chyba że chcesz pisać sterowniki. Mamy DirectX, OpenGL, itp. Z jakiegoś powodu. I możesz uzyskać dostęp do tych (lub przynajmniej OpenGL) dobrze od Pythona. – delnan

+6

@delnan Tak, ale op naprawdę nie musi uzasadniać, dlaczego chce się uczyć, jeśli pytanie jest prawidłowe. Co jeśli chce pisać sterowniki? 'Szalenie skomplikowane, trudne do przeniesienia na dość inny sprzęt i podatne na złamanie, gdy producent sprzętu coś ulepszy." Jak to wszystko ma związek z włączaniem i wyłączaniem pikseli? To jest pytanie, wszystko inne są twoimi szeroko spekulatywnymi opiniami. Zapoznanie się z pikselem to fantastyczna nauka. – yannis

+3

Możesz mieć rację. Mam jednak wrażenie, że OP ma złe wrażenie, co stanowi niskopoziomowe programowanie graficzne. – delnan

Odpowiedz

2

Wydaje wielką samodzielnego uczenia ścieżkę i chciałbym dodać moje dwie centów warto i sugerują rozważyć patrząc na gobject, Kairze i Pygame modułów jakiś czas.

Python gobject moduł może być na wyższym poziomie niż aktualnego zainteresowania, ale umożliwia rysowanie poziomie pikseli z Kairze (patrz home page), jak również zapewniając ogólną podstawę dla przenośnych aplikacji GUI w Pythonie

Pygame ma również metody poziomie pikseli, jak również metody dostępu do sterowników graficznych (na wyższym poziomie) - tutaj jest szybkie code example

7

Nie, Python nie jest najlepszym wyborem dla tego typu dostępu sprzętowego do karty graficznej. Polecam pisać C w DOS. Cóż, właściwie nie polecam tego. To okropne. Ale to sposób, w jaki nauczyłem się tego robić, i prawdopodobnie jest tak przyjazny, jak będziesz miał dostęp do sprzętu bezpośrednio, bez pośrednictwa.

Mówię DOS zamiast Linux lub NT, ponieważ żaden z nich nie da ci bezpośredniego dostępu do sprzętu wideo bez pisania sterownika. Oznacza to, że musisz nauczyć się całego API sterowników i musisz wywołać wiele "magii", co nie będzie oczywiste, ponieważ pisanie sterownika wideo w Windows NT jest dość skomplikowane.

Mówię raczej C niż Python, ponieważ daje ci prawdziwe wskazówki i zdolność robienia z nimi głupich rzeczy. W systemie DOS możesz pisać do dowolnych adresów pamięci fizycznej w C, co wydaje się być tym, czego potrzebujesz. Próba zainstalowania Pythona w systemie operacyjnym na tyle okropnym, aby umożliwić bezpośredni dostęp do sprzętu, byłaby sama w sobie frustracją, nawet gdybyś chciał robić proste rzeczy, w których Python jest dobry.

I, jak powiedzieli inni, nie oczekuj niczego, czego nauczysz się z tym projektem w realnym świecie. To może być interesujące, ale jeśli spróbujesz napisać prawdziwą aplikację w ten sposób, natychmiast zostaniesz postrzelony przez kogoś, kto będzie musiał zachować twój kod.

1

jest to dość stary wątek teraz, ale natknąłem się na niego podczas zadumanie to samo pytanie.

Kiedyś programowałem w języku asemblera. W moich czasach rysowanie na ekranie było po prostu (?) Kwestią włożenia wartości do pamięci. Wartość zmieniła lub wyłączyła piksel i zdefiniowała jego kolor.

Termin "poke" pochodzi od Basica, a nie asemblera.W asemblerze trzeba było zapisać wartość w rejestrze danych, a następnie powiedzieć procesorowi, gdzie umieścić dane za pomocą innego polecenia i podać adres rejestru, zwykle w formie szesnastkowej! I każdy inny procesor miał własny język asemblerowy. Ale hec był szybkim kodem!

W miarę postępów w pracach sprzętowych odkryłem, że programowanie sprzętowe grafiki staje się coraz bardziej złożone. Jest w tym znacznie więcej niż teraz, po prostu definiując piksel. Podsystem graficzny ma swój własny procesor - lub procesory - i to jest to, czego musisz nauczyć się rozmawiać. Procesor nie plonuje tylko rzeczy w lokalizacjach w pamięci. (Wierzę, że to, co kiedyś było najszybszym superkomputerem na świecie, działało przez jakiś czas na układach graficznych!) "Plonk" nie jest przy tym przykazaniem podstawowym.

Przepraszam; Dygresję. Odpowiadając na oryginalne zapytanie plakatowe, uważam, że cel polegający na zrozumieniu procesu rysowania grafiki można najlepiej osiągnąć eksperymentując z Raspberry Pi. Jest kompatybilny z Python i dlatego jest idealny do pracy. Jego sprzęt jest dobrze udokumentowany i jest tani i łatwy w użyciu.

Nadzieja pomaga to ktoś, zdrowie, M

Powiązane problemy