⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vector.bas

📁 QBasic下的3D图形引擎
💻 BAS
字号:
DIM ox(100)
DIM oy(100)
DIM oz(100)

DIM nx(100)
DIM ny(100)
DIM nz(100)


'I'm trying to make it so that the objects just rotate instead of orbit
'and rotate.  If you have any suggestions, they'd be appreciated.

CLS
PRINT "******** 3d vector graphics engine ver 1.91 by Jake Billings ********"
PRINT
PRINT "- Use numeric pad to orbit around origin horizontally or vertically."
PRINT "- You can be orbiting both horizontally and vertically simultaneously."
PRINT "- keep pressing the direction to speed up orbitation up to 30 times that"
PRINT "of the slowest speed."
PRINT "- Press s to change settings."
PRINT "- Press r to make a new object with same settings."
PRINT "- Press 5 to stop the object from orbiting."
PRINT "- Press ESC to exit."
PRINT "- Press any key to begin."
PRINT
PRINT "NOTE: the more the object is blinking when it first appears, "
PRINT "the slower it will animate."
FOR c = 1 TO 2 STEP 0
        goon$ = INKEY$
        IF goon$ > "" THEN EXIT FOR
NEXT c

10 CLS
PRINT "1 - Randomly generated object"
PRINT "2 - User defined point coordinates"
INPUT choose

IF choose = 1 THEN
        CLS
        PRINT "Enter max. possible points(minimum of 3)"
        PRINT
        PRINT "NOTE: more points cause animation to slow."
        PRINT "Past 10, major slowdown can occur."
        INPUT maxpoints
END IF
5 IF choose = 2 THEN
        CLS
        PRINT "Enter number of points(minimum of 3)"
        PRINT
        PRINT "NOTE: more points cause animation to slow."
        PRINT "Past 10, major slowdown can occur."
        INPUT maxpoints
        points = maxpoints
        FOR s = 1 TO maxpoints
                PRINT "Enter x coordinate number "; s; "."
                INPUT ox(s)
                PRINT "Enter y coordinate number "; s; "."
                INPUT oy(s)
                PRINT "Enter z coordinate number "; s; "."
                INPUT oz(s)
        NEXT s
END IF

CLS
PRINT
PRINT "0 - Black"
PRINT "1 - Blue"
PRINT "2 - Green"
PRINT "3 - Turquoise"
PRINT "4 - Red"
PRINT "5 - Purple"
PRINT "6 - Brown"
PRINT "7 - Off-White"
PRINT "8 - Gray"
PRINT "9 - Cyan"
PRINT "10 - Light Green"
PRINT "11 - Light Turquoise"
PRINT "12 - Pink"
PRINT "13 - Light Purple"
PRINT "14 - Yellow"
PRINT "15 - White"
PRINT
INPUT "Background color"; bclor
INPUT "Object color"; clor
PRINT
PRINT "NOTE: darker colors tend to blink less"


CLS
SCREEN 12

20 CLS
IF choose = 1 THEN
        RANDOMIZE TIMER
        rndpoints = INT(RND * maxpoints) + 3
        points = rndpoints
        FOR t = 1 TO points
                ox(t) = INT(RND * 200) + 1
                oy(t) = INT(RND * 200) + 1
                oz(t) = INT(RND * 200) + 1
        NEXT t
END IF

rotatex = 1
rotatey = 1
anglex = 0
angley = 0
angchange = .01
originx = 320
originy = 240

PAINT (1, 1), bclor

FOR i = 1 TO 2 STEP 0
        move$ = INKEY$
       
        IF rotatey = 1 OR rotatex = 1 THEN
        FOR d = 1 TO points
                FOR e = 1 TO points
                        LINE (ox(d) + originx, oy(d) + originy)-(ox(e) + originx, oy(e) + originy), bclor
                NEXT e
        NEXT d
        END IF
       
        IF rotatey = 1 THEN
       
                FOR b = 1 TO points
                        nz(b) = oz(b) * COS(angley) - ox(b) * SIN(angley)
                        nx(b) = oz(b) * SIN(angley) + ox(b) * COS(angley)
                        ny(b) = oy(b)
                        ox(b) = nx(b)
                        oy(b) = ny(b)
                        oz(b) = nz(b)
                NEXT b
        END IF
       
       
       
       
 IF rotatex = 1 THEN
      
        FOR b = 1 TO points
                ny(b) = oy(b) * COS(anglex) - oz(b) * SIN(anglex)
                nz(b) = oy(b) * SIN(anglex) + oz(b) * COS(anglex)
                nx(b) = ox(b)
                ox(b) = nx(b)
                oy(b) = ny(b)
                oz(b) = nz(b)
        NEXT b
 END IF
       
       
        FOR f = 1 TO points
                FOR g = 1 TO points
                        LINE (nx(f) + originx, ny(f) + originy)-(nx(g) + originx, ny(g) + originy), clor
                NEXT g
        NEXT f
   
IF move$ = "8" THEN
        anglex = anglex - angchange
        rotatex = 1
END IF
IF move$ = "2" THEN
        anglex = anglex + angchange
        rotatex = 1
END IF
IF move$ = "4" THEN
        angley = angley - angchange
        rotatey = 1
END IF
IF move$ = "6" THEN
        angley = angley + angchange
        rotatey = 1
END IF
IF move$ = "5" THEN
        anglex = 0
        angley = 0
        rotatex = 0
        rotatey = 0
END IF
IF anglex > .3 THEN anglex = .3
IF angley > .3 THEN angley = .3
IF move$ = CHR$(27) THEN END
IF move$ = "s" THEN GOTO 10
IF move$ = "r" THEN
        IF choose = 1 THEN GOTO 20
        IF choose = 2 THEN GOTO 5
END IF
NEXT i

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -