Skip to content

Commit 77b2623

Browse files
committed
- added glfw
- removed freeglut and glew - added flat shading - bugfixes
1 parent 8b495a8 commit 77b2623

File tree

223 files changed

+80278
-68794
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

223 files changed

+80278
-68794
lines changed

CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
cmake_minimum_required(VERSION 2.8)
1+
################################################################################
2+
# general CMake and project setup
3+
################################################################################
4+
cmake_minimum_required(VERSION 3.1)
25

36
project(PositionBasedDynamics)
47

@@ -76,11 +79,8 @@ add_subdirectory(PositionBasedDynamics)
7679
add_subdirectory(Simulation)
7780
add_subdirectory(Utils)
7881
if (NOT PBD_NO_DEMOS)
79-
if (WIN32)
80-
add_subdirectory(extern/freeglut)
81-
endif()
82+
add_subdirectory(extern/glfw)
8283
add_subdirectory(extern/AntTweakBar)
83-
add_subdirectory(extern/glew)
8484
add_subdirectory(extern/md5)
8585
add_subdirectory(Demos)
8686
endif()

Changelog.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
- added glfw
2+
- removed freeglut and glew
3+
- added flat shading
4+
15
1.8.0
26
- added OBJ export
37
- added substepping

Common/Common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ using Vector6r = Eigen::Matrix<Real, 6, 1, Eigen::DontAlign>;
3333
using Matrix2r = Eigen::Matrix<Real, 2, 2, Eigen::DontAlign>;
3434
using Matrix3r = Eigen::Matrix<Real, 3, 3, Eigen::DontAlign>;
3535
using Matrix4r = Eigen::Matrix<Real, 4, 4, Eigen::DontAlign>;
36+
using Vector2i = Eigen::Matrix<int, 2, 1, Eigen::DontAlign>;
3637
using AlignedBox2r = Eigen::AlignedBox<Real, 2>;
3738
using AlignedBox3r = Eigen::AlignedBox<Real, 3>;
3839
using AngleAxisr = Eigen::AngleAxis<Real>;

Demos/BarDemo/CMakeLists.txt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
set(SIMULATION_LINK_LIBRARIES AntTweakBar glew PositionBasedDynamics Simulation Utils)
2-
set(SIMULATION_DEPENDENCIES AntTweakBar glew PositionBasedDynamics Simulation Utils)
1+
set(SIMULATION_LINK_LIBRARIES AntTweakBar glfw PositionBasedDynamics Simulation Utils)
2+
set(SIMULATION_DEPENDENCIES AntTweakBar glfw PositionBasedDynamics Simulation Utils)
33

44
if(WIN32)
5-
set(SIMULATION_LINK_LIBRARIES freeglut opengl32.lib glu32.lib ${SIMULATION_LINK_LIBRARIES})
6-
set(SIMULATION_DEPENDENCIES freeglut ${SIMULATION_DEPENDENCIES})
5+
set(SIMULATION_LINK_LIBRARIES opengl32.lib glu32.lib ${SIMULATION_LINK_LIBRARIES})
6+
#set(SIMULATION_DEPENDENCIES ${SIMULATION_DEPENDENCIES})
77
else()
88
set(OpenGL_GL_PREFERENCE GLVND)
9-
find_package(GLUT REQUIRED)
109
find_package(OpenGL REQUIRED)
11-
10+
include_directories( ${OPENGL_INCLUDE_DIRS})
11+
1212
set(SIMULATION_LINK_LIBRARIES
1313
${SIMULATION_LINK_LIBRARIES}
14-
${GLUT_LIBRARIES}
1514
${OPENGL_LIBRARIES}
1615
)
1716
endif()
@@ -42,8 +41,6 @@ add_definitions(-DTW_NO_LIB_PRAGMA -DTW_STATIC -DFREEGLUT_LIB_PRAGMAS=0)
4241

4342
find_package( Eigen3 REQUIRED )
4443
include_directories( ${EIGEN3_INCLUDE_DIR} )
45-
include_directories(${PROJECT_PATH}/extern/freeglut/include)
46-
include_directories(${PROJECT_PATH}/extern/glew/include)
4744

4845
set_target_properties(BarDemo PROPERTIES FOLDER "Demos")
4946
set_target_properties(BarDemo PROPERTIES DEBUG_POSTFIX ${PBD_BINARY_DEBUG_POSTFIX})

