⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draw_funcs.h

📁 A Library of Efficient Data Types and Algorithms,封装了常用的ADT及其相关算法的软件包
💻 H
📖 第 1 页 / 共 2 页
字号:
				 zpos2 = box_zmax;
		 }
		 
		 glEnd();		 	 	
}


void draw_box(d3_gl_window* d3_gl_win, gl_window* gl_win)
{
  if(texturing_box){
     glEnable(GL_TEXTURE_2D);      

		draw_front_back(FRONT  , true);   
		draw_front_back(BACK   , false);   
  
		draw_left_right(LEFT   , true);   
		draw_left_right(RIGHT  , false);        

		draw_bottom_top(TOP    , true);  	  
		draw_bottom_top(BOTTOM , false);
	
	glDisable(GL_TEXTURE_2D);	
  }

  if(box_filling){	 
	 box_fill_color();
	 glBegin(GL_QUADS);

	    // left
		glVertex3f(box_xmin,box_ymin,box_zmin);
		glVertex3f(box_xmin,box_ymin,box_zmax);
		glVertex3f(box_xmin,box_ymax,box_zmax);
		glVertex3f(box_xmin,box_ymax,box_zmin);		

		// right
		glVertex3f(box_xmax,box_ymin,box_zmin);
		glVertex3f(box_xmax,box_ymin,box_zmax);
		glVertex3f(box_xmax,box_ymax,box_zmax);
		glVertex3f(box_xmax,box_ymax,box_zmin);

		// bottom
		glVertex3f(box_xmin,box_ymin,box_zmin);
		glVertex3f(box_xmin,box_ymin,box_zmax);
		glVertex3f(box_xmax,box_ymin,box_zmax);
		glVertex3f(box_xmax,box_ymin,box_zmin);

		// top
		glVertex3f(box_xmin,box_ymax,box_zmin);
		glVertex3f(box_xmin,box_ymax,box_zmax);
		glVertex3f(box_xmax,box_ymax,box_zmax);
		glVertex3f(box_xmax,box_ymax,box_zmin);

		// front
		glVertex3f(box_xmin,box_ymin,box_zmax);
		glVertex3f(box_xmin,box_ymax,box_zmax);
		glVertex3f(box_xmax,box_ymax,box_zmax);
		glVertex3f(box_xmax,box_ymin,box_zmax);

		// back
		glVertex3f(box_xmin,box_ymin,box_zmin);
		glVertex3f(box_xmin,box_ymax,box_zmin);
		glVertex3f(box_xmax,box_ymax,box_zmin);
		glVertex3f(box_xmax,box_ymin,box_zmin);

	 glEnd();
  }	

  if(box_inlines){ 		
		box_line_color();
	    glLineWidth(box_line_width);
		
		glBegin(GL_LINES);
		
		//---------------------------------------
		
		double params[7];		
		params[0] = 0.0;		
		params[1] = box_zmin;
		params[2] = box_zmax;
		params[3] = d3gl_win->get_z_grid_dist();
		params[4] = box_ymin;
		params[5] = box_xmin;
		params[6] = box_xmax;		
		draw_x_parallels(params,4,0);

		params[0] = 0.0;
		params[4] = box_ymax;
		draw_x_parallels(params,4,0);				   		
		
		params[0] = 0.0;		
		params[1] = box_ymin;
		params[2] = box_ymax;
		params[3] = d3gl_win->get_y_grid_dist();
		params[4] = box_zmin;				
		draw_x_parallels(params,0,4);

		params[0] = 0.0;
		params[4] = box_zmax;		
		draw_x_parallels(params,0,4);		
		
		//----------------------------------------		
		params[0] = 0.0;		
		params[1] = box_xmin;
		params[2] = box_xmax;
		params[3] = d3gl_win->get_x_grid_dist();
		params[4] = box_zmin;
		params[5] = box_ymin;
		params[6] = box_ymax;		
		draw_y_parallels(params,4,0);

		params[0] = 0.0;	
		params[4] = box_zmax;
		draw_y_parallels(params,4,0);
		
		params[0] = 0.0;		
		params[1] = box_zmin;
		params[2] = box_zmax;
		params[3] = d3gl_win->get_z_grid_dist();
		params[4] = box_xmin;
		params[5] = box_ymin;
		params[6] = box_ymax;		
		draw_y_parallels(params,0,4);

		params[0] = 0.0;	
		params[4] = box_xmax;
		draw_y_parallels(params,0,4);		
		//----------------------------------------
		
		params[0] = 0.0;		
		params[1] = box_xmin;
		params[2] = box_xmax;
		params[3] = d3gl_win->get_x_grid_dist();	
		params[4] = box_ymin;
		params[5] = box_zmin;
	 	params[6] = box_zmax;		  
		draw_z_parallels(params,4,0);
		
		params[0] = 0.0;
		params[4] = box_ymax;
		draw_z_parallels(params,4,0);
		
		
		params[0] = 0.0;		
		params[1] = box_ymin;
		params[2] = box_ymax;
		params[3] = d3gl_win->get_y_grid_dist();	
		params[4] = box_xmin;
		params[5] = box_zmin;
	 	params[6] = box_zmax;		  
		draw_z_parallels(params,0,4);

		params[0] = 0.0;
		params[4] = box_xmax;
		draw_z_parallels(params,0,4);
		
		glEnd();
	}
  
  if(box_outlines){ 	    
		box_line_color();
	    glLineWidth(box_line_width);	    		  
	  
		glBegin(GL_LINE_LOOP); 
			glVertex3f(box_xmin,box_ymin,box_zmin);
			glVertex3f(box_xmin,box_ymin,box_zmax);
			glVertex3f(box_xmin,box_ymax,box_zmax);
			glVertex3f(box_xmin,box_ymax,box_zmin);
		glEnd();

		glBegin(GL_LINE_LOOP); 
			glVertex3f(box_xmax,box_ymin,box_zmin);
			glVertex3f(box_xmax,box_ymin,box_zmax);
			glVertex3f(box_xmax,box_ymax,box_zmax);
			glVertex3f(box_xmax,box_ymax,box_zmin);
		glEnd();

		glBegin(GL_LINES);     
			glVertex3f(box_xmin,box_ymax,box_zmin); glVertex3f(box_xmax,box_ymax,box_zmin);
			glVertex3f(box_xmin,box_ymax,box_zmax); glVertex3f(box_xmax,box_ymax,box_zmax);

			glVertex3f(box_xmin,box_ymin,box_zmin); glVertex3f(box_xmax,box_ymin,box_zmin);
			glVertex3f(box_xmin,box_ymin,box_zmax); glVertex3f(box_xmax,box_ymin,box_zmax);
		glEnd();			        
  }    
}

