How to Draw a Xmas Tree Java Opengl
2D Shapes
Introduction
In this section, we will be learning about each mode of _glBegin
in deep. So, Let's start!
_GL_POINTS
In _GL_POINTS mode, the each vertex is rendered as a single point, with a color specified before it. Example -
_TITLE "Learning OpenGL" 'giving title to your window SCREEN _NEWIMAGE ( 600 , 600 , 32 ) 'creating a window of 600x600 'This is our main loop DO _LIMIT 40 'Adding this will prevent high cpu usage. LOOP SUB _GL () 'Here we'll put our OpenGL commands! _glViewport 0 , 0 , _WIDTH , _HEIGHT 'here _WIDTH() and _HEIGHT() gives the width and height of our window. '_glClearColor 1, .5, 0, 1 _glClear _GL_COLOR_BUFFER_BIT _glColor3f 1 , 1 , 1 _glBegin _GL_POINTS _glVertex2f - 0.5 , 0.5 _glVertex2f 0.5 , 0.5 _glVertex2f 0.5 , - 0.5 _glVertex2f - 0.5 , - 0.5 _glEnd END SUB
You can make the points to appear bigger with the help of _glPointSize(). It syntax is -
_glPointSize( size ) where size is the size of the point and it can take value such as 1,2,10,25.4,etc
_GL_LINES
In _GL_LINES mode, the two vertices are connected to form a line. I've just replace the _GL_POINTS with _GL_LINES.
_TITLE "Learning OpenGL" 'giving title to your window SCREEN _NEWIMAGE ( 600 , 600 , 32 ) 'creating a window of 600x600 'This is our main loop DO _LIMIT 40 'Adding this will prevent high cpu usage. LOOP SUB _GL () 'Here we'll put our OpenGL commands! _glViewport 0 , 0 , _WIDTH , _HEIGHT 'here _WIDTH() and _HEIGHT() gives the width and height of our window. '_glClearColor 1, .5, 0, 1 _glClear _GL_COLOR_BUFFER_BIT _glColor3f 1 , 1 , 1 _glBegin _GL_LINES _glVertex2f - 0.5 , 0.5 _glVertex2f 0.5 , 0.5 _glVertex2f 0.5 , - 0.5 _glVertex2f - 0.5 , - 0.5 _glEnd _glFlush END SUB
It will produce the following output -
_GL_LINE_STRIP
The _GL_LINE_STRIP mode is somewhat similar to _GL_LINES. The only difference is that, in _GL_LINE_STRIP the previous vertex get connected to the current vertex. I've replace _GL_LINES
with _GL_LINE_STRIP
-
_TITLE "Learning OpenGL" 'giving title to your window SCREEN _NEWIMAGE ( 600 , 600 , 32 ) 'creating a window of 600x600 'This is our main loop DO _LIMIT 40 'Adding this will prevent high cpu usage. LOOP SUB _GL () 'Here we'll put our OpenGL commands! _glViewport 0 , 0 , _WIDTH , _HEIGHT 'here _WIDTH() and _HEIGHT() gives the width and height of our window. '_glClearColor 1, .5, 0, 1 _glClear _GL_COLOR_BUFFER_BIT _glColor3f 1 , 1 , 1 _glBegin _GL_LINE_STRIP _glVertex2f - 0.5 , 0.5 _glVertex2f 0.5 , 0.5 _glVertex2f 0.5 , - 0.5 _glVertex2f - 0.5 , - 0.5 _glEnd _glFlush END SUB
This is will produce the following result -
_GL_LINE_LOOP
_GL_LINE_LOOP is similar to _GL_LINE_STRIP. It joins the previous vertex with current vertex and automatically joins the last vertex to the first vertex in order to form a loop. Example -
. .. _glColor3f 1 , 1 , 1 _glBegin _GL_LINE_LOOP _glVertex2f - 0.5 , 0.5 _glVertex2f 0.5 , 0.5 _glVertex2f 0.5 , - 0.5 _glVertex2f - 0.5 , - 0.5 _glEnd . ..
It will produce the following result -
You can also increase the width of the line using _glLineWidth() just like _glPointSize() It has only one arguement for the width of the line. For example - _glLineWidth 3.0
Drawing Circle with _GL_LINE_LOOP
We can use _GL_LINE_LOOP to draw circle. According to polar coordinate, x = cos(phi)r and y = sin(phi)r where 0>=phi>=2pi Here's an example which draw a circle using _GL_LINE_LOOP
_TITLE "Learning OpenGL" 'giving title to your window SCREEN _NEWIMAGE ( 600 , 600 , 32 ) 'creating a window of 600x600 'This is our main loop DO _LIMIT 40 'Adding this will prevent high cpu usage. LOOP SUB _GL () 'Here we'll put our OpenGL commands! _glViewport 0 , 0 , _WIDTH , _HEIGHT 'here _WIDTH() and _HEIGHT() gives the width and height of our window. '_glClearColor 1, .5, 0, 1 _glClear _GL_COLOR_BUFFER_BIT _glColor3f 1 , 1 , 1 r = . 5 _glBegin _GL_LINE_LOOP FOR i = 0 TO _PI ( 2 ) STEP . 05 _glVertex2f COS ( i ) * r , SIN ( i ) * r NEXT _glEnd _glFlush END SUB
This will produce the following result -
_GL_TRIANGLES
As you know, we have already played with _GL_TRIANGLES
. In _GL_TRIANGLES mode, the three vertices get connected to form a color filled triangle. If you replace the previous code with _GL_TRIANGLES, then it will produce the following result -
_GL_TRIANGLE_STRIP
In _GL_TRIANGLE_STRIP mode, the current vertex gets connected with previous 2 vertex to form a triangle. Just like as shown in the figure below -
Here's an example -
_TITLE "Learning OpenGL" 'giving title to your window SCREEN _NEWIMAGE ( 600 , 600 , 32 ) 'creating a window of 600x600 'This is our main loop DO _LIMIT 40 'Adding this will prevent high cpu usage. LOOP SUB _GL () 'Here we'll put our OpenGL commands! _glViewport 0 , 0 , _WIDTH , _HEIGHT 'here _WIDTH() and _HEIGHT() gives the width and height of our window. '_glClearColor 1, .5, 0, 1 _glClear _GL_COLOR_BUFFER_BIT _glColor3f 1 , 1 , 1 _glBegin _GL_TRIANGLE_STRIP _glVertex2f - 0.5 , 0.5 _glVertex2f 0.5 , 0.5 _glVertex2f - 0.5 , - 0.5 _glVertex2f 0.5 , - 0.5 _glEnd _glFlush END SUB
And, we will have the following result -
_GL_TRIANGLE_FAN
In _GL_TRIANGLE_FAN mode, OpenGL draw a connected group of triangles from a origin which is (0,0,0) by default. We will learn how to change this origin soon in higher section. The picture below explain how the vertices are treated in _GL_TRIANGLE_FAN mode -
Here's an example to draw a pentagon using _GL_TRIANGLE_FAN -
_TITLE "Learning OpenGL" 'giving title to your window SCREEN _NEWIMAGE ( 600 , 600 , 32 ) 'creating a window of 600x600 'This is our main loop DO _LIMIT 40 'Adding this will prevent high cpu usage. LOOP SUB _GL () 'Here we'll put our OpenGL commands! _glViewport 0 , 0 , _WIDTH , _HEIGHT 'here _WIDTH() and _HEIGHT() gives the width and height of our window. '_glClearColor 1, .5, 0, 1 _glClear _GL_COLOR_BUFFER_BIT _glColor3f 1 , 1 , 1 'using GL_TRIANGLE_FAN to draw a pentagon N = 5 'No. of sides, try to increase its value to 6,7,10,etc _glBegin _GL_TRIANGLE_FAN FOR i = 0 TO _PI ( 2 ) STEP _PI ( 2 ) / N _glVertex2f COS ( i ) * . 5, SIN ( i ) * . 5 NEXT _glEnd _glFlush END SUB
This is produce the following result -
We can also draw the a solid circle by replacing _GL_LINE_LOOP with _GL_TRIANGLE_FAN in _GL_LINE_LOOP section example.
Exercises
- You already know that I've not discussed about _GL_QUADS, _GL_QUAD_STRIP and _GL_POLYGON. Your homework is to check them out and have fun with them!
somervilleinceed55.blogspot.com
Source: https://ashishkingdom.github.io/OpenGL-Tutorials/2d-shapes/