Demos/BarDemo/main.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#include "Common/Common.h"
22
#include "Demos/Visualization/MiniGL.h"
33
#include "Demos/Visualization/Selection.h"
4-
#include "GL/glut.h"
54
#include "Simulation/TimeManager.h"
65
#include <Eigen/Dense>
76
#include "Simulation/SimulationModel.h"
@@ -65,11 +64,9 @@ int main( int argc, char **argv )
6564

6665
initParameters();
6766

68-
Simulation::getCurrent()->setSimulationMethodChangedCallback([&]() { reset(); initParameters(); base->getSceneLoader()->readParameterObject(Simulation::getCurrent()->getTimeStep()); });
69-
7067
// OpenGL
71-
MiniGL::setClientIdleFunc (50, timeStep);
72-
MiniGL::setKeyFunc(0, 'r', reset);
68+
MiniGL::setClientIdleFunc (timeStep);
69+
MiniGL::addKeyFunc('r', reset);
7370
MiniGL::setClientSceneFunc(render);
7471
MiniGL::setViewport (40.0f, 0.1f, 500.0f, Vector3r (5.0, 10.0, 30.0), Vector3r (5.0, 0.0, 0.0));
7572

@@ -81,7 +78,7 @@ int main( int argc, char **argv )
8178
TwAddVarCB(MiniGL::getTweakBar(), "NormalizeStretch", TW_TYPE_BOOL32, setNormalizeStretch, getNormalizeStretch, model, " label='Normalize stretch' group='Strain based dynamics' ");
8279
TwAddVarCB(MiniGL::getTweakBar(), "NormalizeShear", TW_TYPE_BOOL32, setNormalizeShear, getNormalizeShear, model, " label='Normalize shear' group='Strain based dynamics' ");
8380

84-
glutMainLoop ();
81+
MiniGL::mainLoop();
8582

8683
Utilities::Timing::printAverageTimes();
8784
Utilities::Timing::printTimeSums();
@@ -334,23 +331,23 @@ void TW_CALL getPoissonRatio(void *value, void *clientData)
334331
void TW_CALL setNormalizeStretch(const void *value, void *clientData)
335332
{
336333
const bool val = *(const bool *)(value);
337-
((SimulationModel*)clientData)->setValue<Real>(SimulationModel::SOLID_NORMALIZE_STRETCH, val);
334+
((SimulationModel*)clientData)->setValue<bool>(SimulationModel::SOLID_NORMALIZE_STRETCH, val);
338335
}
339336

340337
void TW_CALL getNormalizeStretch(void *value, void *clientData)
341338
{
342-
*(bool *)(value) = ((SimulationModel*)clientData)->getValue<Real>(SimulationModel::SOLID_NORMALIZE_STRETCH);
339+
*(bool *)(value) = ((SimulationModel*)clientData)->getValue<bool>(SimulationModel::SOLID_NORMALIZE_STRETCH);
343340
}
344341

345342
void TW_CALL setNormalizeShear(const void *value, void *clientData)
346343
{
347344
const bool val = *(const bool *)(value);
348-
((SimulationModel*)clientData)->setValue<Real>(SimulationModel::SOLID_NORMALIZE_SHEAR, val);
345+
((SimulationModel*)clientData)->setValue<bool>(SimulationModel::SOLID_NORMALIZE_SHEAR, val);
349346
}
350347

351348
void TW_CALL getNormalizeShear(void *value, void *clientData)
352349
{
353-
*(bool *)(value) = ((SimulationModel*)clientData)->getValue<Real>(SimulationModel::SOLID_NORMALIZE_SHEAR);
350+
*(bool *)(value) = ((SimulationModel*)clientData)->getValue<bool>(SimulationModel::SOLID_NORMALIZE_SHEAR);
354351
}
355352

356353
void TW_CALL setSimulationMethod(const void *value, void *clientData)

Demos/ClothDemo/CMakeLists.txt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
set(SIMULATION_LINK_LIBRARIES AntTweakBar glew PositionBasedDynamics Simulation Utils)
2-
set(SIMULATION_DEPENDENCIES AntTweakBar glew PositionBasedDynamics Simulation Utils)
1+
set(SIMULATION_LINK_LIBRARIES AntTweakBar glfw PositionBasedDynamics Simulation Utils)
2+
set(SIMULATION_DEPENDENCIES AntTweakBar glfw PositionBasedDynamics Simulation Utils)
33

