예제 #1
0
void WarpPerspective::draw( bool controls )
{
	// only draw grid while editing
	if( isEditModeEnabled() ) {
		gl::pushModelMatrix();
		gl::multModelMatrix( getTransform() );

		glLineWidth( 1.0f );
		glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );

		gl::ScopedColor color( Color::white() );
		for( int i = 0; i <= 1; i++ ) {
			float s = i / 1.0f;
			gl::drawLine( vec2( s * (float) mWidth, 0.0f ), vec2( s * (float) mWidth, (float) mHeight ) );
			gl::drawLine( vec2( 0.0f, s * (float) mHeight ), vec2( (float) mWidth, s * (float) mHeight ) );
		}

		gl::drawLine( vec2( 0.0f, 0.0f ), vec2( (float) mWidth, (float) mHeight ) );
		gl::drawLine( vec2( (float) mWidth, 0.0f ), vec2( 0.0f, (float) mHeight ) );

		gl::popModelMatrix();

		if( controls ) {
			// draw control points		
			for( int i = 0; i < 4; i++ )
				drawControlPoint( toVec2f( mDestination[i] ), i == mSelected );
		}
	}
}
void WarpPerspectiveBilinear::draw(bool controls)
{
	// apply perspective transform
	gl::pushModelView();
	gl::multModelView( mWarp->getTransform() );

	// draw bilinear warp
	WarpBilinear::draw(false);

	// restore transform
	gl::popModelView();

	// draw edit interface
	if( isEditModeEnabled() ) {
		if(controls) {
			// draw control points
			for(unsigned i=0;i<mPoints.size();++i) 
				drawControlPoint( getControlPoint(i) * mWindowSize, mSelected==i );
		}
	}
}
예제 #3
0
void 
drawPath(e2dPath* path)  {
    glBindTexture(GL_TEXTURE_2D, 0);
    
    e2dPoint startPointOfSubPath;
    e2dPoint currentPoint;
    glBindTexture(GL_TEXTURE_2D, 0); 
    glColor4ub(255, 128, 128, 255);
    
    e2dPathElement* pathElem;
    e2dPathPoint* point;
    e2dPathCurve* curve;
    e2dPathElementIterator iter = e2dPathGetElementIterator(path);
    while(e2dPathElementIteratorHasNext(&iter))  {
        pathElem = e2dPathElementIteratorNext(&iter);
        switch(pathElem->type)
        {
            case(E2D_PATHPOINT):
                point = (e2dPathPoint*)pathElem;
                
                switch(pathElem->controlType)
                {
                    case(E2D_START_SUBPATH):
                        glBegin(GL_LINE_STRIP);
                        startPointOfSubPath = point->point;
                        glVertex3f(point->point.x, point->point.y, 5.0f);
                        currentPoint = point->point;
                        break;
                    case(E2D_END_SUBPATH):
                        glVertex3f(point->point.x, point->point.y, 5.0f);
                        glEnd();
                        currentPoint = point->point;
                        break;
                    case(E2D_END_SUBPATH_LOOP):
                        glVertex3f(point->point.x, point->point.y, 5.0f);
                        glVertex3f(startPointOfSubPath.x,
                                startPointOfSubPath.y,
                                2.5f);
                        
                        currentPoint = startPointOfSubPath;
                        glEnd();
                        break;
                    default:
                        glVertex3f(point->point.x, point->point.y, 5.0f);
                        currentPoint = point->point;
                        
                }
                
                break;
            case(E2D_PATHCURVE):
                curve = (e2dPathCurve*)pathElem;
                glEnd();
                drawControlPoint(curve->startPoint, curve->controlPoint1);
                drawControlPoint(curve->endPoint, curve->controlPoint2);
                glColor4ub(255, 128, 128, 255);
                glBegin(GL_LINE_STRIP);
                float t;
                for (t = 0.0f; t <= 1.0f; t += 0.05f)  {
                    float xt = 
                    powf(1.0f-t, 3.0f) * currentPoint.x + 
                    3.0f * t * powf (1.0f-t, 2.0f) * curve->controlPoint1.x +
                    3.0f * powf (t, 2.0f) * (1.0f-t) * curve->controlPoint2.x + 
                    powf (t, 3.0f) * curve->endPoint.x;

                    float yt = 
                    powf (1.0f-t, 3.0f) * currentPoint.y + 
                    3.0f * t * powf (1.0f-t, 2.0f) * curve->controlPoint1.y +
                    3.0f * powf (t, 2.0f) * (1.0f-t) * curve->controlPoint2.y + 
                    powf (t, 3.0f) * curve->endPoint.y;

                    glVertex3f(xt, yt, 5.0f);
                }
                
                currentPoint = curve->endPoint;
                if(pathElem->controlType == E2D_END_SUBPATH)
                    glEnd();
                else  {
                        if(pathElem->controlType == E2D_END_SUBPATH_LOOP)
                        {
                            glVertex3f(startPointOfSubPath.x, 
                                    startPointOfSubPath.y, 5.0f);
                            glEnd();
                            currentPoint = startPointOfSubPath;
                        }
                }
                    
                break;
        }
        
    }
    glColor4ub(255, 255, 255, 255);
    
    drawAxis();
    drawRect(path->element.bboxPosition, path->element.bboxWidth, path->element.bboxHeight);
    
}