Esempio n. 1
0
void Viewer::init()
{
    glewInit();
    //shader_vert="toon.vert";    shader_frag = "toon.frag";
    //shader_vert="vertexshader.txt";    shader_frag = "fragmentshader.txt";
    //InitializeProgram();
    //initShader_ter();
    restoreStateFromFile();

    glEnable (GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glEnable(GL_LIGHTING);
    glEnable(GL_NORMALIZE);

    glCullFace(GL_BACK);
    glEnable(GL_CULL_FACE);

    glEnable(GL_TEXTURE_2D);

    glShadeModel(GL_SMOOTH);
    glEnable(GL_COLOR_MATERIAL);

    glPixelStorei(GL_UNPACK_ALIGNMENT, 4);      // 4-byte pixel alignment

    // pretty rendering
    // fast rendering
    glEnable(GL_LINE_SMOOTH);
    glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
    glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

    light.setLight();
    mat.setMaterial();

    mySky.Set( 0,0,0, 300000.0f );
    mySky.LoadTextures(":sky");

    emit updateTasklabel(QString::number(curTerr+1)+"/"+QString::number(terrains.size()));

    initShader_phong();
    QVector4D ltmp(light.position[0],light.position[1],light.position[2],light.position[3]);
    ltmp.normalize();
    GLfloat lpos[4] = {ltmp.x(),ltmp.y(),ltmp.z(),ltmp.w()};
    glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 1, lpos);

    //QVector<QString> tlist;
    //tlist.push_back("CD.ter");
    //tlist.push_back("terr_gcut.ter");
//    /addTerrain("CD.ter");
    //addTerrain("terr_gcut.ter");
    help();
    //DrawInit();
    //qWarning("start drawing");

}
Esempio n. 2
0
 vector<int> searchRange(vector<int>& nums, int target) {
     vector<int> res{-1, -1};
     if (nums.empty() || nums[0] > target || nums[nums.size()-1] < target) return res;
     
     int l = 0, r = nums.size() - 1, mid = 0;
     int start = -1, end = -1;
     while (l < r)
     {
         mid = (l + r) / 2 + 1;
         if (nums[mid] == target)
         {
             vector<int> ltmp(nums.begin() + l, nums.begin() + mid);
             vector<int> rtmp(nums.begin()+mid+1, nums.begin()+r+1);
             auto lvec = searchRange(ltmp, target), rvec = searchRange(rtmp, target);
             if (lvec != res) start = lvec[0] + l;
             else start = mid;
             if (rvec != res) end = rvec[1] + mid + 1;
             else end = mid;
             break;
         }
         else if (nums[mid] < target) l = mid + 1;
         else r = mid - 1; 
     }
     if (start == -1 && end == -1 && nums[l] == target && l == r) start = end = l;
     res[0] = start;
     res[1] = end;
     return res;
 }
Esempio n. 3
0
void Viewer::draw()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glClearColor(backgroundCol.x(), backgroundCol.y(), backgroundCol.z(), 1.0f);

    if (mySky.wantSky())
         mySky.Render( );

    glEnable(GL_LIGHTING);

    if (applyGLSL)
        {
            glEnable(GL_VERTEX_PROGRAM_ARB);
            glEnable(GL_FRAGMENT_PROGRAM_ARB);
            light.position[3] = 1;
            light.setLight();
        }
    else{
        light.position[3] = 0;
        light.setLight();
    }

    QVector4D ltmp(light.position[0],light.position[1],light.position[2],light.position[3]);
    ltmp.normalize();
    GLfloat lpos[4] = {ltmp.x(),ltmp.y(),ltmp.z(),ltmp.w()};
    glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 1, lpos);

    // Draws a terrain
    if (curTerr>=0 && curTerr<terrains.size()){

        Terrain * terrain =  terrains[curTerr];
        if (applyTexture)   glBindTexture( GL_TEXTURE_2D, terrain->texid );
        else glBindTexture( GL_TEXTURE_2D, 0);
        terrain->Draw();

        //glLineWidth(10.0);
        //glPointSize(10.0);

        //glColor3f(1.0f,0.0f,0.0f);
        for (int i=0; i<terrain->artifacts.size(); i++){
            glColor3f(terrain->severity[i]/2.2f, 0.0f, 0.0f);
                drawFlag(terrain->artifacts[i]);
        }
    }

    glDisable(GL_VERTEX_PROGRAM_ARB);
    glDisable(GL_FRAGMENT_PROGRAM_ARB);

    glDisable(GL_LIGHTING);

    //glLineWidth(1.0);
    //glPointSize(1.0);



}