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

Dependencies:   BSP_DISCO_F746NG Graphics mbed

Committer:
karpent
Date:
Fri Nov 11 17:06:53 2016 +0000
Revision:
3:aca7fe2d44b3
Parent:
2:ef3093a7a43e
New 3d models added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
karpent 1:4a5e329e617b 1 //
karpent 1:4a5e329e617b 2 // Sphere.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 "Sphere.h"
karpent 1:4a5e329e617b 10
karpent 1:4a5e329e617b 11 // Constructor
karpent 2:ef3093a7a43e 12 Sphere::Sphere(Display * display) : Model()
karpent 1:4a5e329e617b 13 {
karpent 1:4a5e329e617b 14 glUseCanvas(display);
karpent 1:4a5e329e617b 15
karpent 1:4a5e329e617b 16 _perspectiveAspect = display->DisplayWidth() / display->DisplayHeight();
karpent 1:4a5e329e617b 17 }
karpent 1:4a5e329e617b 18
karpent 1:4a5e329e617b 19
karpent 1:4a5e329e617b 20 void Sphere::Setup()
karpent 1:4a5e329e617b 21 {
karpent 2:ef3093a7a43e 22 // Make the model a little bigger
karpent 2:ef3093a7a43e 23 SetFixedScaleMode(3.1f);
karpent 2:ef3093a7a43e 24
karpent 1:4a5e329e617b 25 glClear(GL_COLOR_BUFFER_BIT);
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 void Sphere::Render()
karpent 1:4a5e329e617b 38 {
karpent 2:ef3093a7a43e 39 float scale = GetScaleValue();
karpent 1:4a5e329e617b 40
karpent 1:4a5e329e617b 41 glLoadIdentity();
karpent 1:4a5e329e617b 42 gluLookAt(10, 8, -10, 0, 0, 0, 0, 1, 0);
karpent 1:4a5e329e617b 43
karpent 1:4a5e329e617b 44 glScalef(scale, scale, scale);
karpent 2:ef3093a7a43e 45 glRotatef(GetAngleValue(), 0.f, 1.f, 0.f);
karpent 1:4a5e329e617b 46
karpent 1:4a5e329e617b 47 DrawModel(1.0, 10);
karpent 1:4a5e329e617b 48 }
karpent 1:4a5e329e617b 49
karpent 1:4a5e329e617b 50
karpent 1:4a5e329e617b 51 void Sphere::DrawModel(float radius, float p)
karpent 1:4a5e329e617b 52 {
karpent 1:4a5e329e617b 53
karpent 1:4a5e329e617b 54 float theta1 = 0.f, theta2 = 0.f, theta3 = 0.f;
karpent 1:4a5e329e617b 55 float ex, ey, ez;
karpent 1:4a5e329e617b 56
karpent 1:4a5e329e617b 57 for(int i = 0; i < p/2; i++) {
karpent 1:4a5e329e617b 58
karpent 1:4a5e329e617b 59 theta1 = i * (M_PI * 2.0)/p - M_PI_2;
karpent 1:4a5e329e617b 60 theta2 = (i + 1) * (M_PI * 2.0)/p - M_PI_2;
karpent 1:4a5e329e617b 61
karpent 1:4a5e329e617b 62 glBegin(GL_TRIANGLE_STRIP);
karpent 1:4a5e329e617b 63 for(int j = 0; j <= p; j++) {
karpent 1:4a5e329e617b 64
karpent 1:4a5e329e617b 65 theta3 = j * (M_PI * 2.0)/p;
karpent 1:4a5e329e617b 66 ex = cosf(theta2) * cosf(theta3);
karpent 1:4a5e329e617b 67 ey = sinf(theta2);
karpent 1:4a5e329e617b 68 ez = cosf(theta2) * sinf(theta3);
karpent 1:4a5e329e617b 69
karpent 1:4a5e329e617b 70 glVertex3f(radius * ex, radius * ey, radius * ez);
karpent 1:4a5e329e617b 71
karpent 1:4a5e329e617b 72 ex = cosf(theta1) * cosf(theta3);
karpent 1:4a5e329e617b 73 ey = sinf(theta1);
karpent 1:4a5e329e617b 74 ez = cosf(theta1) * sinf(theta3);
karpent 1:4a5e329e617b 75
karpent 1:4a5e329e617b 76 glVertex3f(radius * ex, radius * ey, radius * ez);
karpent 1:4a5e329e617b 77 }
karpent 1:4a5e329e617b 78 glEnd();
karpent 1:4a5e329e617b 79 }
karpent 1:4a5e329e617b 80 }