view.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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,geometry->lX,0,1);
  17. glMatrixMode(GL_MODELVIEW);
  18. glLoadIdentity();
  19. }
  20. void
  21. QtView::paintGL(){
  22. cout<<"PaintGL"<<endl;
  23. glBegin(GL_TRIANGLES);
  24. for(size_t i=0;i<geometry->nX-1;++i){
  25. size_t max_left=geometry->nZ[i];
  26. size_t max_right=geometry->nZ[i+1];
  27. size_t left=0;
  28. size_t right=0;
  29. while(left<max_left-1 and right<max_right-1){
  30. if(geometry->Z[i][left+1]<geometry->Z[i+1][right+1]){
  31. drawTriangle(i,left,i+1,right,i,left+1);
  32. ++left;
  33. }
  34. else{
  35. drawTriangle(i,left,i+1,right,i+1,right+1);
  36. ++right;
  37. }
  38. }
  39. if(left==max_left-1){
  40. while(right<max_right-1){
  41. drawTriangle(i,left,i+1,right,i+1,right+1);
  42. ++right;
  43. }
  44. }
  45. if(right==max_right-1){
  46. while(left<max_left-1){
  47. drawTriangle(i,left,i+1,right,i,left+1);
  48. ++left;
  49. }
  50. }
  51. }
  52. glEnd();
  53. }
  54. void
  55. QtView::drawTriangle(size_t ix1,size_t iz1,size_t ix2,size_t iz2,size_t ix3,size_t iz3){
  56. double dX=geometry->dX;
  57. double x1=ix1*dX;
  58. double x2=ix2*dX;
  59. double x3=ix3*dX;
  60. double y1=geometry->Z[ix1][iz1];
  61. double y2=geometry->Z[ix2][iz2];
  62. double y3=geometry->Z[ix3][iz3];
  63. glColor3f(1,0,0);
  64. glVertex2f(x1,y1);
  65. glVertex2f(x2,y2);
  66. glVertex2f(x3,y3);
  67. }