44
if(WIN32)
5-
set(SIMULATION_LINK_LIBRARIES freeglut opengl32.lib glu32.lib ${SIMULATION_LINK_LIBRARIES})
6-
set(SIMULATION_DEPENDENCIES freeglut ${SIMULATION_DEPENDENCIES})
5+
set(SIMULATION_LINK_LIBRARIES opengl32.lib glu32.lib ${SIMULATION_LINK_LIBRARIES})
6+
#set(SIMULATION_DEPENDENCIES ${SIMULATION_DEPENDENCIES})
77
else()
88
set(OpenGL_GL_PREFERENCE GLVND)
9-
find_package(GLUT REQUIRED)
109
find_package(OpenGL REQUIRED)
10+
include_directories( ${OPENGL_INCLUDE_DIRS})
1111

1212
set(SIMULATION_LINK_LIBRARIES
1313
${SIMULATION_LINK_LIBRARIES}
14-
${GLUT_LIBRARIES}
1514
${OPENGL_LIBRARIES}
1615
)
1716
endif()

Demos/ClothDemo/main.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#include "Common/Common.h"
22
#include "Demos/Visualization/MiniGL.h"
33
#include "Demos/Visualization/Selection.h"
4-
#include "GL/glut.h"
54
#include "Simulation/TimeManager.h"
65
#include <Eigen/Dense>
76
#include "Simulation/SimulationModel.h"
@@ -60,11 +59,9 @@ int main( int argc, char **argv )
6059

6160
initParameters();
6261

63-
Simulation::getCurrent()->setSimulationMethodChangedCallback([&]() { reset(); initParameters(); base->getSceneLoader()->readParameterObject(Simulation::getCurrent()->getTimeStep()); });
64-
6562
// OpenGL
66-
MiniGL::setClientIdleFunc (50, timeStep);
67-
MiniGL::setKeyFunc(0, 'r', reset);
63+
MiniGL::setClientIdleFunc (timeStep);
64+
MiniGL::addKeyFunc('r', reset);
6865
MiniGL::setClientSceneFunc(render);
6966
MiniGL::setViewport (40.0f, 0.1f, 500.0f, Vector3r (5.0, 10.0, 30.0), Vector3r (5.0, 0.0, 0.0));
7067

@@ -73,7 +70,7 @@ int main( int argc, char **argv )
7370
TwType enumType3 = TwDefineEnum("BendingMethodType", NULL, 0);
7471
TwAddVarCB(MiniGL::getTweakBar(), "BendingMethod", enumType3, setBendingMethod, getBendingMethod, &bendingMethod, " label='Bending method' enum='0 {None}, 1 {Dihedral angle}, 2 {Isometric bending}' group=Bending");
7572

76-
glutMainLoop ();
73+
MiniGL::mainLoop();
7774

7875
base->cleanup();
7976

Demos/Common/DemoBase.cpp

Lines changed: 60 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#include "Utils/FileSystem.h"
55
#include "Simulation/TimeManager.h"
66
#include "Demos/Visualization/Selection.h"
7-
#include "GL/glut.h"
87
#include "Simulation/Simulation.h"
98
#include "NumericParameter.h"
109
#include "Utils/Logger.h"
@@ -174,7 +173,7 @@ void DemoBase::init(int argc, char **argv, const char *demoName)
174173
LOG_DEBUG << "Host name: " << SystemInfo::getHostName();
175174

176175
// OpenGL
177-
MiniGL::init(argc, argv, 1024, 768, 0, 0, demoName);
176+
MiniGL::init(argc, argv, 1280, 1024, demoName);
178177
MiniGL::initLights();
179178
MiniGL::initTexture();
180179
MiniGL::getOpenGLVersion(m_context_major_version, m_context_minor_version);
@@ -183,6 +182,13 @@ void DemoBase::init(int argc, char **argv, const char *demoName)
183182

