This topic is now archived and is closed to further replies.

Qbasic 3d rotation and buffing

This topic is 5945 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post

Link to post
Share on other sites
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: 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

Share this post

Link to post
Share on other sites
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":


'320 x 200


'Make grayscale pallette (0 = black; 255 = white)

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

'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


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 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 [url][/url]. 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

Share this post

Link to post
Share on other sites