Example of using "Canvas" form "Graphics" library to display 3D graphics.

Dependencies:   BSP_DISCO_F746NG Graphics mbed

Committer:
karpent
Date:
Thu Nov 10 15:38:50 2016 +0000
Revision:
1:4a5e329e617b
Child:
3:aca7fe2d44b3
New models added - Cube and Sphere

Who changed what in which revision?

UserRevisionLine numberNew contents of line
karpent 1:4a5e329e617b 1 //
karpent 1:4a5e329e617b 2 // Cube.cpp - example of usage graphics commands to create 3D graphics.
karpent 1:4a5e329e617b 3 //
karpent 1:4a5e329e617b 4 // This example is based on code written by
karpent 1:4a5e329e617b 5 // Fabio de Albuquerque Dela Antonio (fabio914 at gmail.com)
karpent 1:4a5e329e617b 6 // See : https://github.com/fabio914/arduinogl/blob/master/examples
karpent 1:4a5e329e617b 7 //
karpent 1:4a5e329e617b 8
karpent 1:4a5e329e617b 9 #include "Cube.h"
karpent 1:4a5e329e617b 10
karpent 1:4a5e329e617b 11 // Constructor
karpent 1:4a5e329e617b 12 Cube::Cube(Display * display)
karpent 1:4a5e329e617b 13 : Angle()
karpent 1:4a5e329e617b 14 {
karpent 1:4a5e329e617b 15 glUseCanvas(display);
karpent 1:4a5e329e617b 16
karpent 1:4a5e329e617b 17 _perspectiveAspect = display->DisplayWidth() / display->DisplayHeight();
karpent 1:4a5e329e617b 18 }
karpent 1:4a5e329e617b 19
karpent 1:4a5e329e617b 20 /**
karpent 1:4a5e329e617b 21 * @brief Model setup.
karpent 1:4a5e329e617b 22 * @retval None
karpent 1:4a5e329e617b 23 */
karpent 1:4a5e329e617b 24 void Cube::Setup()
karpent 1:4a5e329e617b 25 {
karpent 1:4a5e329e617b 26 glPointSize(4);
karpent 1:4a5e329e617b 27
karpent 1:4a5e329e617b 28 glMatrixMode(GL_PROJECTION);
karpent 1:4a5e329e617b 29 glLoadIdentity();
karpent 1:4a5e329e617b 30
karpent 1:4a5e329e617b 31 gluPerspective(30.0, _perspectiveAspect, 0.1f, 9999.f);
karpent 1:4a5e329e617b 32
karpent 1:4a5e329e617b 33 glMatrixMode(GL_MODELVIEW);
karpent 1:4a5e329e617b 34 }
karpent 1:4a5e329e617b 35
karpent 1:4a5e329e617b 36 /**
karpent 1:4a5e329e617b 37 * @brief Renders a square for given view angle and scale.
karpent 1:4a5e329e617b 38 * @param None
karpent 1:4a5e329e617b 39 * @retval None
karpent 1:4a5e329e617b 40 */
karpent 1:4a5e329e617b 41 void Cube::Render()
karpent 1:4a5e329e617b 42 {
karpent 1:4a5e329e617b 43 const float scale = 2.5;
karpent 1:4a5e329e617b 44
karpent 1:4a5e329e617b 45 // Put the initial matrix at glMatrices[glmatrixMode == GL_PROJECTION]
karpent 1:4a5e329e617b 46 glLoadIdentity();
karpent 1:4a5e329e617b 47
karpent 1:4a5e329e617b 48 // Transform matrix
karpent 1:4a5e329e617b 49 gluLookAt(10, 8, -10, 0, 0, 0, 0, 1, 0);
karpent 1:4a5e329e617b 50
karpent 1:4a5e329e617b 51 glRotatef(angle, 0.f, 1.f, 0.f);
karpent 1:4a5e329e617b 52 glScalef(scale, scale, scale);
karpent 1:4a5e329e617b 53
karpent 1:4a5e329e617b 54 DrawCube();
karpent 1:4a5e329e617b 55 }
karpent 1:4a5e329e617b 56
karpent 1:4a5e329e617b 57
karpent 1:4a5e329e617b 58 void Cube::DrawCube()
karpent 1:4a5e329e617b 59 {
karpent 1:4a5e329e617b 60 glBegin(GL_POLYGON);
karpent 1:4a5e329e617b 61 glVertex3f(-1, -1, -1);
karpent 1:4a5e329e617b 62 glVertex3f(1, -1, -1);
karpent 1:4a5e329e617b 63 glVertex3f(1, 1, -1);
karpent 1:4a5e329e617b 64 glVertex3f(-1, 1, -1);
karpent 1:4a5e329e617b 65 glEnd();
karpent 1:4a5e329e617b 66
karpent 1:4a5e329e617b 67 glBegin(GL_POLYGON);
karpent 1:4a5e329e617b 68 glVertex3f(1, -1, -1);
karpent 1:4a5e329e617b 69 glVertex3f(1, -1, 1);
karpent 1:4a5e329e617b 70 glVertex3f(1, 1, 1);
karpent 1:4a5e329e617b 71 glVertex3f(1, 1, -1);
karpent 1:4a5e329e617b 72 glEnd();
karpent 1:4a5e329e617b 73
karpent 1:4a5e329e617b 74 glBegin(GL_POLYGON);
karpent 1:4a5e329e617b 75 glVertex3f(1, -1, 1);
karpent 1:4a5e329e617b 76 glVertex3f(-1, -1, 1);
karpent 1:4a5e329e617b 77 glVertex3f(-1, 1, 1);
karpent 1:4a5e329e617b 78 glVertex3f(1, 1, 1);
karpent 1:4a5e329e617b 79 glEnd();
karpent 1:4a5e329e617b 80
karpent 1:4a5e329e617b 81 glBegin(GL_POLYGON);
karpent 1:4a5e329e617b 82 glVertex3f(-1, -1, 1);
karpent 1:4a5e329e617b 83 glVertex3f(-1, -1, -1);
karpent 1:4a5e329e617b 84 glVertex3f(-1, 1, -1);
karpent 1:4a5e329e617b 85 glVertex3f(-1, 1, 1);
karpent 1:4a5e329e617b 86 glEnd();
karpent 1:4a5e329e617b 87
karpent 1:4a5e329e617b 88 glBegin(GL_POLYGON);
karpent 1:4a5e329e617b 89 glVertex3f(-1, -1, 1);
karpent 1:4a5e329e617b 90 glVertex3f(1, -1, 1);
karpent 1:4a5e329e617b 91 glVertex3f(1, -1, -1);
karpent 1:4a5e329e617b 92 glVertex3f(-1, -1, -1);
karpent 1:4a5e329e617b 93 glEnd();
karpent 1:4a5e329e617b 94
karpent 1:4a5e329e617b 95 glBegin(GL_POLYGON);
karpent 1:4a5e329e617b 96 glVertex3f(-1, 1, -1);
karpent 1:4a5e329e617b 97 glVertex3f(1, 1, -1);
karpent 1:4a5e329e617b 98 glVertex3f(1, 1, 1);
karpent 1:4a5e329e617b 99 glVertex3f(-1, 1, 1);
karpent 1:4a5e329e617b 100 glEnd();
karpent 1:4a5e329e617b 101 }