Example #1
0
void
UiSettings::loadSettings()
{
    QSettings s( "CS224", "snow" );

    windowPosition() = s.value( "windowPosition", QPoint(0,0) ).toPoint();
    windowSize() = s.value( "windowSize", QSize(1000,800) ).toSize();

    fillNumParticles() = s.value( "fillNumParticles", 512*128 ).toInt();
    fillResolution() = s.value( "fillResolution", 0.05f ).toFloat();
    fillDensity() = s.value( "fillDensity", 150.f ).toFloat();

    exportDensity() = s.value("exportDensity", false).toBool();
    exportVelocity() = s.value("exportVelocity", false).toBool();

    exportFPS() = s.value("exportFPS", 24).toInt();
    maxTime() = s.value("maxTime", 3).toFloat();

    gridPosition() = vec3( s.value("gridPositionX", 0.f).toFloat(),
                           s.value("gridPositionY", 0.f).toFloat(),
                           s.value("gridPositionZ", 0.f).toFloat() );


    gridDimensions() = glm::ivec3( s.value("gridDimensionX", 128).toInt(),
                                   s.value("gridDimensionY", 128).toInt(),
                                   s.value("gridDimensionZ", 128).toInt() );

    gridResolution() = s.value( "gridResolution", 0.05f ).toFloat();

    timeStep() = s.value( "timeStep", 1e-5 ).toFloat();
    implicit() = s.value( "implicit", true ).toBool();
    materialPreset() = s.value( "materialPreset", MAT_DEFAULT).toInt();

    showContainers() = s.value( "showContainers", true ).toBool();
    showContainersMode() = s.value( "showContainersMode", WIREFRAME ).toInt();
    showColliders() = s.value( "showColliders", true ).toBool();
    showCollidersMode() = s.value( "showCollidersMode", SOLID ).toInt();
    showGrid() = s.value( "showGrid", false ).toBool();
    showGridMode() = s.value( "showGridMode", MIN_FACE_CELLS ).toInt();
    showGridData() = s.value( "showGridData", false ).toBool();
    showGridDataMode() = s.value( "showGridDataMode", NODE_DENSITY ).toInt();
    showParticles() = s.value( "showParticles", true ).toBool();
    showParticlesMode() = s.value( "showParticlesMode", PARTICLE_MASS ).toInt();

    selectionColor() = glm::vec4( 0.302f, 0.773f, 0.839f, 1.f );
}
Example #2
0
void
UiSettings::saveSettings()
{
    QSettings s( "CS224", "snow" );

    s.setValue( "windowPosition", windowPosition() );
    s.setValue( "windowSize", windowSize() );

    s.setValue( "fillNumParticles", fillNumParticles() );
    s.setValue( "fillResolution", fillResolution() );
    s.setValue( "fillDensity", fillDensity() );

    s.setValue("exportDensity", exportDensity());
    s.setValue("exportVelocity",exportVelocity());
    s.setValue( "exportFPS", exportFPS());
    s.setValue( "maxTime", maxTime());

    s.setValue( "gridPositionX", gridPosition().x );
    s.setValue( "gridPositionY", gridPosition().y );
    s.setValue( "gridPositionZ", gridPosition().z );

    s.setValue( "gridDimensionX", gridDimensions().x );
    s.setValue( "gridDimensionY", gridDimensions().y );
    s.setValue( "gridDimensionZ", gridDimensions().z );

    s.setValue( "gridResolution", gridResolution() );

    s.setValue( "timeStep", timeStep() );
    s.setValue( "implicit", implicit() );
    s.setValue("materialPreset", materialPreset());

    s.setValue( "showContainers", showContainers() );
    s.setValue( "showContainersMode", showContainersMode() );
    s.setValue( "showColliders", showColliders() );
    s.setValue( "showCollidersMode", showCollidersMode() );
    s.setValue( "showGrid", showGrid() );
    s.setValue( "showGridMode", showGridMode() );
    s.setValue( "showGridData", showGridData() );
    s.setValue( "showGridDataMode", showGridDataMode() );
    s.setValue( "showParticles", showParticles() );
    s.setValue( "showParticlesMode", showParticlesMode() );
}
Example #3
0
void GridExporter::write()
{
	// m_writeMutex.lock();

	m_writingFile = true;
	
	int numCells = m_grid->getNumberOfGridCells();
	int sizeX = m_grid->getGridSizeX();
	int sizeY = m_grid->getGridSizeY();
	int sizeZ = m_grid->getGridSizeZ();
	
	float* density = m_grid->getDensityArray();
	float* velx = m_grid->getVelocityXArray();
	float* vely = m_grid->getVelocityYArray();
	float* velz = m_grid->getVelocityZArray();
	float dx = m_grid->getVoxelSize();
	exportDensity(m_filenameCounter, m_filenamePrefix, density, velx, vely, velz, sizeX, sizeY, sizeZ, dx);

	m_filenameCounter++;
	
	m_writingFile = false;
	
	// m_writeMutex.unlock();
}
Example #4
0
void renderFunc() {
	glDepthMask(GL_TRUE);
	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
	int gridSizeX = fsolver->getGridSizeX(),
	    gridSizeY = fsolver->getGridSizeY(),
		gridSizeZ = fsolver->getGridSizeZ();
	Float dx = fsolver->getVoxelSize();
	const vector<Density> &density = fsolver->getDensity();
	const Vector &curlMagnitude = fsolver->getCurlMagnitude();
	const bool *solid = fsolver->getSolid();

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	gluLookAt(0,0,-distZ,0,0,0,0,-1,0);
	glRotated(angleY, 1, 0, 0);
	glRotated(angleX, 0, 1, 0);
	glTranslatef(-gridSizeX/2.0f, -gridSizeY/2.0f, -gridSizeZ/2.0f);
	glCullFace(GL_NONE);
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
	glDepthFunc(GL_LEQUAL);
	glEnable(GL_DEPTH_TEST);
	glBegin(GL_QUADS);
		glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
		glVertex3i(0,   0, 0);
		glVertex3i(0,   gridSizeY, 0);
		glVertex3i(gridSizeX, gridSizeY, 0);
		glVertex3i(gridSizeX, 0, 0);
		
		glVertex3i(0,   0, gridSizeZ);
		glVertex3i(0,   gridSizeY, gridSizeZ);
		glVertex3i(gridSizeX, gridSizeY, gridSizeZ);
		glVertex3i(gridSizeX, 0, gridSizeZ);
		
		glVertex3i(0, 0,   0);
		glVertex3i(0, 0,   gridSizeZ);
		glVertex3i(0, gridSizeY, gridSizeZ);
		glVertex3i(0, gridSizeY, 0);
		
		glVertex3i(gridSizeX, 0,   0);
		glVertex3i(gridSizeX, 0,   gridSizeZ);
		glVertex3i(gridSizeX, gridSizeY, gridSizeZ);
		glVertex3i(gridSizeX, gridSizeY, 0);

		glVertex3i(0,   0, 0);
		glVertex3i(0,   0, gridSizeZ);
		glVertex3i(gridSizeX, 0, gridSizeZ);
		glVertex3i(gridSizeX, 0, 0);
		
		glVertex3i(0,   gridSizeY, 0);
		glVertex3i(0,   gridSizeY, gridSizeZ);
		glVertex3i(gridSizeX, gridSizeY, gridSizeZ);
		glVertex3i(gridSizeX, gridSizeY, 0);
	glEnd();			
	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	glBegin(GL_QUADS);
	glColor4f(.5f, .5f, 1.0f, 1.0f);
	for (int z=0, pos = 0; z<gridSizeZ; ++z) {
		for (int y=0; y<gridSizeY; ++y) {
			for (int x=0; x<gridSizeX; ++x, ++pos) {
				if (!solid[pos])
					continue;
				glVertex3i(x,   y, z);
				glVertex3i(x,   y+1, z);
				glVertex3i(x+1, y+1, z);
				glVertex3i(x+1, y, z);
				
				glVertex3i(x,   y, z+1);
				glVertex3i(x,   y+1, z+1);
				glVertex3i(x+1, y+1, z+1);
				glVertex3i(x+1, y, z+1);
				
				glVertex3i(x, y,   z);
				glVertex3i(x, y,   z+1);
				glVertex3i(x, y+1, z+1);
				glVertex3i(x, y+1, z);
				
				glVertex3i(x+1, y,   z);
				glVertex3i(x+1, y,   z+1);
				glVertex3i(x+1, y+1, z+1);
				glVertex3i(x+1, y+1, z);

				glVertex3i(x,   y, z);
				glVertex3i(x,   y, z+1);
				glVertex3i(x+1, y, z+1);
				glVertex3i(x+1, y, z);
				
				glVertex3i(x,   y+1, z);
				glVertex3i(x,   y+1, z+1);
				glVertex3i(x+1, y+1, z+1);
				glVertex3i(x+1, y+1, z);
				
			}
		}
	}
	glEnd();
	glDepthMask(GL_FALSE);
	glBegin(GL_QUADS);
	for (int z=0, pos = 0; z<gridSizeZ; ++z) {
		for (int y=0; y<gridSizeY; ++y) {
			for (int x=0; x<gridSizeX; ++x, ++pos) {
				if (solid[pos])
					continue;
				if (displayMode == 0) {
					Float f = .5f * density[pos].density;
					glColor4f(1.0f, 1.0f, 1.0f, f);
				} else {
					Float f = .01f * curlMagnitude[pos];
					glColor4f(0.0f, 0.0f, 1.0f, f);
				}
				glVertex3i(x,   y, z);
				glVertex3i(x,   y+1, z);
				glVertex3i(x+1, y+1, z);
				glVertex3i(x+1, y, z);
				
				glVertex3i(x,   y, z+1);
				glVertex3i(x,   y+1, z+1);
				glVertex3i(x+1, y+1, z+1);
				glVertex3i(x+1, y, z+1);
				
				glVertex3i(x, y,   z);
				glVertex3i(x, y,   z+1);
				glVertex3i(x, y+1, z+1);
				glVertex3i(x, y+1, z);
				
				glVertex3i(x+1, y,   z);
				glVertex3i(x+1, y,   z+1);
				glVertex3i(x+1, y+1, z+1);
				glVertex3i(x+1, y+1, z);

				glVertex3i(x,   y, z);
				glVertex3i(x,   y, z+1);
				glVertex3i(x+1, y, z+1);
				glVertex3i(x+1, y, z);
				
				glVertex3i(x,   y+1, z);
				glVertex3i(x,   y+1, z+1);
				glVertex3i(x+1, y+1, z+1);
				glVertex3i(x+1, y+1, z);
				
			}
		}
	}

	glEnd();
	if (displayVelocities > 0) {
		glDisable(GL_BLEND);
		glBegin(GL_LINES);
		glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
		for (int z=0, pos=0; z<gridSizeZ; ++z) {
			for (int y=0; y<gridSizeY; ++y) {
				for (int x=0; x<gridSizeX; ++x, ++pos) {
					if ((x%2) != 0 || (y%2) != 0 || (z%2) != 0)
						continue;
					Vector3 velocity;
					if (displayVelocities == 1)
						velocity = fsolver->getVelocity(Point3((x+.5f)*dx, (y+.5f)*dx, (z+.5f)*dx));
					else if (displayVelocities == 2)
						velocity = fsolver->getForce(Point3((x+.5f)*dx, (y+.5f)*dx, (z+.5f)*dx));
					velocity /= dx;
					glVertex3f(x+.5f, y+.5f, z+.5f);
					glVertex3f(x+.5f+velocity.x, y+.5f+velocity.y, z+.5f+velocity.z);
				}
			}
		}
		glEnd();
	}

	glutSwapBuffers();
	if (running) {
		fsolver->step(0.1f);
		exportDensity(frameCounter);
		screenshot(frameCounter++);
		glutPostRedisplay();
	}
}