diff options
author | David Robillard <d@drobilla.net> | 2021-04-17 21:20:05 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2021-04-18 11:32:39 -0400 |
commit | e315b35531e070846f8613c34ee0776435c7bdd9 (patch) | |
tree | 9dec869c16c00de83f62ec33a4a3c510ea0aecfb /examples/cube_view.h | |
parent | 51371e25da2a4930e525fb662ac5dc5cc2b115af (diff) | |
download | pugl-e315b35531e070846f8613c34ee0776435c7bdd9.tar.gz pugl-e315b35531e070846f8613c34ee0776435c7bdd9.tar.bz2 pugl-e315b35531e070846f8613c34ee0776435c7bdd9.zip |
Improve cube rendering in example programs
Diffstat (limited to 'examples/cube_view.h')
-rw-r--r-- | examples/cube_view.h | 106 |
1 files changed, 80 insertions, 26 deletions
diff --git a/examples/cube_view.h b/examples/cube_view.h index 71ae88d..bdef1f1 100644 --- a/examples/cube_view.h +++ b/examples/cube_view.h @@ -30,35 +30,66 @@ static const float cubeStripVertices[] = { -1.0f, 1.0f, 1.0f, // Front top left - 1.0f, 1.0f, 1.0f, // Front top right + 1.0f, 1.0f, 1.0f, // Front top right -1.0f, -1.0f, 1.0f, // Front bottom left - 1.0f, -1.0f, 1.0f, // Front bottom right - 1.0f, -1.0f, -1.0f, // Back bottom right - 1.0f, 1.0f, 1.0f, // Front top right - 1.0f, 1.0f, -1.0f, // Back top right + 1.0f, -1.0f, 1.0f, // Front bottom right + 1.0f, -1.0f, -1.0f, // Back bottom right + 1.0f, 1.0f, 1.0f, // Front top right + 1.0f, 1.0f, -1.0f, // Back top right -1.0f, 1.0f, 1.0f, // Front top left -1.0f, 1.0f, -1.0f, // Back top left -1.0f, -1.0f, 1.0f, // Front bottom left -1.0f, -1.0f, -1.0f, // Back bottom left - 1.0f, -1.0f, -1.0f, // Back bottom right + 1.0f, -1.0f, -1.0f, // Back bottom right -1.0f, 1.0f, -1.0f, // Back top left - 1.0f, 1.0f, -1.0f // Back top right + 1.0f, 1.0f, -1.0f // Back top right +}; + +static const float cubeStripColorVertices[] = { + 0.25f, 0.75f, 0.75f, // Front top left + 0.75f, 0.75f, 0.75f, // Front top right + 0.25f, 0.25f, 0.75f, // Front bottom left + 0.75f, 0.25f, 0.75f, // Front bottom right + 0.75f, 0.25f, 0.25f, // Back bottom right + 0.75f, 0.75f, 0.75f, // Front top right + 0.75f, 0.75f, 0.25f, // Back top right + 0.25f, 0.75f, 0.75f, // Front top left + 0.25f, 0.75f, 0.25f, // Back top left + 0.25f, 0.25f, 0.75f, // Front bottom left + 0.25f, 0.25f, 0.25f, // Back bottom left + 0.75f, 0.25f, 0.25f, // Back bottom right + 0.25f, 0.75f, 0.25f, // Back top left + 0.75f, 0.75f, 0.25f // Back top right }; static const float cubeFrontLineLoop[] = { -1.0f, 1.0f, 1.0f, // Front top left - 1.0f, 1.0f, 1.0f, // Front top right - 1.0f, -1.0f, 1.0f, // Front bottom right + 1.0f, 1.0f, 1.0f, // Front top right + 1.0f, -1.0f, 1.0f, // Front bottom right -1.0f, -1.0f, 1.0f, // Front bottom left }; +static const float cubeFrontLineLoopColors[] = { + 0.25f, 0.75f, 0.75f, // Front top left + 0.75f, 0.75f, 0.75f, // Front top right + 0.75f, 0.25f, 0.75f, // Front bottom right + 0.25f, 0.25f, 0.75f, // Front bottom left +}; + static const float cubeBackLineLoop[] = { -1.0f, 1.0f, -1.0f, // Back top left - 1.0f, 1.0f, -1.0f, // Back top right - 1.0f, -1.0f, -1.0f, // Back bottom right + 1.0f, 1.0f, -1.0f, // Back top right + 1.0f, -1.0f, -1.0f, // Back bottom right -1.0f, -1.0f, -1.0f, // Back bottom left }; +static const float cubeBackLineLoopColors[] = { + 0.25f, 0.75f, 0.25f, // Back top left + 0.75f, 0.75f, 0.25f, // Back top right + 0.75f, 0.25f, 0.25f, // Back bottom right + 0.25f, 0.25f, 0.25f // Back bottom left +}; + static const float cubeSideLines[] = { -1.0f, 1.0f, 1.0f, // Front top left -1.0f, 1.0f, -1.0f, // Back top left @@ -73,6 +104,20 @@ static const float cubeSideLines[] = { 1.0f, -1.0f, -1.0f, // Back bottom right }; +static const float cubeSideLineColors[] = { + 0.25f, 0.75f, 0.75f, // Front top left + 0.25f, 0.75f, 0.25f, // Back top left + + 0.25f, 0.25f, 0.75f, // Front bottom left + 0.25f, 0.25f, 0.25f, // Back bottom left + + 0.75f, 0.75f, 0.75f, // Front top right + 0.75f, 0.75f, 0.25f, // Back top right + + 0.75f, 0.25f, 0.75f, // Front bottom right + 0.75f, 0.25f, 0.25f, // Back bottom right +}; + // clang-format on static inline void @@ -80,9 +125,12 @@ reshapeCube(const float width, const float height) { const float aspect = width / height; + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + glFrontFace(GL_CW); + glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); - glClearColor(0.2f, 0.2f, 0.2f, 1.0f); glMatrixMode(GL_PROJECTION); glLoadIdentity(); @@ -106,8 +154,12 @@ displayCube(PuglView* const view, glRotatef(xAngle, 0.0f, 1.0f, 0.0f); glRotatef(yAngle, 1.0f, 0.0f, 0.0f); - const float bg = entered ? 0.2f : 0.0f; - glClearColor(bg, bg, bg, 1.0f); + if (entered) { + glClearColor(0.13f, 0.14f, 0.14f, 1.0f); + } else { + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + } + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (puglHasFocus(view)) { @@ -115,25 +167,27 @@ displayCube(PuglView* const view, glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(3, GL_FLOAT, 0, cubeStripVertices); - glColorPointer(3, GL_FLOAT, 0, cubeStripVertices); + glColorPointer(3, GL_FLOAT, 0, cubeStripColorVertices); glDrawArrays(GL_TRIANGLE_STRIP, 0, 14); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glColor3f(0.0f, 0.0f, 0.0f); } else { - glColor3f(1.0f, 1.0f, 1.0f); + // Draw cube wireframe + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + glVertexPointer(3, GL_FLOAT, 0, cubeFrontLineLoop); + glColorPointer(3, GL_FLOAT, 0, cubeFrontLineLoopColors); + glDrawArrays(GL_LINE_LOOP, 0, 4); + glVertexPointer(3, GL_FLOAT, 0, cubeBackLineLoop); + glColorPointer(3, GL_FLOAT, 0, cubeBackLineLoopColors); + glDrawArrays(GL_LINE_LOOP, 0, 4); + glVertexPointer(3, GL_FLOAT, 0, cubeSideLines); + glColorPointer(3, GL_FLOAT, 0, cubeSideLineColors); + glDrawArrays(GL_LINES, 0, 8); + glDisableClientState(GL_VERTEX_ARRAY); } - - // Draw cube wireframe - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, 0, cubeFrontLineLoop); - glDrawArrays(GL_LINE_LOOP, 0, 4); - glVertexPointer(3, GL_FLOAT, 0, cubeBackLineLoop); - glDrawArrays(GL_LINE_LOOP, 0, 4); - glVertexPointer(3, GL_FLOAT, 0, cubeSideLines); - glDrawArrays(GL_LINES, 0, 8); - glDisableClientState(GL_VERTEX_ARRAY); } #endif // EXAMPLES_CUBE_VIEW_H |