Subversion Repositories gelsvn

Rev

Rev 657 | Rev 663 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 657 Rev 662
Line 439... Line 439...
439
    "		gl_Position =  ftransform();\n"
439
    "		gl_Position =  ftransform();\n"
440
    "		_normal = normalize(gl_NormalMatrix * gl_Normal);\n"
440
    "		_normal = normalize(gl_NormalMatrix * gl_Normal);\n"
441
    "		s=scalar;\n"
441
    "		s=scalar;\n"
442
    "	}\n";
442
    "	}\n";
443
    
443
    
444
    const string ScalarFieldRenderer::fss = 	
444
    const string ScalarFieldRenderer::fss =
445
    "	varying vec3 _normal;\n"
445
    "	varying vec3 _normal;\n"
446
    "	varying float s;\n"
446
    "	varying float s;\n"
447
    "	uniform float scalar_max;\n"
447
    "	uniform float scalar_max;\n"
448
    "   uniform float gamma;\n"
448
    "   uniform float gamma;\n"
449
    "	const vec3 light_dir = vec3(0,0,1);\n"
449
    "	const vec3 light_dir = vec3(0,0,1);\n"
Line 452... Line 452...
452
    "	{\n"
452
    "	{\n"
453
    "       vec3 normal = normalize(_normal);\n"
453
    "       vec3 normal = normalize(_normal);\n"
454
    "		float dot_ln = max(0.0,dot(light_dir, normal));\n"
454
    "		float dot_ln = max(0.0,dot(light_dir, normal));\n"
455
    "		\n"
455
    "		\n"
456
    "		float s_norm = s/scalar_max;\n"
456
    "		float s_norm = s/scalar_max;\n"
457
    "		float stripe_signal = 10.0 * s_norm;\n"
457
    "		float stripe_signal = 400.0 * s_norm;\n"
458
    "		vec4 stripe_col = abs(stripe_signal) < 3.14 ? vec4(-1.0,0,0,0) : vec4(.9,.9,.9,0);\n"
458
    "		vec4 stripe_col = vec4(.9,.9,.9,0);\n"
459
    "		\n"
459
    "		\n"
460
    "		gl_FragColor = s_norm * vec4(-1,0,1,0);\n"
460
    "		gl_FragColor = max(vec4(0), s_norm * vec4(-1,0,1,0));\n"
461
    "       gl_FragColor *= dot_ln;\n"
461
    "       gl_FragColor *= dot_ln;\n"
462
    "       gl_FragColor.r = pow(gl_FragColor.r, 1.0/gamma);\n"
462
    "       gl_FragColor.r = pow(gl_FragColor.r, 1.0/gamma);\n"
463
    "       gl_FragColor.g = pow(gl_FragColor.g, 1.0/gamma);\n"
463
    "       gl_FragColor.g = pow(gl_FragColor.g, 1.0/gamma);\n"
464
    "       gl_FragColor.b = pow(gl_FragColor.b, 1.0/gamma);\n"
464
    "       gl_FragColor.b = pow(gl_FragColor.b, 1.0/gamma);\n"
465
    "		//gl_FragColor += stripe_col * smoothstep(0.8,1.0,cos(stripe_signal));\n"
465
    "		gl_FragColor += stripe_col * pow(cos(stripe_signal),15.0);\n"
466
    "	}\n";
466
    "	}\n";
467
    
467
    
468
    void ScalarFieldRenderer::compile_display_list(const HMesh::Manifold& m, bool smooth,
468
    void ScalarFieldRenderer::compile_display_list(const HMesh::Manifold& m, bool smooth,
469
                                                   HMesh::VertexAttributeVector<double>& field, double max_val, float gamma)
469
                                                   HMesh::VertexAttributeVector<double>& field, double max_val, float gamma)
