Qbasic 3d rotation and buffing
Started by R3sistance, Oct 05 2001 12:07 AM
2 replies to this topic
#1 Members - Reputation: 122
Posted 05 October 2001 - 12:07 AM
does anybody know how to program qbasic 3d objects so they appear where they should and use rotation on an object. i can't do most of this i checked qbasic 3d enchanced but they don't explain it clearly enough.
.
Edited by - R3sistance on October 5, 2001 7:08:29 AM
Sponsor:
#2 Members - Reputation: 122
Posted 05 October 2001 - 02:31 AM
Well, if you're using qbasic to display 3D graphics, my advice is: get one of those library thingies, like DirectQB. This site has a few 3D demos, IIRC: http://www.neozones.cjb.net/. All the ones that run at an appreciable speed use a library of some sort. As for the maths involved, I can't help much there sorry 
3D graphics in qbasic are a pain in the bum and don't work very well to boot.
Edited by - Dracoliche on October 5, 2001 9:31:47 AM
3D graphics in qbasic are a pain in the bum and don't work very well to boot.
Edited by - Dracoliche on October 5, 2001 9:31:47 AM
#3 Members - Reputation: 142
Posted 08 October 2001 - 08:31 AM
The best way to do serious graphics in QB, short of using an external library, is to fill one of those PUT arrays yourself using POKE, and then PUT it on the screen. This is the only way you can do pixel plotting with any kind of speed short of using ASM. I think you'll end up using MODE 13 (known as 13h to C++ and ASM programmers)
Here's an example that will fill the screen with "static":
There may be errors in this code; but I'm sure that it'll get you headed along the right track. The people at qbasic.com should be able to help you.
Once you can do fast pixel-plotting using the aforementioned technique (PSET is SLOOOOOOW) then you'll just have to do the same old 3d projection and tranformation stuff everyone else does.
That is:
screen_x = vertex.x / vertex.z
screen_y = vertex.y / vertex.z
You can find a simple tutorial at http://www.qbasicnews.com/files/Tutorials/tutor8.txt. It isn't the greatest in the world, but it's a start.
Hope that helps.
Edited by - TerranFury on October 8, 2001 3:32:07 PM
Here's an example that will fill the screen with "static":
'$DYNAMIC
DEFINT A-Z
SCREEN 13
'320 x 200
CLS
'Make grayscale pallette (0 = black; 255 = white)
DIM v AS INTEGER
FOR v = 0 TO 255
OUT &H3C8, v 'color index
OUT &H3C9, INT(v * (63 / 255)) 'r
OUT &H3C9, INT(v * (63 / 255)) 'g
OUT &H3C9, INT(v * (63 / 255)) 'b
NEXT v
'Note: ArraySize = ((ScreenWidth * ScreenHeight) + 4) * (BPP / 16) = 32002
DIM pixels(32002) AS INTEGER 'Create array
DIM memloc AS LONG
memloc = VARSEG(pixels(0)) 'Get memory location of array
' Write header.
' 1st 2 words = width * 8
' 2nd 2 words = height * 1
' Note: word = 2 bytes = 16 bits = 1 Integer Variable
pixels(0) = 320 * 8
pixels(1) = 200
DEF SEG = memloc 'Gain direct access to array memory
offset = 4
FOR y = 0 TO 199
FOR x = 0 TO 319
POKE offset, INT(RND * 256) 'Put random value at x, y
offset = offset + 1
NEXT x
NEXT y
DEF SEG
PUT (0, 0), pixels, PSET
There may be errors in this code; but I'm sure that it'll get you headed along the right track. The people at qbasic.com should be able to help you.
Once you can do fast pixel-plotting using the aforementioned technique (PSET is SLOOOOOOW) then you'll just have to do the same old 3d projection and tranformation stuff everyone else does.
That is:
screen_x = vertex.x / vertex.z
screen_y = vertex.y / vertex.z
You can find a simple tutorial at http://www.qbasicnews.com/files/Tutorials/tutor8.txt. It isn't the greatest in the world, but it's a start.
Hope that helps.
Edited by - TerranFury on October 8, 2001 3:32:07 PM