184183
if (MiniGL::checkOpenGLVersion(3, 3))
185184
initShaders();
185+
186+
MiniGL::addReshapeFunc([](int width, int height) { TwWindowSize(width, height); });
187+
MiniGL::addKeyboardFunc([](int key, int scancode, int action, int mods) -> bool { return TwEventKeyGLFW(key, action); });
188+
MiniGL::addCharFunc([](int key, int action) -> bool { return TwEventCharGLFW(key, action); });
189+
MiniGL::addMousePressFunc([](int button, int action, int mods) -> bool { return TwEventMouseButtonGLFW(button, action); });
190+
MiniGL::addMouseMoveFunc([](int x, int y) -> bool { return TwEventMousePosGLFW(x, y); });
191+
MiniGL::addMouseWheelFunc([](int pos, double xoffset, double yoffset) -> bool { return TwEventMouseWheelGLFW(pos); });
186192
}
187193

188194
void DemoBase::readScene()
@@ -224,6 +230,21 @@ void DemoBase::initShaders()
224230
m_shaderTex.addUniform("shininess");
225231
m_shaderTex.addUniform("specular_factor");
226232
m_shaderTex.end();
233+
234+
vertFile = m_dataPath + "/shaders/vs_flat.glsl";
235+
std::string geomFile = m_dataPath + "/shaders/gs_flat.glsl";
236+
fragFile = m_dataPath + "/shaders/fs_flat.glsl";
237+
m_shaderFlat.compileShaderFile(GL_VERTEX_SHADER, vertFile);
238+
m_shaderFlat.compileShaderFile(GL_GEOMETRY_SHADER, geomFile);
239+
m_shaderFlat.compileShaderFile(GL_FRAGMENT_SHADER, fragFile);
240+
m_shaderFlat.createAndLinkProgram();
241+
m_shaderFlat.begin();
242+
m_shaderFlat.addUniform("modelview_matrix");
243+
m_shaderFlat.addUniform("projection_matrix");
244+
m_shaderFlat.addUniform("surface_color");
245+
m_shaderFlat.addUniform("shininess");
246+
m_shaderFlat.addUniform("specular_factor");
247+
m_shaderFlat.end();
227248
}
228249

229250

@@ -267,6 +288,26 @@ void DemoBase::shaderEnd()
267288
m_shader.end();
268289
}
269290

