Jump to content

  • Log In with Google      Sign In   
  • Create Account

Qbasic 3d rotation and buffing


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 R3sistance   Members   -  Reputation: 122

Like
Likes
Like

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 Dracoliche   Members   -  Reputation: 122

Like
Likes
Like

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

#3 TerranFury   Members   -  Reputation: 142

Like
Likes
Like

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":



'$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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS