Ejemplo n.º 1
0
/**
 * @brief cwGeometryItersecter::addTriangles
 * @param object
 *
 * Add the object to the itersector
 */
void cwGeometryItersecter::addObject(const cwGeometryItersecter::Object &object)
{
    switch(object.type()) {
    case Triangles:
        addTriangles(object);
        break;
    case Lines:
        addLines(object);
        break;
    default:
        break;
    }
}
Ejemplo n.º 2
0
void RenderSky(float x, float z)
{
    glDisable(GL_DEPTH_TEST);
    // No textures please
    glBindTexture(GL_TEXTURE_2D,0);
    // We will make a cone of triangles
    glBegin(GL_TRIANGLE_FAN);
    // A dark blue for the high sky.  The light colour is defined in magrathea.h
    glColor3f(0.08984f,0.39453f,0.80859f);
    glVertex3f(x,400.f,z);
    glColor3fv(skyColor);
    // The sin and cos describes a circe surrounding the given position.
    for (int i = 21; i>=0; i--)
        glVertex3f(x+1000*sin(i/20.f*3.1415*2),0.f,z+1000*cos(i/20.f*3.1415*2));
    glEnd();
    // And just for the hell of it, tell me how many triangles this contributes to the total.
    addTriangles(21);
    glEnable(GL_DEPTH_TEST);
}
Ejemplo n.º 3
0
void PerlinFace::updateVertices() {
    const GLubyte SKIN_COLOR[] = {255, 214, 163};
    const GLubyte MOUSE_COLOR[] = {200, 159, 108};
    const GLubyte HAIR_COLOR[] = {0, 0, 0};

    _trianglesCount = 0;
    _trianglesPos = _triangles;
    _normalsPos = _normals;
    _colorsPos = _colors;

    std::swap(_oldNormals, _newNormals);

    // Brows
    addTriangles(BROW_LEFT, BROW_MID_TOP, BROW_MID_BOTTOM, 0, 0, 0);
    addTriangles(BROW_MID_BOTTOM, BROW_MID_TOP, BROW_RIGHT_TOP, 0, 0, 0);
    addTriangles(BROW_MID_BOTTOM, BROW_RIGHT_TOP, BROW_RIGHT_BOTTOM, 0, 0, 0);

    // Forehead
    addTriangles(FOREHEAD_LEFT, FOREHEAD_RIGHT, BROW_MID_TOP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(FOREHEAD_LEFT, BROW_MID_TOP, BROW_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(FOREHEAD_RIGHT, BROW_RIGHT_TOP, BROW_MID_TOP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(FOREHEAD_RIGHT, BROW_RIGHT_TOP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(BROW_RIGHT_TOP, BROW_RIGHT_BOTTOM, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);

    // Eyes
    addTriangles(BROW_LEFT, BROW_MID_BOTTOM, EYE_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EYE_LEFT, BROW_MID_BOTTOM, EYE_MID_TOP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(BROW_MID_BOTTOM, BROW_RIGHT_BOTTOM, EYE_MID_TOP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EYE_MID_TOP, BROW_RIGHT_BOTTOM, EYE_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(BROW_RIGHT_BOTTOM, EYE_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);

    // Temp eye draw
    addTriangles(EYE_LEFT, EYE_MID_TOP, EYEBALL_MID, 255, 255, 255);
    addTriangles(EYE_MID_TOP, EYE_RIGHT, EYEBALL_MID, 255, 255, 255);
    addTriangles(EYE_RIGHT, EYE_MID_BOTTOM, EYEBALL_MID, 255, 255, 255);
    addTriangles(EYE_MID_BOTTOM, EYE_LEFT, EYEBALL_MID, 255, 255, 255);

    // Chick
    addTriangles(EAR_CENTER, FOREHEAD_LEFT, BROW_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(BROW_LEFT, CHICK_LEFT, EAR_CENTER, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(BROW_LEFT, EYE_LEFT, CHICK_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EYE_LEFT, EYE_MID_BOTTOM, CHICK_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EYE_MID_BOTTOM, EYE_RIGHT, NOSTRIL_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(CHICK_LEFT, EYE_MID_BOTTOM, NOSTRIL_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(CHICK_LEFT, NOSTRIL_LEFT, CHICK_MID, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(CHICK_MID, NOSTRIL_LEFT, MOUTH_TOP_OUT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(CHICK_MID, MOUTH_TOP_OUT, MOUTH_MID_OUT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(CHICK_MID, MOUTH_MID_OUT, CHIN_TIP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(CHICK_MID, CHIN_TIP, CHICK_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(CHICK_RIGHT, CHIN_TIP, CHIN_BOTTOM, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(CHICK_LEFT, CHICK_MID, CHICK_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_CENTER, CHICK_LEFT, JAW_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(JAW_LEFT, CHICK_LEFT, CHICK_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);


    // Nose
    addTriangles(EYE_RIGHT, NOSE_LEFT, NOSTRIL_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EYE_RIGHT, NOSE_RIGHT, NOSE_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(NOSE_LEFT, NOSE_RIGHT, NOSTRIL_TOP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(EYE_RIGHT, NOSE_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(NOSE_RIGHT, NOSTRIL_TOP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);

    addTriangles(NOSTRIL_LEFT, NOSE_LEFT, NOSTRIL_TOP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(NOSTRIL_LEFT, NOSTRIL_TOP, NOSTRIL_BOTTOM, 0, 0, 0);
    addJunction(NOSTRIL_TOP, NOSTRIL_BOTTOM, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);

    addTriangles(NOSTRIL_LEFT, NOSTRIL_BOTTOM, MOUTH_TOP_OUT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(NOSTRIL_BOTTOM, MOUTH_TOP_OUT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);

    // Mouth
    addTriangles(MOUTH_TOP_OUT, MOUTH_TOP_IN, MOUTH_MID_OUT, MOUSE_COLOR[0], MOUSE_COLOR[1], MOUSE_COLOR[2]);
    addTriangles(MOUTH_TOP_IN, MOUTH_MID_IN, MOUTH_MID_OUT, MOUSE_COLOR[0], MOUSE_COLOR[1], MOUSE_COLOR[2]);
    addTriangles(MOUTH_MID_OUT, MOUTH_MID_IN, MOUTH_BOTTOM_OUT, MOUSE_COLOR[0], MOUSE_COLOR[1], MOUSE_COLOR[2]);
    addTriangles(MOUTH_MID_IN, MOUTH_BOTTOM_IN, MOUTH_BOTTOM_OUT, MOUSE_COLOR[0], MOUSE_COLOR[1], MOUSE_COLOR[2]);
    addJunction(MOUTH_TOP_OUT, MOUTH_TOP_IN, MOUSE_COLOR[0], MOUSE_COLOR[1], MOUSE_COLOR[2]);
    addJunction(MOUTH_BOTTOM_OUT, MOUTH_BOTTOM_IN, MOUSE_COLOR[0], MOUSE_COLOR[1], MOUSE_COLOR[2]);

    addTriangles(MOUTH_MID_IN, MOUTH_TOP_IN, MOUTH_BOTTOM_IN, 0, 0, 0);
    addJunction(MOUTH_TOP_IN, MOUTH_BOTTOM_IN, 0, 0, 0);


    // Chin
    addTriangles(MOUTH_MID_OUT, MOUTH_BOTTOM_OUT, CHIN_IN, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(MOUTH_MID_OUT, CHIN_IN, CHIN_TIP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);

    addJunction(MOUTH_BOTTOM_OUT, CHIN_IN, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(CHIN_IN, CHIN_TIP, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(CHIN_TIP, CHIN_BOTTOM, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);

    // Jaw
    addTriangles(JAW_BOTTOM_LEFT, JAW_LEFT, CHICK_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(JAW_LEFT, JAW_BOTTOM_LEFT, EAR_CENTER, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(JAW_BOTTOM_LEFT, CHICK_RIGHT, CHIN_BOTTOM, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(JAW_BOTTOM_LEFT, CHIN_BOTTOM, JAW_BOTTOM, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addJunction(CHIN_BOTTOM, JAW_BOTTOM, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);

    // Ear
    addTriangles(FOREHEAD_LEFT, EAR_CENTER, EAR_TOP_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(JAW_BOTTOM_LEFT, EAR_BOTTOM_RIGHT, EAR_CENTER, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_BOTTOM_RIGHT, EAR_TOP_RIGHT, EAR_CENTER, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_BOTTOM_RIGHT, EAR_BOTTOM_LEFT, EAR_TOP_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_TOP_LEFT, EAR_TOP_MID, EAR_TOP_RIGHT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_TOP_RIGHT, EAR_BOTTOM_RIGHT, EAR_TOP_LEFT, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_TOP_RIGHT, EAR_TOP_MID, EAR_BACK, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_TOP_LEFT, EAR_TOP_MID, EAR_BACK, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_BOTTOM_LEFT, EAR_TOP_LEFT, EAR_BACK, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);
    addTriangles(EAR_BOTTOM_LEFT, EAR_BOTTOM_RIGHT, EAR_BACK, SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]);


    // hair
    addTriangles(FOREHEAD_RIGHT, FOREHEAD_LEFT, HAIR_1, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(FOREHEAD_LEFT, HAIR_2, HAIR_1, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(FOREHEAD_LEFT, HAIR_3, HAIR_2, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(FOREHEAD_LEFT, HAIR_SIDE_1, HAIR_3, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(FOREHEAD_LEFT, HAIR_SIDE_2, HAIR_SIDE_1, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(FOREHEAD_LEFT, HAIR_SIDE_3, HAIR_SIDE_2, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(FOREHEAD_LEFT, EAR_TOP_RIGHT, HAIR_SIDE_3, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(EAR_TOP_RIGHT, HAIR_SIDE_4, HAIR_SIDE_3, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(EAR_TOP_RIGHT, EAR_BOTTOM_RIGHT, HAIR_SIDE_4, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(EAR_BOTTOM_RIGHT, HAIR_SIDE_5, HAIR_SIDE_4, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(EAR_BOTTOM_RIGHT, JAW_BOTTOM_LEFT, HAIR_SIDE_5, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);

    addTriangles(HAIR_3, HAIR_SIDE_1, HAIR_4, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_1, HAIR_SIDE_2, HAIR_4, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_2, HAIR_5, HAIR_4, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_2, HAIR_6, HAIR_5, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_2, HAIR_SIDE_3, HAIR_6, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_3, HAIR_7, HAIR_6, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_3, HAIR_SIDE_4, HAIR_7, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_4, HAIR_8, HAIR_7, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_4, HAIR_SIDE_5, HAIR_8, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_5, HAIR_9, HAIR_8, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_5, JAW_BOTTOM, HAIR_9, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addTriangles(HAIR_SIDE_5, JAW_BOTTOM, JAW_BOTTOM_LEFT, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);

    addJunction(FOREHEAD_RIGHT, HAIR_1, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_1, HAIR_2, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_2, HAIR_3, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_3, HAIR_4, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_4, HAIR_5, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_5, HAIR_6, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_6, HAIR_7, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_7, HAIR_8, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_8, HAIR_9, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);
    addJunction(HAIR_9, JAW_BOTTOM, HAIR_COLOR[0], HAIR_COLOR[1], HAIR_COLOR[2]);

    // Now that we have summed up the normals for each point, let's normalize them.
    for (int i = 0; i < _vertexNumber; ++i) {
        _newNormals[i] = glm::normalize(_newNormals[i]);
    }
}
Ejemplo n.º 4
0
CardBuilder::CardBuilder(const CardSpecifications& specifications)
    : _specifications(specifications)
{
    float w = _specifications.width() / 2.0f;
    float h = _specifications.height() / 2.0f;
    float cr = _specifications.cornerRadius();
    int cd = _specifications.cornerDetail();

    int vertexCount = 8 * cd + 16;
    _vertices.reserve(vertexCount * 3);
    _textureCoordinates.reserve(vertexCount * 2);

    // upper left corner
    addVertex(cr - w, h - cr, cr / _specifications.width(),
        cr / _specifications.height());

    addVertex(-w, h - cr, 0.0f, cr / _specifications.height());

    float theta = 90.0f / float(cd);
    for (int i = 1; i < cd; ++i)
    {
        float radians = float(i) * theta * (3.1415926535898f / 180.0f);
        float dx = cr * cos(radians);
        float dy = cr * sin(radians);

        addVertex(cr - w - dx, h  - cr + dy,
            (cr - dx) / _specifications.width(),
            (cr - dy) / _specifications.height());
    }

    addVertex(cr - w, h, cr / _specifications.width(), 0.0f);

    // upper right corner
    addVertex(-_vertices[0], _vertices[1],
        1.0f - _textureCoordinates[0],
        _textureCoordinates[1]);

    int previousVertex = _vertices.size() - 6;
    int previousTexture = _textureCoordinates.size() - 4;

    int mirrorVertex = _vertices.size() - 12;
    int mirrorTexture = _textureCoordinates.size() - 8;

    for (int i = 0; i <= cd; ++i)
    {
        addVertex(-_vertices[mirrorVertex], _vertices[mirrorVertex + 1],
            1.0f - _textureCoordinates[mirrorTexture],
            _textureCoordinates[mirrorTexture + 1]);

        mirrorVertex -= 6;
        mirrorTexture -= 4;
    }

    // lower right corner
    addVertex(_vertices[previousVertex], -_vertices[previousVertex + 1],
        _textureCoordinates[previousTexture],
        1.0f - _textureCoordinates[previousTexture + 1]);

    previousVertex = _vertices.size() - 6;
    previousTexture = _textureCoordinates.size() - 4;

    mirrorVertex = _vertices.size() - 12;
    mirrorTexture = _textureCoordinates.size() - 8;

    for (int i = 0; i <= cd; ++i)
    {
        addVertex(_vertices[mirrorVertex], -_vertices[mirrorVertex + 1],
            _textureCoordinates[mirrorTexture],
            1.0f - _textureCoordinates[mirrorTexture + 1]);

        mirrorVertex -= 6;
        mirrorTexture -= 4;
    }

    // lower left corner
    addVertex(-_vertices[previousVertex], _vertices[previousVertex + 1],
        1.0f - _textureCoordinates[previousTexture],
        _textureCoordinates[previousTexture + 1]);

    previousVertex = _vertices.size() - 6;
    previousTexture = _textureCoordinates.size() - 4;

    mirrorVertex = _vertices.size() - 12;
    mirrorTexture = _textureCoordinates.size() - 8;

    for (int i = 0; i <= cd; ++i)
    {
        addVertex(-_vertices[mirrorVertex], _vertices[mirrorVertex + 1],
            1.0f - _textureCoordinates[mirrorTexture],
            _textureCoordinates[mirrorTexture + 1]);

        mirrorVertex -= 6;
        mirrorTexture -= 4;
    }
    // texture correction
    for (int i = 0; i < vertexCount; ++i)
    {
        int index = i * 2 + 1;
        _textureCoordinates[index] = 1.0f - _textureCoordinates[index];
    }

    // index creation
    int triangleCount = 16 * cd + 28;
    int middleTriangleCount = 8 * cd + 8;
    int topTriangleCount = (triangleCount - middleTriangleCount) / 2;

    _topIndices.reserve(topTriangleCount * 3);
    _middleIndices.reserve(middleTriangleCount * 3);
    _bottomIndices.reserve(topTriangleCount * 3);

    GLushort corners[5];
    int cornerSize = 2 * cd + 4;

    for (int i = 0; i < 5; ++i)
        corners[i] = cornerSize * i;

    for (int i = 0; i < 4; ++i)
    {
        int i4 = (i + 1) % 4;
        addQuads(corners[i], corners[i + 1] - 2, corners[i4] + 2, corners[i4]);
        addQuad(corners[i + 1] - 2, corners[i + 1] - 1, corners[i4] + 3,
            corners[i4] + 2);

        for (int j = 0; j < cd; ++j)
        {
            int k = 2 * (j + 1);
            addTriangles(corners[i], corners[i] + k, corners[i] + k + 2);
            addQuad(corners[i] + k, corners[i] + k + 1, corners[i] + k + 3,
                corners[i] + k + 2);
        }
    }

    addQuads(corners[0], corners[1], corners[2], corners[3]);
}
Ejemplo n.º 5
0
void CardBuilder::addQuads(GLushort a, GLushort b, GLushort c, GLushort d)
{
    addTriangles(a, b, c);
    addTriangles(a, c, d);
}
Ejemplo n.º 6
0
void testApp::update() {	
	kinect.update();
	if(!panel.getValueB("pause") && kinect.isFrameNew())	{
		zCutoff = panel.getValueF("zCutoff");
		
		float fovWidth = panel.getValueF("fovWidth");
		float fovHeight = panel.getValueF("fovHeight");
		int left = Xres * (1 - fovWidth) / 2;
		int top = Yres * (1 - fovHeight) / 2;
		int right = left + Xres * fovWidth;
		int bottom = top + Yres * fovHeight;
		roiStart = Point2d(left, top);
		roiEnd = Point2d(right, bottom);
		
		ofVec3f nw = ConvertProjectiveToRealWorld(roiStart.x, roiStart.y, zCutoff);
		ofVec3f se = ConvertProjectiveToRealWorld(roiEnd.x - 1, roiEnd.y - 1, zCutoff);
		float width = (se - nw).x;
		float height = (se - nw).y;
		globalScale = panel.getValueF("stlSize") / MAX(width, height);
		
		backOffset = panel.getValueF("backOffset") / globalScale;
		
		cutoffKinect();
		
		if(panel.getValueB("useSmoothing")) {
			smoothKinect();
		}
		
		if(panel.getValueB("useWatermark")) {
			startTimer();
			injectWatermark();
			injectWatermarkTime = stopTimer();
		}
		
		startTimer();
		updateSurface();
		updateSurfaceTime = stopTimer();
		
		bool exportStl = panel.getValueB("exportStl");
		bool useRandomExport = panel.getValueB("useRandomExport");
		
		startTimer();
		if((exportStl && useRandomExport) || panel.getValueB("useRandom")) {
			updateTrianglesRandom();
		} else if(panel.getValueB("useSimplify")) {
			updateTrianglesSimplify();
		} else {
			updateTriangles();
		}
		calculateNormals(triangles, normals);
		updateTrianglesTime = stopTimer();
		
		startTimer();
		updateBack();
		updateBackTime = stopTimer();
		
		startTimer();
		postProcess();
		postProcessTime = stopTimer();
		
		if(exportStl) {
			string pocoTime = Poco::DateTimeFormatter::format(Poco::LocalDateTime(), "%Y-%m-%d at %H.%M.%S");
			
			ofxSTLExporter exporter;
			exporter.beginModel("Kinect Export");
			addTriangles(exporter, triangles, normals);
			addTriangles(exporter, backTriangles, backNormals);
			exporter.saveModel("Kinect Export " + pocoTime + ".stl");
			
#ifdef USE_REPLICATORG
			if(printer.isConnected()) {
				printer.printToFile("/home/matt/MakerBot/repg_workspace/ReplicatorG/examples/Snake.stl", "/home/matt/Desktop/snake.s3g");
			}
#endif
			
			panel.setValueB("exportStl", false);
		}
	}
	
	float diffuse = panel.getValueF("diffuseAmount");
	redLight.setDiffuseColor(ofColor(diffuse / 2, diffuse / 2, 0));
	greenLight.setDiffuseColor(ofColor(0, diffuse / 2, diffuse / 2));
	blueLight.setDiffuseColor(ofColor(diffuse / 2, 0, diffuse / 2));
	
	float ambient = 255 - diffuse;
	redLight.setAmbientColor(ofColor(ambient / 2, ambient / 2, 0));
	greenLight.setAmbientColor(ofColor(0, ambient / 2, ambient / 2));
	blueLight.setAmbientColor(ofColor(ambient / 2, 0, ambient / 2));
	
	float lightY = ofGetHeight() / 2 + panel.getValueF("lightY");
	float lightZ = panel.getValueF("lightZ");
	float lightDistance = panel.getValueF("lightDistance");
	float lightRotation = panel.getValueF("lightRotation");
	redLight.setPosition(ofGetWidth() / 2 + cos(lightRotation + 0 * TWO_PI / 3) * lightDistance,
											 lightY + sin(lightRotation + 0 * TWO_PI / 3) * lightDistance,
											 lightZ);
	greenLight.setPosition(ofGetWidth() / 2 + cos(lightRotation + 1 * TWO_PI / 3) * lightDistance,
												 lightY + sin(lightRotation + 1 * TWO_PI / 3) * lightDistance,
												 lightZ);
	blueLight.setPosition(ofGetWidth() / 2 + cos(lightRotation + 2 * TWO_PI / 3) * lightDistance,
												lightY + sin(lightRotation + 2 * TWO_PI / 3) * lightDistance,
												lightZ);
}