Пример #1
0
void transformation(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glutSwapBuffers();
    RedrawLines();
    glutSwapBuffers();
    return;
}
Пример #2
0
void ParallelPlaneManager::Redraw(){
    QMutexLocker locker(&data_mutex_);

    UpdateActiveSubjects();

    osg::Geometry* pointsGeom = geode_->getDrawable(0)->asGeometry();
    osg::Geometry* linesGeom = geode_->getDrawable(1)->asGeometry();

    {   //redraw points
        osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array();
        osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array();
        vertices->push_back(osg::Vec3f(0,0,0)); //origin
        vertices->push_back(osg::Vec3f(0,1,0)); //y+
        vertices->push_back(osg::Vec3f(1,0,0)); //x+

        colors->push_back(osg::Vec4f(1,0,0,1));
        colors->push_back(osg::Vec4f(0,1,0,1));
        colors->push_back(osg::Vec4f(0,0,1,1));
        for(int p = 0; p < planes_.size(); ++p){
            RedrawPoints(p,vertices,colors);
        }
        pointsGeom->setVertexArray(vertices);
        pointsGeom->setColorArray(colors, osg::Array::BIND_PER_VERTEX);

        if(pointsGeom->getNumPrimitiveSets()==0){
            pointsGeom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POINTS,0,vertices->size()));
        } else {
            osg::DrawArrays *draw = (osg::DrawArrays*)pointsGeom->getPrimitiveSet(0);
            draw->setCount(vertices->size());
        }
    }
    {   //redraw lines
        osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array();
        osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array();
        for(int p = 0; p < planes_.size()-1; ++p){
            RedrawLines(p,p+1,vertices,colors);
        }
        linesGeom->setVertexArray(vertices);
        linesGeom->setColorArray(colors, osg::Array::BIND_PER_VERTEX);

        if(linesGeom->getNumPrimitiveSets()==0){
            linesGeom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES,0,vertices->size()));
        } else {
            osg::DrawArrays *draw = (osg::DrawArrays*)linesGeom->getPrimitiveSet(0);
            draw->setCount(vertices->size());
        }
    }
}
Пример #3
0
static void key(unsigned char key, int x, int y)
{
    glClear(GL_COLOR_BUFFER_BIT);
    switch (key)
    {
        case 27 :
        case 'q':
        case 'e':
            exit(0);
            break;
        case 'c':
            glutSwapBuffers();
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clean the screen and the depth buffer
            RedrawLines();
            glutSwapBuffers();
            break;
        case 'w':

            Translate(0,translation_factor);

            glutSwapBuffers();
            RedrawLines();
            glutSwapBuffers();
            break;

        case 's':
            Translate(0,-translation_factor);

            glutSwapBuffers();
            RedrawLines();
            glutSwapBuffers();
            break;
        case 'a':

            Translate(-translation_factor,0);

            glutSwapBuffers();
            RedrawLines();
            glutSwapBuffers();
            break;

        case 'd':
            Translate(translation_factor,0);

            glutSwapBuffers();
            RedrawLines();
            glutSwapBuffers();
            break;
        case '+':

            Scale(scaling_factor_x,scaling_factor_y);

            glutSwapBuffers();
            RedrawLines();
            glutSwapBuffers();
            break;

        case '-':
            Scale(1/scaling_factor_x,1/scaling_factor_y);

            glutSwapBuffers();
            RedrawLines();
            glutSwapBuffers();
            break;

        case 'l':
        case '1':

            Rotate(rotation_factor);

            glutSwapBuffers();
            RedrawLines();
            glutSwapBuffers();
            break;

        case 'r':
        case '2':
            Rotate(-rotation_factor);

            glutSwapBuffers();
            RedrawLines();
            glutSwapBuffers();
            break;
    }

    //glutPostRedisplay();
}