view.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "view.hpp"
  2. void
  3. QtView::initializeGL(){
  4. glClearColor(1,1,1,1);
  5. glEnable(GL_DEPTH_TEST);
  6. glEnable(GL_LIGHT0);
  7. glEnable(GL_LIGHTING);
  8. glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
  9. glEnable(GL_COLOR_MATERIAL);
  10. }
  11. void
  12. QtView::resizeGL(int w,int h){
  13. glViewport(0,0,w,h);
  14. glMatrixMode(GL_PROJECTION);
  15. glLoadIdentity();
  16. gluOrtho2D(0,1,0,1);
  17. glMatrixMode(GL_MODELVIEW);
  18. glLoadIdentity();
  19. }
  20. void
  21. QtView::paintGL(){
  22. glBegin(GL_TRIANGLES);
  23. for(size_t i=0;i<geometry->nX-1;++i){
  24. size_t max_left=geometry->nZ[i];
  25. size_t max_right=geometry->nZ[i+1];
  26. size_t left=0;
  27. size_t right=0;
  28. while(left<max_left-1 and right<max_right-1){
  29. if(geometry->Z[i][left+1]<geometry->Z[i+1][right+1]){
  30. drawTriangle(i,left,i+1,right,i,left+1);
  31. ++left;
  32. }
  33. else{
  34. drawTriangle(i,left,i+1,right,i+1,right+1);
  35. ++right;
  36. }
  37. }
  38. if(left==max_left-1){
  39. while(right<max_right-1){
  40. drawTriangle(i,left,i+1,right,i+1,right+1);
  41. ++right;
  42. }
  43. }
  44. if(right==max_right-1){
  45. while(left<max_left-1){
  46. drawTriangle(i,left,i+1,right,i,left+1);
  47. ++left;
  48. }
  49. }
  50. }
  51. glEnd();
  52. }
  53. void
  54. QtView::setColor(size_t ix,size_t iz){
  55. double p=getP(ix,iz);
  56. double s=Physics::s(p);
  57. double r=(1-s);
  58. double g=0.7*(1-s);
  59. double b=0.8*s+0.4*(1-s);
  60. glColor3f(r,g,b);
  61. }
  62. void
  63. QtView::drawTriangle(size_t ix1,size_t iz1,size_t ix2,size_t iz2,size_t ix3,size_t iz3){
  64. double dX=1/double(geometry->nX-1);
  65. double x1=ix1*dX;
  66. double x2=ix2*dX;
  67. double x3=ix3*dX;
  68. double y1=geometry->Z[ix1][iz1]/geometry->factor;
  69. double y2=geometry->Z[ix2][iz2]/geometry->factor;
  70. double y3=geometry->Z[ix3][iz3]/geometry->factor;
  71. setColor(ix1,iz1);
  72. glVertex3f(x1,y1,0);
  73. setColor(ix2,iz2);
  74. glVertex3f(x2,y2,0);
  75. setColor(ix3,iz3);
  76. glVertex3f(x3,y3,0);
  77. }