void texture_plane(const unsigned int& tex_num)
{	
	float x_step = tex_width[tex_num];
	float z_step = tex_height[tex_num];
		 
	if(x_step >   plane_xmax ) x_step =   plane_xmax;
	if(z_step > - plane_zmin ) z_step = - plane_zmin;

	float zpos  = 0.0f;
	float zpos2 = - z_step;
	float xpos  = 0.0f;
	float xpos2 = x_step;	
	float y = plane_height;		
	
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, tex_name[tex_num]);

	glBegin(GL_QUADS);	

	// right-top	
	while(zpos > plane_zmin){		 
		while(xpos2 < plane_xmax) {		 
			glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos  ,y, zpos );
			glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos  ,y, zpos2);					 
			glTexCoord2f(1.0f, 1.0f); glVertex3f(xpos2 ,y, zpos2);
			glTexCoord2f(1.0f, 0.0f); glVertex3f(xpos2 ,y, zpos );								 
					 					 
			xpos  += x_step;
			xpos2 += x_step;
		}
		xpos2 = plane_xmax;		
		glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos  ,y, zpos );
		glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos  ,y, zpos2);				 
		glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos2);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos );
		
		xpos  = 0.0f;
	    xpos2 = x_step;

		zpos  -= z_step;
		zpos2 -= z_step;

		if(zpos2 < plane_zmin)
			 zpos2 = plane_zmin;
	}

	zpos  = 0.0f;
	zpos2 = z_step;

	// right-down
	while(zpos < plane_zmax){		 
		while(xpos2 < plane_xmax) {		 
			glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos  ,y, zpos );
			glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos  ,y, zpos2);					 
			glTexCoord2f(1.0f, 0.0f); glVertex3f(xpos2 ,y, zpos2);
			glTexCoord2f(1.0f, 1.0f); glVertex3f(xpos2 ,y, zpos );								 
					 					 
			xpos  += x_step;
			xpos2 += x_step;
		}
		xpos2 = plane_xmax;		
		glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos  ,y, zpos );
		glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos  ,y, zpos2);				 
		glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos2);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos );
		
		xpos  = 0.0f;
	    xpos2 = x_step;

		zpos  += z_step;
		zpos2 += z_step;

		if(zpos2 > plane_zmax)
			 zpos2 = plane_zmax;
	}

	zpos  = 0.0f;
	zpos2 = - z_step;
	xpos  = 0.0f;
	xpos2 = - x_step;

	// left-top	
	while(zpos > plane_zmin){		 
		while(xpos2 > plane_xmin) {		 
			glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos );
			glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos2);					 
			glTexCoord2f(1.0f, 1.0f); glVertex3f(xpos  ,y, zpos2);
			glTexCoord2f(1.0f, 0.0f); glVertex3f(xpos  ,y, zpos );								 
					 					 
			xpos  -= x_step;
			xpos2 -= x_step;
		}
		xpos2 = plane_xmin;		
		glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos );
		glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos2);				 
		glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos  ,y, zpos2);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos  ,y, zpos );
		
		xpos  = 0.0f;
	    xpos2 = - x_step;

		zpos  -= z_step;
		zpos2 -= z_step;

		if(zpos2 < plane_zmin)
			 zpos2 = plane_zmin;
	}

	zpos  = 0.0f;
	zpos2 = z_step;

	// left-down
	while(zpos < plane_zmax){		 
		while(xpos2 > plane_xmin) {		 
			glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos );
			glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos2);					 
			glTexCoord2f(1.0f, 0.0f); glVertex3f(xpos  ,y, zpos2);
			glTexCoord2f(1.0f, 1.0f); glVertex3f(xpos  ,y, zpos );								 
					 					 
			xpos  -= x_step;
			xpos2 -= x_step;
		}
		xpos2 = plane_xmin;		
		glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos2 ,y, zpos );
		glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos2 ,y, zpos2);				 
		glTexCoord2f(0.0f, 0.0f); glVertex3f(xpos  ,y, zpos2);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(xpos  ,y, zpos );
		
		xpos  = 0.0f;
	    xpos2 = - x_step;

		zpos  += z_step;
		zpos2 += z_step;

		if(zpos2 > plane_zmax)
			 zpos2 = plane_zmax;
	}
	
	glEnd();

	glDisable(GL_TEXTURE_2D);
	
}

