Author Topic: QB64 REPORT S01E02: "SCREEN modes"  (Read 8808 times)

0 Members and 1 Guest are viewing this topic.

FellippeHeitor

  • Guest
QB64 REPORT S01E02: "SCREEN modes"
« on: June 15, 2020, 08:31:47 pm »
Here's the second episode of QB64 Report, our podcast on all things QB64. In this episode, "SCREEN modes".

Catch it on all major podcast providers or listen straight from https://www.buzzsprout.com/1147208/4174160
« Last Edit: June 15, 2020, 08:41:36 pm by FellippeHeitor »

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
    • View Profile
Re: QB64 REPORT S01E02: "SCREEN modes"
« Reply #1 on: June 15, 2020, 11:11:41 pm »
  • Best Answer
  • Ah so Alt+ something gets us 4 different screen modes without a single line of additional code.

    That's pretty good tip, thanks!

    FellippeHeitor

    • Guest
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #2 on: June 15, 2020, 11:15:49 pm »
  • Best Answer
  • That's alt+enter. The behavior of the key combo can also be customized (and even disabled) with:

    Code: QB64: [Select]

    Offline bplus

    • Global Moderator
    • Forum Resident
    • Posts: 8053
    • b = b + ...
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #3 on: June 15, 2020, 11:40:44 pm »
  • Best Answer
  • Thanks again

    Like the idea of layering when I was thinking how difficult to update screen over and over again for mouse over on buttons, it's on redo whole screen, no it's off, redo whole screen... yikes! But draw an overlapping layer, and you only have to make the image once! Layer on, layer off, layer on, layer off... that should work well!
    « Last Edit: June 16, 2020, 07:15:22 pm by bplus »

    Offline Ashish

    • Forum Resident
    • Posts: 630
    • Never Give Up!
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #4 on: June 16, 2020, 01:31:04 am »
  • Best Answer
  • Squirrels for sale, fried on sticks. - @Richard Frost
    if (Me.success) {Me.improve()} else {Me.tryAgain()}


    My Projects - https://github.com/AshishKingdom?tab=repositories
    OpenGL tutorials - https://ashishkingdom.github.io/OpenGL-Tutorials

    Offline Dav

    • Forum Resident
    • Posts: 792
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #5 on: June 16, 2020, 05:14:33 pm »
  • Best Answer
  • Another great episode!  Ya'll sure do a podcast good together.  Everyone puts in their valuable input, and nobody gets in the way of each other.  It's to the point stuff, and you keep it interesting too.  The episode flows good.  Maybe add some intro + outro music!

    - Dav
    « Last Edit: June 16, 2020, 07:26:46 pm by Dav »

    Offline _vince

    • Seasoned Forum Regular
    • Posts: 422
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #6 on: June 16, 2020, 11:39:26 pm »
  • Best Answer
  • There is the WINDOW statement, QB original, that fixes the coordinate system to whatever you want but no one ever uses it and rightfully so, it's too confusing, but why not?

    Code: QB64: [Select]
    1.  
    2. window (-_pi,1)-(_pi,-1)
    3.  
    4. pset (-_pi,0)
    5.  
    6. for x= -_pi to _pi step 0.1
    7.  
    8. 'wow is this mathematica?
    9.  
    10.         y = sin (x)
    11.  
    12.         line -(x, y)
    13.  
    14.  
    15.  
    « Last Edit: June 17, 2020, 09:08:53 am by _vince »

    Offline bplus

    • Global Moderator
    • Forum Resident
    • Posts: 8053
    • b = b + ...
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #7 on: June 17, 2020, 12:54:20 am »
  • Best Answer
  • There is the WINDOW statement, QB original, that fixes the coordinate system to whatever you want but no one ever uses it and rightfully so, it's too confusing, but why not?

    Code: QB64: [Select]
    1.  
    2. window screen (-_pi,-1)-(_pi,1)
    3.  
    4. pset (-_pi,0)
    5.  
    6. for x= -_pi to _pi step 0.1
    7.  
    8. 'wow is this mathematica?
    9.  
    10.         y = sin (x)
    11.  
    12.         line -(x, y)
    13.  
    14.  
    15.  

    Hey _vince I was showing STx this, since he is always wanting a central origin and y-axis pointed up. Be careful with graphics commands they don't all work and there is a special command to get correct mouse location, probably can find it in Wiki under Window or related keywords.

    Maybe I can dig up the demo I made.
    Code: QB64: [Select]
    1. _TITLE "Test Using Window for Cartesian Coordinate System x = -100 to 100, y = -100 to 100"
    2. 'It seems all graphics commands convert x, y to window system BUT...
    3. 'Mouse and _PrintString do not convert! BUT...
    4. 'Somebody setup a PMAP system that will do these conversions both to grapghics coordinate system and back
    5. ' convert mouse qbx, qby to graphics x, y use
    6. ' PMAP(qbx, 2), PMAP(qby, 3)
    7. ' And to print something at the graphics location use
    8. ' PMAP(graphicsX, 0), PMAP(graphicsY, 1) to _PRINTSTRING to a graphics location
    9.  
    10. CONST xmax = 700, ymax = 700, red = &HFFFF0000, grn = &HFF009900, blu = &HFF0000AA
    11. CONST tlx = -100, tly = 100, brx = 100, bry = -100 ' Cartesian Coordinate System corners for WINDOW command
    12. SCREEN _NEWIMAGE(xmax, ymax, 32)
    13. _SCREENMOVE 300, 40
    14.  
    15. DIM mx, my, a, r, s$
    16.  
    17. WINDOW (tlx, tly)-(brx, bry) ' converts QB csreen to Cartesian Coodianate System
    18. WHILE _KEYDOWN(27) = 0
    19.     CLS
    20.     mx = INT(PMAP(_MOUSEX, 2)): my = INT(PMAP(_MOUSEY, 3)) 'covert mouse to Cart Cood using PMAP
    21.     a = atan360(my, mx) 'mouse angle to origin
    22.     r = INT((mx * mx + my * my) ^ .5)
    23.     LINE (0, 0)-(mx, my), grn 'hypotenuse = radius
    24.     LINE (0, 0)-(mx, 0), blu ' r*cos
    25.     LINE (mx, 0)-(mx, my), red ' r*sin
    26.     arc 0, 0, 10, 0, _R2D(a), &HFFFFFF00 'yellow arc
    27.     s$ = "Mouse (" + _TRIM$(STR$(mx)) + ", " + _TRIM$(STR$(my)) + "), Radius: "
    28.     s$ = s$ + _TRIM$(STR$(r)) + ", Degrees: " + _TRIM$(STR$(_R2D(a) \ 1))
    29.     _PRINTSTRING (PMAP(0, 0), PMAP(-1, 1)), s$
    30.     _PRINTSTRING (PMAP(-95, 0), PMAP(95, 1)), "COS = x/r = " + _TRIM$(STR$(mx / r))
    31.     _PRINTSTRING (PMAP(-95, 0), PMAP(89, 1)), "SIN = y/r = " + _TRIM$(STR$(my / r))
    32.     IF mx <> 0 THEN _PRINTSTRING (PMAP(-95, 0), PMAP(83, 1)), "TAN = y/x = " + _TRIM$(STR$(my / mx)) 'EDIT
    33.     _DISPLAY
    34.     _LIMIT 60
    35.  
    36. ' A regular graphic draw still works correctly in a Cartesian Window System!
    37. 'note: degrees start due East = 0 and go clockwise: South = 90, West = 180, North = 270
    38. SUB arc (x, y, r, degStart, degStop, c~&)
    39.  
    40.     DIM rs, re, a, ax, ay, lastx, lasty
    41.     'x, y origin, r = radius, c = color
    42.  
    43.     'degStart is first angle clockwise from due East = 0 degrees
    44.     ' arc will start drawing there and clockwise until degStop angle reached, unless in Cartesain Window
    45.  
    46.     IF degStop < degStart THEN
    47.         arc x, y, r, degStart, 360, c~&
    48.         arc x, y, r, 0, degStop, c~&
    49.     ELSE
    50.         rs = _D2R(degStart): re = _D2R(degStop)
    51.         FOR a = rs TO re STEP 1 / (7 * r)
    52.             ax = x + r * COS(a)
    53.             ay = y + r * SIN(a)
    54.             IF a <> rs THEN LINE (lastx, lasty)-(ax, ay), c~&
    55.             lastx = ax: lasty = ay
    56.         NEXT
    57.     END IF
    58.  
    59. 'need to match degrees going around clockwise up to full circle
    60. FUNCTION atan360 (y, x)
    61.     DIM test
    62.     test = _ATAN2(y, x)
    63.     IF test < 0 THEN atan360 = _PI(2) + test ELSE atan360 = test
    64.  
    65.  

    See the PMAP for the mouse?
    « Last Edit: June 17, 2020, 12:56:47 am by bplus »

    Offline OldMoses

    • Seasoned Forum Regular
    • Posts: 469
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #8 on: June 17, 2020, 08:43:55 am »
  • Best Answer
  • I frequently use the WINDOW statement to redefine the coordinate system. I just prefer not having to flip the mathematics around. I've sometimes wondered if it had any particular effect on execution speeds, but QB64 hasn't let me down in that respect yet.

    Example is a quickie graphing routine that I wrote to help me with my math function studies. It redefines the screen for x left to right ascending and y bottom to top ascending. That's how I remember it from school. I just comment in or out what I need to look at.

    Code: QB64: [Select]
    1. A& = _NEWIMAGE(650, 650, 32)
    2. _TITLE "Graph"
    3.  
    4. WINDOW (-15, 15)-(15, -15)
    5. g = -16
    6.     g = g + 1
    7.     LINE (-15, g)-(15, g), &H7F7F7F7F '                         horizontal grid lines
    8.     LINE (g, -15)-(g, 15), &H7F7F7F7F '
    9. LOOP UNTIL g = 15
    10. LINE (0, -15)-(0, 15), &HFF0000FF, BF
    11. LINE (-15, 0)-(15, 0), &HFF0000FF, BF
    12. FOR x = -15 TO 15 STEP .01
    13.  
    14.     'FORMULAS
    15.     'y = ABS(x) ^ .5
    16.     'y = ABS(x)
    17.     'y = -1 * (x * x)
    18.     'y = -3 * x ^ 2 + 6 * x + 72
    19.     'y = x ^ 2 + 7 * x + 6
    20.     'y = 4 * x ^ 2 - (12 * x) + 9
    21.     'y = (x + 2) / 6 ^ 2
    22.     'y = 2 * (x * x) + 2
    23.     'y = 2 * x - 4
    24.     'y = (x * x) - 2 * x
    25.     'y = 7 * x ^ 3 - 63 * x
    26.     'y = -.05 * x * x + 6 'parabola
    27.     'y = (.5 * x) ^ 3
    28.     y = SIN(x) 'sine wave
    29.     'y = COS(x)
    30.     'y = TAN(x)
    31.     'y = TAN(x) ^ 2
    32.     'y = _ATAN2(x, 1)
    33.     'y = _CSC(x)
    34.     'y = 3 / (x - 2) + 1
    35.     'y = (x ^ 2 * -_PI) / 6
    36.     'y = -.33333 * (x + 1) ^ 3 - 1
    37.     'y = (x + 2) / (x - 6)
    38.     'y = (x - 6) ^ 2
    39.     'y = 2 * (x * x)
    40.     'y = x / (x * x) - 4
    41.     'y = (x * x) / 2 * (x * x)
    42.     'IF x < 0 THEN
    43.     '    y = 3 * x + 4
    44.     'ELSE
    45.     '    y = -x + 2
    46.     'END IF
    47.  
    48.     'y = (x + 2) ^ 2 - 1
    49.     'y1 = x * x
    50.     'y2 = -(x - 3) ^ 2 + 2
    51.  
    52.     'DISPLAY CODE
    53.     PSET (x, y)
    54.     'PSET (x, y1), &HFFFF0000
    55.     'PSET (x, y2), &HFF00FF00
    56.     'LINE (x, y)-(x, -15), &HFF0000FF
    57.     'LINE (x, y)-(x, 15), &HFF000000
    58.  

    Offline _vince

    • Seasoned Forum Regular
    • Posts: 422
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #9 on: June 17, 2020, 09:16:18 am »
  • Best Answer
  • I just noticed that WINDOW SCREEN doesn't seem to allow you to have y go up from bottom to top but WINDOW does.  I corrected my code above accordingly - the sine wave is now the correct phase with the origin being the center of the screen.

    Offline bplus

    • Global Moderator
    • Forum Resident
    • Posts: 8053
    • b = b + ...
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #10 on: June 17, 2020, 12:50:28 pm »
  • Best Answer
  • I just noticed that WINDOW SCREEN doesn't seem to allow you to have y go up from bottom to top but WINDOW does.  I corrected my code above accordingly - the sine wave is now the correct phase with the origin being the center of the screen.

    Oops sorry I missed WINDOW SCREEN in your code _vince.

    WINDOW does seem to me to maintain consistent and correct trig function for the angle going counter-clockwise as it increases. There is trouble (as I recall) trying to draw arcs with CIRCLE using the start and stop angles which is why I use a separate arc routine that works fine without any change to the trig functions, eg using - sign with SIN. The demo is supposed to demo that, the trig math remains consistently correct, using the WINDOW command that sends increasing radian angles counter-clockwise which is all the math enthusiasts want ie for the graphics to remain consistent with their schooling.

    This is why I showed it to STx as he is jumping through hoops to correct BASIC graphic direction of y increasing as you go down the screen. WINDOW does it with some caveats I mentioned (probably more). Well STx confuses the issue with 3D before getting the WINDOW under his belt, of course I don't know ship about GL which might be goofed 3D wise when coding 3D WITH _GL commands, I don't know, but STx does not use that either I am pretty sure.

    Oh I notice another discovery I made, use PMAP to correct mouse locations in WINDOW and also _PRINTSCREEN locations are fixed with PMAP :) Ha! but it is a challenge to think in text locations with a Cartesian Coordinate System.

    I suppose more WINDOW examples and practice would help clear things up.
    « Last Edit: June 17, 2020, 12:56:41 pm by bplus »

    Offline STxAxTIC

    • Library Staff
    • Forum Resident
    • Posts: 1091
    • he lives
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #11 on: June 17, 2020, 01:10:00 pm »
  • Best Answer
  • The behavior of the y coordinate is still backwards by default. Whether you use WINDOW or custom LINE and PSET is a matter of taste.

    And what's this shit about me being confused about 3D? Spell that out for me, cause these sounds like the ramblings of someone who learned trig upside down...

    Window is cute but redundant, and so are you bplus :) just kidding
    « Last Edit: June 17, 2020, 01:14:33 pm by STxAxTIC »
    You're not done when it works, you're done when it's right.

    Offline bplus

    • Global Moderator
    • Forum Resident
    • Posts: 8053
    • b = b + ...
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #12 on: June 17, 2020, 02:41:24 pm »
  • Best Answer
  • The behavior of the y coordinate is still backwards by default. Whether you use WINDOW or custom LINE and PSET is a matter of taste.

    And what's this shit about me being confused about 3D? Spell that out for me, cause these sounds like the ramblings of someone who learned trig upside down...

    Window is cute but redundant, and so are you bplus :) just kidding


    Quote
    The behavior of the y coordinate is still backwards by default. Whether you use WINDOW or custom LINE and PSET is a matter of taste.

    Nope! add something to a y coordinate and it goes up the screen not down with proper WINDOW setup.

    Code: QB64: [Select]
    1.  
    2. _TITLE "Test Using Window for Cartesian Coordinate System x = -100 to 100, y = -100 to 100"
    3. 'It seems all graphics commands convert x, y to window system BUT...
    4. 'Mouse and _PrintString do not convert! BUT...
    5. 'Somebody setup a PMAP system that will do these conversions both to grapghics coordinate system and back
    6. ' convert mouse qbx, qby to graphics x, y use
    7. ' PMAP(qbx, 2), PMAP(qby, 3)
    8. ' And to print something at the graphics location use
    9. ' PMAP(graphicsX, 0), PMAP(graphicsY, 1) to _PRINTSTRING to a graphics location
    10.  
    11. CONST xmax = 700, ymax = 700, red = &HFFFF0000, grn = &HFF009900, blu = &HFF0000AA
    12. CONST tlx = -100, tly = 100, brx = 100, bry = -100 ' Cartesian Coordinate System corners for WINDOW command
    13. SCREEN _NEWIMAGE(xmax, ymax, 32)
    14. _SCREENMOVE 300, 40
    15.  
    16. DIM mx, my, a, r, s$
    17.  
    18. WINDOW (tlx, tly)-(brx, bry) ' converts QB csreen to Cartesian Coodianate System
    19.  
    20. x = -100: y = -100
    21. PRINT "From bottom left to top right increasing x and y by 1"
    22. FOR i = 1 TO 201
    23.     x = x + 1
    24.     y = y + 1
    25.     PSET (x, y)
    26.     _LIMIT 10
    27.  
    28.  
    29.  

    and if you don't get this there is no point in arguing and name calling.

    And I am saying you, STx, confuse the issue when bringing 3D into the discussion about y going up or down.
    ie How the right hand rule is there or not depends on how you set up the z axis with or without WINDOW.

    If _GL commands for 3D preserve right hand rule is beyond my scope of experience to comment.
    « Last Edit: June 17, 2020, 03:06:12 pm by bplus »

    Offline STxAxTIC

    • Library Staff
    • Forum Resident
    • Posts: 1091
    • he lives
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #13 on: June 17, 2020, 03:59:53 pm »
  • Best Answer
  • You are respondng to the wrong concern bplus, did you notice the lack of resistance whilst making your windmill slam dunks against no opponent?

    If you think the WINDOW statement occurs in a program by default, as I was saying it does not, then I think you don't have qb64 v 1.4 installed. When I go to file new, the default behavior is as if window is not called. I just got a blank blue screen with a backwards y direction.

    Or is window just jumping through hoops? Anyway it's a redundant statement if you've solved this another way and who cares. And wth are you saying about me and 3d again? I missed it twice. People might actually believe you, which is why I need to call you out each time you mention it.
    You're not done when it works, you're done when it's right.

    Offline STxAxTIC

    • Library Staff
    • Forum Resident
    • Posts: 1091
    • he lives
      • View Profile
    Re: QB64 REPORT S01E02: "SCREEN modes"
    « Reply #14 on: June 17, 2020, 04:05:53 pm »
  • Best Answer
  • Oh wait I get what you're saying

    No, the right hand rule has a 3d implication even when all coordinates are in 2d strictly, it does not confuse the issue to need the right hand rule to be correct in a strictly 2d system. I see what you want to mean though, honest.

    « Last Edit: June 17, 2020, 04:07:20 pm by STxAxTIC »
    You're not done when it works, you're done when it's right.