470
    {
470
    {
Line 478... Line 478...
478
        
478
        
479
        //    static float& gamma = CreateCVar("display.scalar_field_renderer.gamma",2.2f);
479
        //    static float& gamma = CreateCVar("display.scalar_field_renderer.gamma",2.2f);
480
        glUniform1fARB(glGetUniformLocationARB(prog, "gamma"), gamma);
480
        glUniform1fARB(glGetUniformLocationARB(prog, "gamma"), gamma);
481
        glNewList(display_list,GL_COMPILE);
481
        glNewList(display_list,GL_COMPILE);
482
        
482
        
483
        for(FaceIDIterator f = m.faces_begin(); f != m.faces_end(); ++f){      
483
        for(FaceIDIterator f = m.faces_begin(); f != m.faces_end(); ++f){
484
            if(!smooth) 
484
            if(!smooth)
485
                glNormal3dv(normal(m, *f).get());
485
                glNormal3dv(normal(m, *f).get());
486
            if(no_edges(m, *f)== 3) 
486
            if(no_edges(m, *f)== 3)
487
                glBegin(GL_TRIANGLES);
487
                glBegin(GL_TRIANGLES);
488
            else 
488
            else
489
                glBegin(GL_POLYGON);
489
                glBegin(GL_POLYGON);
490
            
490
            
491
            
491
            
492
            for(Walker w = m.walker(*f); !w.full_circle(); w = w.circulate_face_ccw()){
492
            for(Walker w = m.walker(*f); !w.full_circle(); w = w.circulate_face_ccw()){
493
                Vec3d n(normal(m, w.vertex()));
493
                Vec3d n(normal(m, w.vertex()));
494
                if(smooth) 
494
                if(smooth)
495
                    glNormal3dv(n.get());
495
                    glNormal3dv(n.get());
496
                glVertexAttrib1d(scalar_attrib, field[w.vertex()]);
496
                glVertexAttrib1d(scalar_attrib, field[w.vertex()]);
497
                glVertex3dv(m.pos(w.vertex()).get());
497
                glVertex3dv(m.pos(w.vertex()).get());
498
            }
498
            }
499
            glEnd();
499
            glEnd();
500
        }
500
        }
-
 
501
        glEndList();
-
 
502
        glUseProgram(old_prog);
-
 
503
        
-
 
504
    }
-
 
505
    
-
 
506
    HMesh::VertexAttributeVector<CGLA::Vec2f> CheckerBoardRenderer::param;
-
 
507
 
-
 
508
    const string CheckerBoardRenderer::vss =
-
 
509
    "	attribute vec2 param;\n"
-
 
510
    "	varying vec3 _normal;\n"
-
 
511
    "	varying vec2 uv;\n"
-
 
512
    "	\n"
-
 
513
    "	void main(void)\n"
-
 
514
    "	{\n"
-
 
515
    "		gl_Position =  ftransform();\n"
-
 
516
    "		_normal = normalize(gl_NormalMatrix * gl_Normal);\n"
-
 
517
    "		uv=param;\n"
-
 
518
    "	}\n";
-
 
519
    
-
 
520
    const string CheckerBoardRenderer::fss =
-
 
521
    "	varying vec3 _normal;\n"
-
 
522
    "	varying vec2 uv;\n"
-
 
523
    "   const float pi = 3.14159265359;\n"
-
 
524
    "	const vec3 light_dir = vec3(0,0,1);\n"
-
 
525
    "	\n"
-
 
526
    "	void main()\n"
-
 
527
    "	{\n"
-
 
528
    "       vec3 normal = normalize(_normal);\n"
-
 
529
    "		float dot_ln = max(0.0,dot(light_dir, normal));\n"
-
 
530
    "		vec2 rt = uv;//vec2(length(uv),atan(uv.y, uv.x));\n"
-
 
531
    "		float stripe_signal = smoothstep(-0.001,0.001,sin(2.0*pi*rt.x)*sin(10.0*rt.y));\n"
-
 
532
    "		\n"
-
 
533
    "		gl_FragColor = dot_ln * vec4(0.35,0.25,0.5,0);\n"
-
 
534
   "		gl_FragColor.rgb += 0.7*stripe_signal;\n"
-
 
535
    "	}\n";
-
 
536
    
-
 
537
    void CheckerBoardRenderer::compile_display_list(const HMesh::Manifold& m, bool smooth)
-
 
538
    {
-
 
539
        
-
 
540
        GLint old_prog;
-
 
541
        glGetIntegerv(GL_CURRENT_PROGRAM, &old_prog);
-
 
542
        glUseProgram(prog);
-
 
543
        
-
 
544
        GLuint param_attrib = glGetAttribLocation(prog, "param");
-
 
545
        glNewList(display_list,GL_COMPILE);
-
 
546
 
-
 
547
        for(FaceIDIterator f = m.faces_begin(); f != m.faces_end(); ++f){
-
 
548
            if(!smooth)
-
 
549
                glNormal3dv(normal(m, *f).get());
-
 
550
            if(no_edges(m, *f)== 3)
-
 
551
                glBegin(GL_TRIANGLES);
-
 
552
            else
-
 
553
                glBegin(GL_POLYGON);
-
 
554
            
-
 
555
            
-
 
556
            for(Walker w = m.walker(*f); !w.full_circle(); w = w.circulate_face_ccw()){
-
 
557
                Vec3d n(normal(m, w.vertex()));
-
 
558
                if(smooth)
-
 
559
                    glNormal3dv(n.get());
-
 
560
                glVertexAttrib2fv(param_attrib, param[w.vertex()].get());
-
 
561
                glVertex3dv(m.pos(w.vertex()).get());
-
 
562
            }
-
 
563
            glEnd();
-
 
564
        }
501
        glEndList();	
565
        glEndList();
502
        glUseProgram(old_prog);
566
        glUseProgram(old_prog);
503
        
567
        
504
    }
568
    }
505
 
569
 
506
 
570