Reverted accidental commit.

This commit is contained in:
David Williams 2011-01-02 17:50:54 +00:00
parent 68ac0f0056
commit 090e002ff1
3 changed files with 12 additions and 111 deletions

View File

@ -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<float>(width()) / static_cast<float>(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);

View File

@ -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 <QApplication>
//Use the PolyVox namespace
@ -39,9 +36,7 @@ using namespace PolyVox;
void createSphereInVolume(Volume<MaterialDensityPair44>& 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<MaterialDensityPair44>& 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<MaterialDensityPair44>& volData, float fRadius)
}
}
void addNormals(const PolyVox::SurfaceMesh<PolyVox::PositionMaterial>& inputMesh, PolyVox::SurfaceMesh<PolyVox::PositionMaterialNormal>& 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<MaterialDensityPair44> 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<MaterialDensityPair44> volData(64, 64, 64);
createSphereInVolume(volData, 30);
//Extract the surface
Region region(Vector3DInt16(2,2,2), Vector3DInt16(20,20,20));
SurfaceMesh<PositionMaterial> mesh;
//CubicSurfaceExtractor<MaterialDensityPair44> surfaceExtractor(&volData, volData.getEnclosingRegion(), &mesh);
CubicSurfaceExtractor<MaterialDensityPair44> surfaceExtractor(&volData, region, &mesh);
SurfaceMesh<PositionMaterialNormal> mesh;
CubicSurfaceExtractorWithNormals<MaterialDensityPair44> surfaceExtractor(&volData, volData.getEnclosingRegion(), &mesh);
surfaceExtractor.execute();
/*SurfaceMesh<PositionMaterialNormal> meshWithNormals;
addNormals(mesh, meshWithNormals);
meshWithNormals.decimate(0.99);*/
MeshDecimator<PositionMaterial> decimator(&mesh);
decimator.execute();
SurfaceMesh<PositionMaterialNormal> 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();

View File

@ -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<MaterialDensityPair44>* volData)
//mesh->decimate(0.999f);
MeshDecimator<PositionMaterialNormal> decimator(mesh.get());
decimator.execute();
//mesh->generateAveragedFaceNormals(true);
////////////////////////////////////////////////////////////////////////////////