diff --git a/examples/Basic/OpenGLWidget.cpp b/examples/Basic/OpenGLWidget.cpp index a1d5f9c9..9732bd1b 100644 --- a/examples/Basic/OpenGLWidget.cpp +++ b/examples/Basic/OpenGLWidget.cpp @@ -52,19 +52,14 @@ void OpenGLWidget::initializeGL() glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); - //Enable smooth lighting - //glEnable(GL_LIGHTING); - //glEnable(GL_LIGHT0); + //Anable smooth lighting + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); glShadeModel(GL_SMOOTH); //We'll be rendering with index/vertex arrays glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); - - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); } void OpenGLWidget::resizeGL(int w, int h) @@ -75,7 +70,7 @@ void OpenGLWidget::resizeGL(int w, int h) //Set up the projection matrix glMatrixMode(GL_PROJECTION); glLoadIdentity(); - float frustumSize = 16.0f; //Half the volume size + float frustumSize = 32.0f; //Half the volume size float aspect = static_cast(width()) / static_cast(height()); glOrtho(frustumSize*aspect, -frustumSize*aspect, frustumSize, -frustumSize, 1.0, 1000); } @@ -91,7 +86,7 @@ void OpenGLWidget::paintGL() glTranslatef(0.0f,0.0f,-100.0f); //Centre volume and move back glRotatef(m_xRotation, 1.0f, 0.0f, 0.0f); glRotatef(m_yRotation, 0.0f, 1.0f, 0.0f); - glTranslatef(-16.0f,-16.0f,-16.0f); //Centre volume and move back + glTranslatef(-32.0f,-32.0f,-32.0f); //Centre volume and move back //Bind the index buffer glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); diff --git a/examples/Basic/main.cpp b/examples/Basic/main.cpp index 6491d743..51dd24e4 100644 --- a/examples/Basic/main.cpp +++ b/examples/Basic/main.cpp @@ -24,13 +24,10 @@ freely, subject to the following restrictions: #include "OpenGLWidget.h" #include "MaterialDensityPair.h" -#include "CubicSurfaceExtractor.h" #include "CubicSurfaceExtractorWithNormals.h" #include "SurfaceMesh.h" #include "Volume.h" -#include "MeshDecimator.h" - #include //Use the PolyVox namespace @@ -39,9 +36,7 @@ using namespace PolyVox; void createSphereInVolume(Volume& volData, float fRadius) { //This vector hold the position of the center of the volume - //Vector3DFloat v3dVolCenter(volData.getWidth() / 2, volData.getHeight() / 2, volData.getDepth() / 2); - - Vector3DFloat v3dVolCenter(16, 16, 16); + Vector3DFloat v3dVolCenter(volData.getWidth() / 2, volData.getHeight() / 2, volData.getDepth() / 2); //This three-level for loop iterates over every voxel in the volume for (int z = 0; z < volData.getWidth(); z++) @@ -60,16 +55,14 @@ void createSphereInVolume(Volume& volData, float fRadius) { //Our new density value uint8_t uDensity = MaterialDensityPair44::getMaxDensity(); - uint8_t uMaterial = 3; //Get the old voxel MaterialDensityPair44 voxel = volData.getVoxelAt(x,y,z); //Modify the density voxel.setDensity(uDensity); - voxel.setMaterial(uMaterial); - //Write the voxel value into the volume + //Wrte the voxel value into the volume volData.setVoxelAt(x, y, z, voxel); } } @@ -77,28 +70,6 @@ void createSphereInVolume(Volume& volData, float fRadius) } } -void addNormals(const PolyVox::SurfaceMesh& inputMesh, PolyVox::SurfaceMesh& outputMesh) -{ - outputMesh.m_Region = inputMesh.m_Region; - - outputMesh.m_vecTriangleIndices.clear(); - for(int ct = 0; ct < inputMesh.m_vecTriangleIndices.size(); ++ct) - { - outputMesh.m_vecTriangleIndices.push_back(inputMesh.m_vecTriangleIndices[ct]); - } - - outputMesh.m_vecVertices.clear(); - for(int ct = 0; ct < inputMesh.m_vecVertices.size(); ++ct) - { - PositionMaterialNormal vertex; - vertex.position = inputMesh.m_vecVertices[ct].position; - vertex.material = inputMesh.m_vecVertices[ct].material; - outputMesh.m_vecVertices.push_back(vertex); - } - - outputMesh.generateAveragedFaceNormals(true, true); -} - int main(int argc, char *argv[]) { //Create and show the Qt OpenGL window @@ -107,77 +78,16 @@ int main(int argc, char *argv[]) openGLWidget.show(); //Create an empty volume and then place a sphere in it - Volume volData(32, 32, 32, 32); - //createSphereInVolume(volData, 30); - - //This three-level for loop iterates over every voxel in the volume - /*for (int z = 8; z < 24; z++) - { - for (int y = 8; y < 24; y++) - { - for (int x = 8; x < 16; x++) - { - //Our new density value - uint8_t uDensity = MaterialDensityPair44::getMaxDensity(); - - //Get the old voxel - MaterialDensityPair44 voxel = volData.getVoxelAt(x,y,z); - - //Modify the density - voxel.setDensity(uDensity); - voxel.setMaterial(5); - - //Write the voxel value into the volume - volData.setVoxelAt(x, y, z, voxel); - } - } - } - - for (int z = 8; z < 24; z++) - { - for (int y = 8; y < 24; y++) - { - for (int x = 16; x < 24; x++) - { - //Our new density value - uint8_t uDensity = MaterialDensityPair44::getMaxDensity(); - - //Get the old voxel - MaterialDensityPair44 voxel = volData.getVoxelAt(x,y,z); - - //Modify the density - voxel.setDensity(uDensity); - voxel.setMaterial(5); - - //Write the voxel value into the volume - volData.setVoxelAt(x, y, z, voxel); - } - } - }*/ - - createSphereInVolume(volData, 10); + Volume volData(64, 64, 64); + createSphereInVolume(volData, 30); //Extract the surface - Region region(Vector3DInt16(2,2,2), Vector3DInt16(20,20,20)); - SurfaceMesh mesh; - //CubicSurfaceExtractor surfaceExtractor(&volData, volData.getEnclosingRegion(), &mesh); - CubicSurfaceExtractor surfaceExtractor(&volData, region, &mesh); + SurfaceMesh mesh; + CubicSurfaceExtractorWithNormals surfaceExtractor(&volData, volData.getEnclosingRegion(), &mesh); surfaceExtractor.execute(); - /*SurfaceMesh meshWithNormals; - addNormals(mesh, meshWithNormals); - - meshWithNormals.decimate(0.99);*/ - - MeshDecimator decimator(&mesh); - decimator.execute(); - - SurfaceMesh meshWithNormals; - addNormals(mesh, meshWithNormals); - //Pass the surface to the OpenGL window - openGLWidget.setSurfaceMeshToRender(meshWithNormals); - //openGLWidget.setSurfaceMeshToRender(mesh); + openGLWidget.setSurfaceMeshToRender(mesh); //Run the message pump. return app.exec(); diff --git a/examples/OpenGL/OpenGLWidget.cpp b/examples/OpenGL/OpenGLWidget.cpp index 36acaf07..82c283c8 100644 --- a/examples/OpenGL/OpenGLWidget.cpp +++ b/examples/OpenGL/OpenGLWidget.cpp @@ -28,7 +28,6 @@ freely, subject to the following restrictions: #include "GradientEstimators.h" #include "MaterialDensityPair.h" #include "SurfaceExtractor.h" -#include "MeshDecimator.h" #include "Mesh.h" @@ -126,9 +125,6 @@ void OpenGLWidget::setVolume(PolyVox::Volume* volData) //mesh->decimate(0.999f); - MeshDecimator decimator(mesh.get()); - decimator.execute(); - //mesh->generateAveragedFaceNormals(true); ////////////////////////////////////////////////////////////////////////////////