123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #include "view.hpp"
- void
- QtView::initializeGL(){
- glClearColor(1,1,1,1);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHTING);
- glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
- glEnable(GL_COLOR_MATERIAL);
- }
- void
- QtView::resizeGL(int w,int h){
- glViewport(0,0,w,h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(0,1,0,1);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- void
- QtView::paintGL(){
- Geometry& G=data->geometry;
- glBegin(GL_TRIANGLES);
- for(size_t i=0;i<G.nX-1;++i){
- size_t max_left=G.nZ[i];
- size_t max_right=G.nZ[i+1];
- size_t left=0;
- size_t right=0;
- while(left<max_left-1 and right<max_right-1){
- if(G.Z[i][left+1]<G.Z[i+1][right+1]){
- drawTriangle(i,left,i+1,right,i,left+1);
- ++left;
- }
- else{
- drawTriangle(i,left,i+1,right,i+1,right+1);
- ++right;
- }
- }
- if(left==max_left-1){
- while(right<max_right-1){
- drawTriangle(i,left,i+1,right,i+1,right+1);
- ++right;
- }
- }
- if(right==max_right-1){
- while(left<max_left-1){
- drawTriangle(i,left,i+1,right,i,left+1);
- ++left;
- }
- }
- }
- glEnd();
- drawOverland();
- }
- void
- QtView::setColor(size_t ix,size_t iz){
- double p=getP(ix,iz);
- double s=Physics::s(p);
- double r=(1-s);
- double g=0.7*(1-s);
- double b=0.8*s+0.4*(1-s);
- glColor3f(r,g,b);
- }
- void
- QtView::drawTriangle(size_t ix1,size_t iz1,size_t ix2,size_t iz2,size_t ix3,size_t iz3){
- Geometry& G=data->geometry;
- double factor_inv=1/data->factor;
- double dX=1/double(G.nX-1);
- double x1=ix1*dX;
- double x2=ix2*dX;
- double x3=ix3*dX;
- double y1=G.Z[ix1][iz1]*factor_inv;
- double y2=G.Z[ix2][iz2]*factor_inv;
- double y3=G.Z[ix3][iz3]*factor_inv;
- setColor(ix1,iz1);
- glVertex3f(x1,y1,0);
- setColor(ix2,iz2);
- glVertex3f(x2,y2,0);
- setColor(ix3,iz3);
- glVertex3f(x3,y3,0);
- }
- void
- QtView::drawOverland(){
- Geometry& G=data->geometry;
- double dX=1/double(G.nX-1);
- double factor_inv=1/data->factor;
- glColor3f(0.5,0.5,1);
- glBegin(GL_QUADS);
- for(size_t i=0;i<G.nX-1;++i){
- glVertex3f(i*dX,G.hsoil[i]*factor_inv,0);
- glVertex3f(i*dX,data->initial_state->hov[i]*factor_inv,0);
- glVertex3f(i*dX+dX,data->initial_state->hov[i+1]*factor_inv,0);
- glVertex3f(i*dX+dX,G.hsoil[i+1]*factor_inv,0);
- }
- glEnd();
- /* glColor3f(0.2,0.2,1);
- glLineWidth(2);
- glBegin(GL_LINE_STRIP);
- for(size_t i=0;i<G.nX;++i){
- glVertex2f(i*dX,data->initial_state.hov[i]*factor_inv);
- }
- glEnd();*/
- }
|