From edeec37d01fa5cf1a0f08db41c683675b5428e5e Mon Sep 17 00:00:00 2001 From: Jeremy Hu Date: Tue, 20 Dec 2016 08:40:31 +0930 Subject: [PATCH] Use glu to draw primitives --- README.md | 5 +- screenshot/dust3d_node_edge_with_glu.png | Bin 0 -> 103209 bytes src/draw.cpp | 161 +++-------------------- src/draw.h | 6 +- src/drawcommon.h | 25 ---- src/render.cpp | 28 ++-- 6 files changed, 38 insertions(+), 187 deletions(-) create mode 100644 screenshot/dust3d_node_edge_with_glu.png delete mode 100644 src/drawcommon.h diff --git a/README.md b/README.md index 04737b6a..67fbd5f9 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,10 @@ Now, for just beginning, I think it's a not bad start. Draw shape ball is easy, no need to rotate, I just need scale it along the ball's radius. Draw the cylinder which connects two shape balls is more difficult, I need do some math to rotate it. [Here](http://www.thjsmith.com/40/cylinder-between-two-points-opengl-c) described it. *Camera Control* -Camera rotate/zoom implemented, [here](http://www.songho.ca/opengl/gl_transform.html) is a good article which explained the theory of OpenGL Transformation. Most important is the demo apps all are very beautiful. - +Camera rotate/zoom implemented, [here](http://www.songho.ca/opengl/gl_transform.html) is a good article which explained the theory of OpenGL Transformation. Most important is that the demo app is very beautiful. Added x,z axis, looks better than last screenshot. +I have to use the GLU library, the previous implementation of drawSphere and drawCylinder looks not good, and take too much time to debug. + - [ ] Export Wavefront .obj - [ ] Render B-Mesh result - [ ] Design UI for monster parts configuration diff --git a/screenshot/dust3d_node_edge_with_glu.png b/screenshot/dust3d_node_edge_with_glu.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb959b316230d2eb6150047b3e96e4bdb13336c GIT binary patch literal 103209 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

5^OE$* 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

O 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 VGcNzocfh|t^o=fN|L$<>{{ebLbshi! literal 0 HcmV?d00001 diff --git a/src/draw.cpp b/src/draw.cpp index d6b91f2f..953c5bb2 100644 --- a/src/draw.cpp +++ b/src/draw.cpp @@ -3,110 +3,28 @@ #include #include #include +#ifdef __APPLE__ +#include +#else +#include +#endif #include "draw.h" -/* - * This drawSphere function modified from [Jon Leech's implementation of sphere](ftp://ftp.ee.lbl.gov/sphere.c) - * Jeremy HU (huxingyi@msn.com) 2016/12/16 -*/ +static GLUquadricObj *quadricId = 0; -#define XPLUS { 1, 0, 0 } /* X */ -#define XMIN { -1, 0, 0 } /* -X */ -#define YPLUS { 0, 1, 0 } /* Y */ -#define YMIN { 0, -1, 0 } /* -Y */ -#define ZPLUS { 0, 0, 1 } /* Z */ -#define ZMIN { 0, 0, -1 } /* -Z */ - -static const triangle octahedron[] = { - {{XPLUS, ZPLUS, YPLUS}}, - {{YPLUS, ZPLUS, XMIN}}, - {{XMIN, ZPLUS, YMIN}}, - {{YMIN, ZPLUS, XPLUS}}, - {{XPLUS, YPLUS, ZMIN}}, - {{YPLUS, XMIN, ZMIN}}, - {{XMIN, YMIN, ZMIN}}, - {{YMIN, XPLUS, ZMIN}}, -}; - -static void subdivide(object *old, object *subdivided) { - int i; - for (i = 0; i < old->npoly; ++i) { - triangle *oldt = &old->poly[i]; - triangle *newt = &subdivided->poly[i * 4]; - vec3 a, b, c; - - vec3Midpoint(&oldt->pt[0], &oldt->pt[2], &a); - vec3Midpoint(&oldt->pt[0], &oldt->pt[1], &b); - vec3Midpoint(&oldt->pt[1], &oldt->pt[2], &c); - - vec3Normalize(&a); - vec3Normalize(&b); - vec3Normalize(&c); - - newt->pt[0] = oldt->pt[0]; - newt->pt[1] = b; - newt->pt[2] = a; - newt++; - - newt->pt[0] = b; - newt->pt[1] = oldt->pt[1]; - newt->pt[2] = c; - newt++; - - newt->pt[0] = a; - newt->pt[1] = b; - newt->pt[2] = c; - newt++; - - newt->pt[0] = a; - newt->pt[1] = c; - newt->pt[2] = oldt->pt[2]; +int drawInit(void) { + if (0 == quadricId) { + quadricId = gluNewQuadric(); + gluQuadricDrawStyle(quadricId, GLU_FILL); } + return 0; } -int drawSphere(vec3 *origin, float radius, int level) { - int lv, i; - object oldObj, newObj; - - if (level < 1) { - fprintf(stderr, "%s:level max greater than 0.\n", __FUNCTION__); - return -1; - } - - oldObj.npoly = sizeof(octahedron) / sizeof(octahedron[0]); - oldObj.poly = (triangle *)malloc(oldObj.npoly * sizeof(triangle)); - if (!oldObj.poly) { - fprintf(stderr, "%s:insufficient memory.\n", __FUNCTION__); - return -1; - } - memcpy(oldObj.poly, octahedron, oldObj.npoly * sizeof(triangle)); - - for (lv = 0; lv < level; lv++) { - newObj.npoly = oldObj.npoly * 4; - newObj.poly = (triangle *)malloc(newObj.npoly * sizeof(triangle)); - if (!newObj.poly) { - fprintf(stderr, "%s:insufficient memory(levelLoop:%d).\n", - __FUNCTION__, lv); - free(oldObj.poly); - return -1; - } - - subdivide(&oldObj, &newObj); - - free(oldObj.poly); - oldObj = newObj; - } - +int drawSphere(vec3 *origin, float radius, int slices, int stacks) { glPushMatrix(); glTranslatef(origin->x, origin->y, origin->z); - glScalef(radius, radius, radius); - for (i = 0; i < newObj.npoly; ++i) { - drawTriangle(&newObj.poly[i]); - } + gluSphere(quadricId, radius, slices, stacks); glPopMatrix(); - - free(newObj.poly); - return 0; } @@ -121,11 +39,8 @@ void drawTriangle(triangle *poly) { glEnd(); } -int drawCylinder(vec3 *topOrigin, vec3 *bottomOrigin, float radius, int slices) { - float theta = (2.0 * M_PI) / (float)slices; - float a = 0.0f; - int lv; - float x, y, z; +int drawCylinder(vec3 *topOrigin, vec3 *bottomOrigin, float radius, int slices, + int stacks) { vec3 zAxis = {0, 0, 1}; vec3 p, t; float height = 0; @@ -148,51 +63,7 @@ int drawCylinder(vec3 *topOrigin, vec3 *bottomOrigin, float radius, int slices) glTranslatef(bottomOrigin->x, bottomOrigin->y, bottomOrigin->z); glRotatef(angle, t.x, t.y, t.z); - - // strips - glBegin(GL_TRIANGLE_STRIP); - for (a = 0, lv = 0; lv <= slices; ++lv) { - float cosa = cos(a); - float sina = sin(a); - x = cosa * radius; - y = sina * radius; - z = 0; - glNormal3f(cosa, sina, 0); - glVertex3f(x, y, z); - z = height; - glNormal3f(cosa, sina, 0); - glVertex3f(x, y, z); - a += theta; - } - glEnd(); - - // bottom cap - z = 0; - glBegin(GL_TRIANGLE_FAN); - glNormal3f(0, 0, -1); - glVertex3f(0, 0, z); - for (a = 0, lv = 0; lv <= slices; ++lv) { - x = cos(a) * radius; - y = sin(a) * radius; - glNormal3f(0, 0, -1); - glVertex3f(x, y, z); - a += theta; - } - glEnd(); - - // top cap - z = height; - glBegin(GL_TRIANGLE_FAN); - glNormal3f(0, 0, 1); - glVertex3f(0, 0, z); - for (a = 0, lv = 0; lv <= slices; ++lv) { - x = cos(a) * radius; - y = sin(a) * radius; - glNormal3f(0, 0, 1); - glVertex3f(x, y, z); - a += theta; - } - glEnd(); + gluCylinder(quadricId, radius, radius, height, slices, stacks); glPopMatrix(); diff --git a/src/draw.h b/src/draw.h index 243c1d9d..257d6020 100644 --- a/src/draw.h +++ b/src/draw.h @@ -15,9 +15,11 @@ typedef struct { triangle *poly; } object; -int drawSphere(vec3 *origin, float radius, int level); +int drawInit(void); +int drawSphere(vec3 *origin, float radius, int slices, int stacks); void drawTriangle(triangle *poly); -int drawCylinder(vec3 *topOrigin, vec3 *bottomOrigin, float radius, int slices); +int drawCylinder(vec3 *topOrigin, vec3 *bottomOrigin, float radius, int slices, + int stacks); int drawGrid(float size, float step); #ifdef __cplusplus diff --git a/src/drawcommon.h b/src/drawcommon.h deleted file mode 100644 index 38de7647..00000000 --- a/src/drawcommon.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef DRAW_COMMON_H -#define DRAW_COMMON_H -#include "vector3d.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - vec3 pt[3]; -} triangle; - -typedef struct { - int npoly; - triangle *poly; -} object; - -void drawTriangle(triangle *poly); -int drawCylinder(int slices, float radius, float height); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/render.cpp b/src/render.cpp index 4293474c..24b1c6a4 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -10,7 +10,7 @@ static int drawBmeshNode(bmesh *bm, bmeshNode *node) { float color1[3] = {1, 0, 0}; glColor3fv(color1); - drawSphere(&node->position, node->radius, 3); + drawSphere(&node->position, node->radius, 36, 24); return 0; } @@ -19,7 +19,7 @@ static int drawBmeshEdge(bmesh *bm, bmeshEdge *edge) { glColor3fv(color2); bmeshNode *firstNode = bmeshGetNode(bm, edge->firstNode); bmeshNode *secondNode = bmeshGetNode(bm, edge->secondNode); - drawCylinder(&firstNode->position, &secondNode->position, 0.04, 40); + drawCylinder(&firstNode->position, &secondNode->position, 0.1, 36, 24); return 0; } @@ -31,8 +31,8 @@ Render::Render(QWidget *parent) mouseX = 0; mouseY = 0; - cameraAngleX = 50; - cameraAngleY = 70; + cameraAngleX = 45; + cameraAngleY = -45; cameraDistance = 3; } @@ -74,6 +74,8 @@ void Render::initializeGL() { glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); + + drawInit(); } void Render::paintGL() { @@ -97,17 +99,17 @@ void Render::paintGL() { bm = bmeshCreate(); memset(&node, 0, sizeof(node)); - node.position.x = -1.0; - node.position.y = 0.3; - node.position.z = 1.0; - node.radius = 0.45; + node.position.x = 0; + node.position.y = 0; + node.position.z = 3; + node.radius = 0.5; bmeshAddNode(bm, &node); memset(&node, 0, sizeof(node)); - node.position.x = -0.5; - node.position.y = 0.2; - node.position.z = 0.5; - node.radius = 0.1; + node.position.x = 1; + node.position.y = 0; + node.position.z = 2; + node.radius = 0.5; bmeshAddNode(bm, &node); memset(&edge, 0, sizeof(edge)); @@ -136,7 +138,7 @@ void Render::resizeGL(int w, int h) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); - glFrustum(-2, 2, -1.5, 1.5, 1, 1000); + glFrustum(-2, 2, -1.5, 1.5, 1, 100); glMatrixMode(GL_MODELVIEW); glLoadIdentity();