Оглавление


§ Описание

Когда-то я очень хотел создать трехмерную графику на Бейсике, и вот спустя много лет, наконец-то, взялся за дело и сделал это. Но и не только. Помимо самой графики, также научился использовать буфер для того, чтобы рисовать сначала в нем, а потом показывать на экране. Это нерационально, но все-таки, это работает.
Snimok_ekrana_ot_2023-05-25_19-33-08.png
Скриншот экрана окна Бейсика. А также можно скачать CRAFT.BMP, для источника данных.

§ Основная программа

SCREEN 13 CONST NEAR = 0.5 TYPE vec2i x AS INTEGER y AS INTEGER END TYPE TYPE vec3 x AS SINGLE y AS SINGLE z AS SINGLE u AS SINGLE v AS SINGLE END TYPE TYPE trg A1 AS SINGLE: A2 AS SINGLE: A3 AS SINGLE B1 AS SINGLE: B2 AS SINGLE: B3 AS SINGLE C1 AS SINGLE: C2 AS SINGLE: C3 AS SINGLE D1 AS SINGLE: D2 AS SINGLE: D3 AS SINGLE END TYPE ' Point list for triangle DIM SHARED vc(0 TO 7) AS vec3 DIM SHARED tile(0 TO 15, 0 TO 15) AS INTEGER ' Matrix operation (ma - camera, mb - operation) DIM SHARED ma(0 TO 3, 0 TO 3) AS SINGLE DIM SHARED mb(0 TO 3, 0 TO 3) AS SINGLE DIM SHARED cam AS vec3 DIM SHARED rot AS vec3 DIM wr(0 TO 3, 0 TO 3, 0 TO 3) AS INTEGER ' Vertex (4 back, 4 front) DATA -1, 1, 1 DATA 1, 1, 1 DATA 1,-1, 1 DATA -1,-1, 1 DATA -1, 1,-1 DATA 1, 1,-1 DATA 1,-1,-1 DATA -1,-1,-1 FACES: ' Quads faces a,b,c,d|tex DATA 0, 4, 7, 3 DATA 0, 1, 5, 4 DATA 4, 5, 6, 7 DATA 1, 0, 3, 2 DATA 2, 3, 7, 6 DATA 5, 1, 2, 6 ' Read all vertexes FOR i = 0 TO 7: READ vc(i).x, vc(i).y, vc(i).z: NEXT ' Sprites LOADPALETTE ' Loading Palette from CRAFT.BMP ' Camera position cam.x = 1.5: cam.y = 3: cam.z = -4 rot.x = 0: rot.y = 0: rot.z = 0 ' World definition wr(0,0,3)=1 wr(0,0,2)=2 wr(0,0,1)=3 wr(0,0,0)=4 wr(2,2,0)=1 wr(2,1,2)=2 CLEARBUF FOR k = 0 TO 3 FOR i = 0 TO 3 FOR j = 0 TO 3 t = wr(j, i, k) IF t > 0 THEN LOADTILE t MOD 16, t \ 16 DRAWCUBE 2*j, 2*i, 2*k END IF NEXT NEXT NEXT RESTOREBUF