-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprimitive.cpp
More file actions
104 lines (85 loc) · 2.47 KB
/
primitive.cpp
File metadata and controls
104 lines (85 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "primitive.h"
/*
* Draw a box centered at the origin
*/
void DrawBox(float width, float length, float height) {
float halfw = width / 2.0;
float halfl = length / 2.0;
float halfh = height / 2.0;
glBegin(GL_QUADS);
// Bottom face
glNormal3f(0, -1, 0);
glVertex3f(-halfw, -halfh, -halfl);
glVertex3f( halfw, -halfh, -halfl);
glVertex3f( halfw, -halfh, halfl);
glVertex3f(-halfw, -halfh, halfl);
// Left face
glNormal3f(-1, 0, 0);
glVertex3f(-halfw, -halfh, -halfl);
glVertex3f(-halfw, -halfh, halfl);
glVertex3f(-halfw, halfh, halfl);
glVertex3f(-halfw, halfh, -halfl);
// Right face
glNormal3f(1, 0, 0);
glVertex3f( halfw, -halfh, -halfl);
glVertex3f( halfw, halfh, -halfl);
glVertex3f( halfw, halfh, halfl);
glVertex3f( halfw, -halfh, halfl);
// Front face
glNormal3f(0, 0, 1);
glVertex3f(-halfw, -halfh, halfl);
glVertex3f( halfw, -halfh, halfl);
glVertex3f( halfw, halfh, halfl);
glVertex3f(-halfw, halfh, halfl);
// Back face
glNormal3f(0, 0, -1);
glVertex3f(-halfw, -halfh, -halfl);
glVertex3f(-halfw, halfh, -halfl);
glVertex3f( halfw, halfh, -halfl);
glVertex3f( halfw, -halfh, -halfl);
// Top face
glNormal3f(0, 1, 0);
glVertex3f(-halfw, halfh, -halfl);
glVertex3f(-halfw, halfh, halfl);
glVertex3f( halfw, halfh, halfl);
glVertex3f( halfw, halfh, -halfl);
glEnd();
}
/*
* Draw a cylinder centered at the origin
*/
void DrawCylinder(float base, float top, float height) {
// Rotate 90 degree to align the cylinder with the y axis
glPushMatrix();
glRotatef(-90, 1, 0, 0);
glTranslatef(0, 0, -height / 2.0);
// Draw the cylinder body
GLUquadricObj *quadric_obj = gluNewQuadric();
gluCylinder(quadric_obj, base, top, height, CYLINDER_SLICE, CYLINDER_STACK);
gluDeleteQuadric(quadric_obj);
glPopMatrix();
// Draw the bottom cap
glPushMatrix();
glTranslatef(0, -height / 2.0, 0);
glRotatef(90, 1, 0, 0);
quadric_obj = gluNewQuadric();
gluDisk(quadric_obj, 0, base, CYLINDER_SLICE, CYLINDER_CAPLOOP);
gluDeleteQuadric(quadric_obj);
glPopMatrix();
// Draw the top cap
glPushMatrix();
glTranslatef(0, height / 2.0, 0);
glRotatef(-90, 1, 0, 0);
quadric_obj = gluNewQuadric();
gluDisk(quadric_obj, 0, top, CYLINDER_SLICE, CYLINDER_CAPLOOP);
gluDeleteQuadric(quadric_obj);
glPopMatrix();
}
/*
* Draw a sphere centered at the origin
*/
void DrawSphere(float radius) {
GLUquadricObj *quadric_obj = gluNewQuadric();
gluSphere(quadric_obj, radius, SPHERE_SLICE, SPHERE_STACK);
gluDeleteQuadric(quadric_obj);
}