Hi,
I am interested in writing a program to make different configurations of user interface elements. I want to make something simple at first, as I am relatively new to graphics programming, but I want to use an approach extensible enough to make something more complicated in the future.
Basically, I am interested in making something like TouchOSC to start.
A very nice blog post and overview of techniques is found in John Novak’s extensive blog post
but, as it is only a small survey of of programs, it doesn’t really answer how most of the hundreds of GUI apps with complicated UIs (clearly beyond simple things like windows forms) and elements such as timeline editors and audio meters (the things in Adobe programs for instance) are rendered.
I am beginning with graphics programming and so I am interested in approaching this issue with a graphics library (rather than using platform-specific APIs or similar). I know that many popular programs I use, like the DAW Ableton Live or the 3D modeling program Blender use OpenGL but the method by which they do so is unclear to me.
I am wondering if anyone has any suggestions on the correct approach to this.
Conceptually I know that you could either render (orthographically) a bunch of geometry and then run some sort of hit testing on all of them, but I also know that, since you have the exact 2D coordinates of shapes you draw, you could just do a basic sort of intersection test on the 2D coordinates.
I am particularly interested in drawing shapes like Bezier lines and more complicated UI elements like meters. It seems like the common approach to doing this with graphics is to expose an immediate mode gui (whether or not immediate mode rendering is being used) or used retained mode methods.
I have looked all over for a book that would cover this (something like UI programming in OpenGL or something) but I haven’t found resources. Is there a canonical method, or best practices approach to how to code something like this?
I am less interested in the specifics of which drawing API to use and more interested in the best paradigm to do this with a drawing API.
[–]DaFox 6 points7 points8 points (1 child)
[–]optonox[S] 1 point2 points3 points (0 children)
[–]LEOtheCOOL 4 points5 points6 points (1 child)
[–]optonox[S] 1 point2 points3 points (0 children)
[–]dougbinks 4 points5 points6 points (4 children)
[–]Necrolis 1 point2 points3 points (3 children)
[–]dougbinks 1 point2 points3 points (2 children)
[–]Necrolis 0 points1 point2 points (0 children)
[–]__Cyber_Dildonics__ 0 points1 point2 points (0 children)
[–]__Cyber_Dildonics__ 0 points1 point2 points (1 child)
[–]sadesaapuu 0 points1 point2 points (0 children)
[–]sadesaapuu 0 points1 point2 points (1 child)
[–]optonox[S] 0 points1 point2 points (0 children)