mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Implemented a level of detail on the variable layer height editing tool.
This commit is contained in:
		
							parent
							
								
									440a5eb2a0
								
							
						
					
					
						commit
						8cfdc28f2b
					
				
					 1 changed files with 17 additions and 7 deletions
				
			
		|  | @ -208,8 +208,10 @@ sub layer_editing_enabled { | |||
|                     } else { | ||||
|                         ($self->{layer_preview_z_texture_id}) = glGenTextures_p(1); | ||||
|                         glBindTexture(GL_TEXTURE_2D, $self->{layer_preview_z_texture_id}); | ||||
|                         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); | ||||
|                         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); | ||||
|                         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | ||||
|                         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); | ||||
|                         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); | ||||
|                         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1); | ||||
|                         glBindTexture(GL_TEXTURE_2D, 0); | ||||
|                     } | ||||
|  | @ -1687,15 +1689,23 @@ void main() | |||
|     float z_texture_row = floor(object_z_row); | ||||
|     // Normalized coordinate from 0. to 1. | ||||
|     float z_texture_col = object_z_row - z_texture_row; | ||||
| //    float z_blend = 0.5 + 0.5 * cos(min(M_PI, abs(M_PI * (object_z - z_cursor) / 3.))); | ||||
| //    float z_blend = 0.5 * cos(min(M_PI, abs(M_PI * (object_z - z_cursor)))) + 0.5; | ||||
|     float z_blend = 0.25 * cos(min(M_PI, abs(M_PI * (object_z - z_cursor) * 1.8 / z_cursor_band_width))) + 0.25; | ||||
|     // Scale z_texture_row to normalized coordinates. | ||||
|     // Sample the Z texture. | ||||
|     // Calculate level of detail from the object Z coordinate. | ||||
|     // This makes the slowly sloping surfaces to be show with high detail (with stripes), | ||||
|     // and the vertical surfaces to be shown with low detail (no stripes) | ||||
|     float z_in_cells    = object_z_row * 190.; | ||||
|     // Gradient of Z projected on the screen. | ||||
|     float dx_vtc        = dFdx(z_in_cells); | ||||
|     float dy_vtc        = dFdy(z_in_cells); | ||||
|     float lod           = clamp(0.5 * log2(max(dx_vtc*dx_vtc, dy_vtc*dy_vtc)), 0., 1.); | ||||
|     // Sample the Z texture. Texture coordinates are normalized to <0, 1>. | ||||
|     vec4 color       = | ||||
|         (1. - lod) * texture2DLod(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row + 0.5    )), 0.) + | ||||
|         lod        * texture2DLod(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row * 2. + 1.)), 1.); | ||||
|     // Mix the final color. | ||||
|     gl_FragColor =  | ||||
|         vec4(intensity_specular, intensity_specular, intensity_specular, 1.) +  | ||||
| //        intensity_tainted * texture2D(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row + 0.5)), -2.5); | ||||
|         (1. - z_blend) * intensity_tainted * texture2D(z_texture, vec2(z_texture_col, z_texture_row_to_normalized * (z_texture_row + 0.5)), -200.) +  | ||||
|         (1. - z_blend) * intensity_tainted * color +  | ||||
|         z_blend * vec4(1., 1., 0., 0.); | ||||
|     // and reset the transparency. | ||||
|     gl_FragColor.a = 1.; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bubnikv
						bubnikv