void GradientField::createTriangleModel()
{
	vector<ofVec3f> verts;
	vector<ofIndexType> indices;

	float centerSize = 30;
	float rad = getHeight()/2 - centerSize;
	ofVec3f cornerVec(0, -centerSize);
	ofVec3f triangleVec(0, -rad);
	ofVec3f center(getWidth()/2, getHeight()/2, 0);

	ofVec3f triangleCorners[3][3];
	triangleCorners[0][0] = center + cornerVec.getRotated(120, ofVec3f(0, 0, 1));
	triangleCorners[0][1] = triangleCorners[0][0] + triangleVec.getRotated(60, ofVec3f(0, 0, 1));
	triangleCorners[0][2] = triangleCorners[0][0] + triangleVec.getRotated(180, ofVec3f(0, 0, 1));

	triangleCorners[1][0] = center + cornerVec.getRotated(240, ofVec3f(0, 0, 1));
	triangleCorners[1][1] = triangleCorners[1][0] + triangleVec.getRotated(180, ofVec3f(0, 0, 1));
	triangleCorners[1][2] = triangleCorners[1][0] + triangleVec.getRotated(-60, ofVec3f(0, 0, 1));

	triangleCorners[2][0] = center + cornerVec;
	triangleCorners[2][1] = triangleCorners[2][0] + triangleVec.getRotated(-60, ofVec3f(0, 0, 1));
	triangleCorners[2][2] = triangleCorners[2][0] + triangleVec.getRotated(60, ofVec3f(0, 0, 1));

	for (int t=0; t<3; t++) {
		for (int i=0; i<3; i++) {
			verts.push_back(triangleCorners[t][i]);
		}
	}

	indices.push_back(0);
	indices.push_back(0);
	indices.push_back(0);

	indices.push_back(0);
	indices.push_back(0);
	indices.push_back(0);

	indices.push_back(0);
	indices.push_back(0);
	indices.push_back(0);

	indices.push_back(0);
	indices.push_back(0);
	indices.push_back(0);

	indices.push_back(0);
	indices.push_back(0);
	indices.push_back(0);

	indices.push_back(0);
	indices.push_back(0);
	indices.push_back(0);


}
Esempio n. 2
0
// Cubelet-corner sampling function.
void CubePolygonizer::evaluateCubelet(float cubeValues[8])
{
  assert(sampler != 0);
  assert(currCube != 0);

  // Loop unrolled to avoid bizarre table lookup weirdness... it's more readable this way, honest!
  // Lookup table from MarchingCube.h:
  // 0: (0,0,0)
  // 1: (1,0,0)
  // 2: (1,1,0)
  // 3: (0,1,0)
  // 4: (0,0,1)
  // 5: (1,0,1)
  // 6: (1,1,1)
  // 7: (0,1,1)

  IntVector cornerVec(currCube->getLocation().cell);
  float* valueFind;
  Vector v0;

  // Corner 0
  if ((valueFind = cornerValueCache.find(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2])) == 0)
  {
    v0 = Vector(currCube->getCorner(0)[0], currCube->getCorner(0)[1], currCube->getCorner(0)[2]);
    cubeValues[0] = sampler->getValueAt(v0);
    cornerValueCache.insert(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2], cubeValues[0]);
  }
  else
  {
    cubeValues[0] = *valueFind;
  }

  // Corner 1
  cornerVec.cell[0]++;
  if ((valueFind = cornerValueCache.find(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2])) == 0)
  {
    v0 = Vector(currCube->getCorner(1)[0], currCube->getCorner(1)[1], currCube->getCorner(1)[2]);
    cubeValues[1] = sampler->getValueAt(v0);
    cornerValueCache.insert(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2], cubeValues[1]);
  }
  else
  {
    cubeValues[1] = *valueFind;
  }

  // Corner 2
  cornerVec.cell[1]++;
  if ((valueFind = cornerValueCache.find(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2])) == 0)
  {
    v0 = Vector(currCube->getCorner(2)[0], currCube->getCorner(2)[1], currCube->getCorner(2)[2]);
    cubeValues[2] = sampler->getValueAt(v0);
    cornerValueCache.insert(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2], cubeValues[2]);
  }
  else
  {
    cubeValues[2] = *valueFind;
  }

  // Corner 3
  cornerVec.cell[0]--;
  if ((valueFind = cornerValueCache.find(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2])) == 0)
  {
    v0 = Vector(currCube->getCorner(3)[0], currCube->getCorner(3)[1], currCube->getCorner(3)[2]);
    cubeValues[3] = sampler->getValueAt(v0);
    cornerValueCache.insert(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2], cubeValues[3]);
  }
  else
  {
    cubeValues[3] = *valueFind;
  }

  // Corner 4
  cornerVec.cell[1]--;
  cornerVec.cell[2]++;
  if ((valueFind = cornerValueCache.find(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2])) == 0)
  {
    v0 = Vector(currCube->getCorner(4)[0], currCube->getCorner(4)[1], currCube->getCorner(4)[2]);
    cubeValues[4] = sampler->getValueAt(v0);
    cornerValueCache.insert(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2], cubeValues[4]);
  }
  else
  {
    cubeValues[4] = *valueFind;
  }

  // Corner 5
  cornerVec.cell[0]++;
  if ((valueFind = cornerValueCache.find(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2])) == 0)
  {
    v0 = Vector(currCube->getCorner(5)[0], currCube->getCorner(5)[1], currCube->getCorner(5)[2]);
    cubeValues[5] = sampler->getValueAt(v0);
    cornerValueCache.insert(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2], cubeValues[5]);
  }
  else
  {
    cubeValues[5] = *valueFind;
  }

  // Corner 6
  cornerVec.cell[1]++;
  if ((valueFind = cornerValueCache.find(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2])) == 0)
  {
    v0 = Vector(currCube->getCorner(6)[0], currCube->getCorner(6)[1], currCube->getCorner(6)[2]);
    cubeValues[6] = sampler->getValueAt(v0);
    cornerValueCache.insert(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2], cubeValues[6]);
  }
  else
  {
    cubeValues[6] = *valueFind;
  }

  // Corner 7
  cornerVec.cell[0]--;
  if ((valueFind = cornerValueCache.find(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2])) == 0)
  {
    v0 = Vector(currCube->getCorner(7)[0], currCube->getCorner(7)[1], currCube->getCorner(7)[2]);
    cubeValues[7] = sampler->getValueAt(v0);
    cornerValueCache.insert(cornerVec.cell[0], cornerVec.cell[1], cornerVec.cell[2], cubeValues[7]);
  }
  else
  {
    cubeValues[7] = *valueFind;
  }
}