void draw_plane(d3_gl_window* d3_gl_win, gl_window* gl_win)
{
	if(texturing_plane && T[6] != NULL){
		texture_plane(6);		
	}

	if(plane_filling){			    
		plane_fill_color();

		glBegin(GL_POLYGON);
			glVertex3d(plane_xmin,plane_height,plane_zmin);
			glVertex3d(plane_xmax,plane_height,plane_zmin);
			glVertex3d(plane_xmax,plane_height,plane_zmax);
			glVertex3d(plane_xmin,plane_height,plane_zmax);			
		glEnd();
	}

	if(plane_x_parallels){ 		  
		  plane_line_color();
	      glLineWidth(plane_line_width);		        
		
		  double params[7];
		  params[0] = 0.0;		
		  params[1] = plane_zmin;
		  params[2] = plane_zmax;
		  params[3] = d3gl_win->get_z_grid_dist();
		  params[4] = plane_height;
		  params[5] = plane_xmin;
		  params[6] = plane_xmax;
		
		  glBegin(GL_LINES);
		  draw_x_parallels(params,4,0);
		  glEnd();
	}

	if(plane_z_parallels){			  
		  plane_line_color();
	      glLineWidth(plane_line_width);		   
		  
		  double params[7];
		  params[0] = 0.0;		
		  params[1] = plane_xmin;
		  params[2] = plane_xmax;
		  params[3] = d3gl_win->get_x_grid_dist();	
		  params[4] = plane_height;
		  params[5] = plane_zmin;
	 	  params[6] = plane_zmax;
		  
		  glBegin(GL_LINES);
		  draw_z_parallels(params,4,0);
		  glEnd();
	}

	if(plane_outlines){		
		plane_line_color();
	    glLineWidth(plane_line_width);

		glBegin(GL_LINE_LOOP);
			glVertex3d(plane_xmin,plane_height,plane_zmin);
			glVertex3d(plane_xmax,plane_height,plane_zmin);
			glVertex3d(plane_xmax,plane_height,plane_zmax);
			glVertex3d(plane_xmin,plane_height,plane_zmax);			
		glEnd();		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -