a może efekt nudy ... w każdym razie fajnie pobawić się takimi wprawkami ..
Tym razem bawimy się sześcianem który będzie się obracał w przestrzeni. Na komodzie w basicu to była by strata czasu,
wiec zrobiłbym to w assemblerze ....
- ;===============================================================================
- .cpu 6510
- .sid
- .text
- ;---------------------------------------------------------------------
- ; Stałe
- ;---------------------------------------------------------------------
- SCREEN_WIDTH = $28 ; Szerokość ekranu
- SCREEN_HEIGHT = $2C ; Wysokość ekranu
- SCREEN_SIZE = $BA ; Rozmiar ekranu (40 x 25 znaków)
- COLOR_BG = $3F ; Kolor tła
- CUBE_POINTS:
- .byte -8, -8, -8 ; Współrzędne wierzchołków (-8, -8, -8) do (8, 8, 8)
- .byte -8, 8, -8
- .byte 8, 8, -8
- .byte 8, -8, -8
- .byte -8, -8, 8
- .byte -8, 8, 8
- .byte 8, 8, 8
- .byte 8, -8, 8
- CUBE_EDGES:
- .byte 0, 1
- .byte 1, 2
- .byte 2, 3
- .byte 3, 0
- .byte 4, 5
- .byte 5, 6
- .byte 6, 7
- .byte 7, 4
- .byte 0, 4
- .byte 1, 5
- .byte 2, 6
- .byte 3, 7
- ; Zmienne globalne
- cube_rotation_x: .byte 0 ; Aktualny kąt obrotu wokół osi X
- cube_rotation_y: .byte 0 ; Aktualny kąt obrotu wokół osi Y
- cube_rotation_z: .byte 0 ; Aktualny kąt obrotu wokół osi Z
- ; Program główny
- start:
- ; Inicjalizacja
- sei ; Wyłącz przerwania
- lda #$35 ; Ustaw tryb tekstowy (40 kolumn x 25 wierszy)
- sta $d011
- lda #$00 ; Ustaw kolor czcionki na czarny
- sta $d016
- lda #$3f ; Ustaw kolor tła na biały
- sta $d020
- lda #$10 ; Ustaw adres pamięci ekranu na $4000
- sta $d018
- lda #$2c ; Ustaw wysokość ekranu na 25 wierszy
- sta SCREEN_HEIGHT
- lda #$28 ; Ustaw szerokość ekranu na 40 kolumn
- sta SCREEN_WIDTH
- lda #$ba ; Ustaw rozmiar ekranu (40 x 25 znaków)
- sta SCREEN_SIZE
- lda #$00 ; Wyłącz kursor
- sta $d014
- lda #$01 ; Wyłącz VIC II
- ....
- ....
- ....
- ; i jeszcze multum linijek

w każdym razie w pythonie można zrobić to szybciej i ładniej używając bibliotek pygame i pyopengl
a taki kod prezentuje się następująco
- import pygame
- from pygame.locals import *
- from OpenGL.GL import *
- from OpenGL.GLU import *
- wierzcholki = (
- (1, -1, -1),
- (1, 1, -1),
- (-1, 1, -1),
- (-1, -1, -1),
- (1, -1, 1),
- (1, 1, 1),
- (-1, -1, 1),
- (-1, 1, 1)
- )
- krawedzie = (
- (0, 1),
- (0, 3),
- (0, 4),
- (2, 1),
- (2, 3),
- (2, 7),
- (6, 3),
- (6, 4),
- (6, 7),
- (5, 1),
- (5, 4),
- (5, 7)
- )
- def RysujSześcian():
- glBegin(GL_LINES)
- for krawedz in krawedzie:
- for wierzcholek in krawedz:
- glVertex3fv(wierzcholki[wierzcholek])
- glEnd()
- def main():
- pygame.init()
- rozmiar_okna = (800, 600)
- pygame.display.set_mode(rozmiar_okna, DOUBLEBUF|OPENGL)
- gluPerspective(45, (rozmiar_okna[0]/rozmiar_okna[1]), 0.1, 50.0)
- glTranslatef(0.0, 0.0, -5.0)
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- quit()
- glRotatef(1, 3, 1, 1) # obrót sześcianu
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
- RysujSześcian()
- pygame.display.flip()
- pygame.time.wait(10)
- main()