291+
void DemoBase::shaderFlatBegin(const float* col)
292+
{
293+
m_shaderFlat.begin();
294+
glUniform1f(m_shaderFlat.getUniform("shininess"), 5.0f);
295+
glUniform1f(m_shaderFlat.getUniform("specular_factor"), 0.2f);
296+
297+
GLfloat matrix[16];
298+
glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
299+
glUniformMatrix4fv(m_shaderFlat.getUniform("modelview_matrix"), 1, GL_FALSE, matrix);
300+
GLfloat pmatrix[16];
301+
glGetFloatv(GL_PROJECTION_MATRIX, pmatrix);
302+
glUniformMatrix4fv(m_shaderFlat.getUniform("projection_matrix"), 1, GL_FALSE, pmatrix);
303+
glUniform3fv(m_shaderFlat.getUniform("surface_color"), 1, col);
304+
}
305+
306+
void DemoBase::shaderFlatEnd()
307+
{
308+
m_shaderFlat.end();
309+
}
310+
270311
void DemoBase::readParameters()
271312
{
272313
m_sceneLoader->readParameterObject(this);
@@ -278,7 +319,7 @@ void DemoBase::readParameters()
278319
void DemoBase::render()
279320
{
280321
float gridColor[4] = { 0.2f, 0.2f, 0.2f, 1.0f };
281-
MiniGL::drawGrid(gridColor);
322+
MiniGL::drawGrid_xz(gridColor);
282323

283324
MiniGL::coordinateSystem();
284325

@@ -290,7 +331,7 @@ void DemoBase::render()
290331
SimulationModel::ParticleRigidBodyContactConstraintVector &particleRigidBodyContacts = model->getParticleRigidBodyContactConstraints();
291332

292333
float selectionColor[4] = { 0.8f, 0.0f, 0.0f, 1 };
293-
float surfaceColor[4] = { 0.3f, 0.5f, 0.8f, 1 };
334+
float surfaceColor[4] = { 0.1f, 0.4f, 0.7f, 1 };
294335
float staticColor[4] = { 0.5f, 0.5f, 0.5f, 1 };
295336

296337
if (m_renderContacts)
@@ -302,8 +343,6 @@ void DemoBase::render()
302343
}
303344

304345

305-
shaderBegin(staticColor);
306-
307346
for (size_t i = 0; i < rb.size(); i++)
308347
{
309348
bool selected = false;
@@ -315,6 +354,12 @@ void DemoBase::render()
315354

316355
const VertexData &vd = rb[i]->getGeometry().getVertexData();
317356
const IndexedFaceMesh &mesh = rb[i]->getGeometry().getMesh();
357+
358+
if (mesh.getFlatShading())
359+
shaderFlatBegin(staticColor);
360+
else
361+
shaderBegin(staticColor);
362+
318363
if (!selected)
319364
{
320365
if (rb[i]->getMass() == 0.0)
@@ -333,9 +378,14 @@ void DemoBase::render()
333378
glUniform3fv(m_shader.getUniform("surface_color"), 1, selectionColor);
334379
Visualization::drawMesh(vd, mesh, 0, selectionColor);
335380
}
381+
382+
if (mesh.getFlatShading())
383+
shaderFlatEnd();
384+
else
385+
shaderEnd();
336386
}
337387

338-
shaderEnd();
388+
339389

340390
renderTriangleModels();
341391
renderTetModels();
@@ -538,7 +588,7 @@ void DemoBase::renderTetModels()
538588
{
539589
SimulationModel *model = Simulation::getCurrent()->getModel();
540590
const ParticleData &pd = model->getParticles();
541-
float surfaceColor[4] = { 0.1f, 0.3f, 0.5f, 1 };
591+
float surfaceColor[4] = { 0.1f, 0.4f, 0.7f, 1 };
542592

543593
shaderBegin(surfaceColor);
544594

@@ -800,7 +850,7 @@ void DemoBase::mouseMove(int x, int y, void *clientData)
800850
base->m_oldMousePos = mousePos;
801851
}
802852

803-
void DemoBase::selection(const Eigen::Vector2i &start, const Eigen::Vector2i &end, void *clientData)
853+
void DemoBase::selection(const Vector2i &start, const Vector2i &end, void *clientData)
804854
{
805855
SimulationModel *model = Simulation::getCurrent()->getModel();
806856
DemoBase *base = (DemoBase*)clientData;
@@ -824,7 +874,7 @@ void DemoBase::selection(const Eigen::Vector2i &start, const Eigen::Vector2i &en
824874
if (rb.size() > 0)
825875
Selection::selectRect(start, end, &x[0], &x[rb.size() - 1], base->m_selectedBodies);
826876
if ((base->m_selectedBodies.size() > 0) || (base->m_selectedParticles.size() > 0))
827-
MiniGL::setMouseMoveFunc(GLUT_MIDDLE_BUTTON, mouseMove);
877+
MiniGL::setMouseMoveFunc(2, mouseMove);
828878
else
829879
MiniGL::setMouseMoveFunc(-1, NULL);
830880

Demos/Common/DemoBase.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ namespace PBD
2424
GLint m_context_major_version;
2525
GLint m_context_minor_version;
2626
Shader m_shader;
27+
Shader m_shaderFlat;
2728
Shader m_shaderTex;
2829
bool m_doPause;
2930
Real m_pauseAt;
@@ -46,7 +47,7 @@ namespace PBD
4647

4748
void initShaders();
4849

49-
static void selection(const Eigen::Vector2i &start, const Eigen::Vector2i &end, void *clientData);
50+
static void selection(const Vector2i &start, const Vector2i &end, void *clientData);
5051
static void mouseMove(int x, int y, void *clientData);
5152

5253
void renderTriangleModels();
@@ -105,10 +106,13 @@ namespace PBD
105106
GLint getContextMinorVersion() const { return m_context_minor_version; }
106107
Shader& getShader() { return m_shader; }
107108
Shader& getShaderTex() { return m_shaderTex; }
109+
Shader& getShaderFlat() { return m_shaderFlat; }
108110
void shaderTexBegin(const float *col);
109111
void shaderTexEnd();
110112
void shaderBegin(const float *col);
111113
void shaderEnd();
114+
void shaderFlatBegin(const float* col);
115+
void shaderFlatEnd();
112116

113117
std::vector<unsigned int>& getSelectedParticles() { return m_selectedParticles; }
114118
std::vector<unsigned int>& getSelectedRigidBodies() { return m_selectedBodies; }

0 commit comments

Comments
 (0)