diff --git a/docs/examples/en/geometries/SDFGeometryGenerator.html b/docs/examples/en/geometries/SDFGeometryGenerator.html deleted file mode 100644 index a7c256c10e3b3a..00000000000000 --- a/docs/examples/en/geometries/SDFGeometryGenerator.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - -

[name]

- -

- [name] generates instances of [page:BufferGeometry] from a Signed Distance Function
- Uses Mikola Lysenko's Isosurface -

- -

Import

- -

- [name] is an add-on, and must be imported explicitly. - See [link:#manual/introduction/Installation Installation / Addons]. -

- - - import { SDFGeometryGenerator } from 'three/addons/geometries/SDFGeometryGenerator.js'; - - -

Code Example

- - - const generator = new SDFGeometryGenerator( renderer ); - const sdf = 'float dist( vec3 p ){ return length(p) - 0.5; }' // glsl - const geometry = generator.generate( 64, sdf, 1 ); // ~> THREE.BufferGeometry - - -

Examples

- -

[example:webgl_geometry_sdf geometry / sdf ]

- -

Constructor

- -

[name]( [param:WebGLRenderer renderer] )

- -

- [page:WebGLRenderer renderer] -- The renderer used to render the scene.
-

- -

Methods

- -

[method:BufferGeometry generate]( [param:Int resolution], [param:String distanceField], [param:Int bounds] )

- -

- resolution - Int [ mandatory ] Amount of 'voxels' used for triangulation. Must be power of 2.
Gets heavy after 256, most machines won't be able to process over 512. Defaults to 64. -

-

- distanceField - String [ mandatory ] String with glsl distance function. Name of function must be 'dist', with a vec3 argument. ( see code above ). Defaults to a sphere distance. -

-

- bounds - Int [ optional ] Bounds in which signed distance field will be evaluated. Defaults to 1. -

- - -

Source

- -

- [link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/geometries/SDFGeometry.js examples/jsm/geometries/SDFGeometryGenerator.js] -

- - diff --git a/docs/examples/zh/geometries/SDFGeometryGenerator.html b/docs/examples/zh/geometries/SDFGeometryGenerator.html deleted file mode 100644 index 94672f8524b595..00000000000000 --- a/docs/examples/zh/geometries/SDFGeometryGenerator.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - -

SDF几何体生成器([name])

- -

- [name] 从有符号距离函数 生成 [page:BufferGeometry] 实例。
- 使用 Mikola Lysenko 的等值面。 -

- -

导入

- -

- [name] 是一个附加组件,必须显式导入。请参阅 [link:#manual/introduction/Installation Installation / Addons]. -

- - - import { SDFGeometryGenerator } from 'three/addons/geometries/SDFGeometryGenerator.js'; - - -

代码示例

- - - const generator = new SDFGeometryGenerator( renderer ); - const sdf = 'float dist( vec3 p ){ return length(p) - 0.5; }' // glsl - const geometry = generator.generate( 64, sdf, 1 ); // ~> THREE.BufferGeometry - - -

例子

- -

[example:webgl_geometry_sdf geometry / sdf ]

- -

构造函数

- -

[name]( [param:WebGLRenderer renderer] )

- -

- [page:WebGLRenderer renderer] -- 用于渲染场景的渲染器。
-

- -

方法

- -

[method:BufferGeometry generate]( [param:Int resolution], [param:String distanceField], [param:Int bounds] )

- -

- resolution - Int [必填项] 用于三角测量的“体素”数量。必须是 2 的幂。256 之后会变得很重,大多数机器将无法处理超过 512 的数据。默认为 64。 -

-

- distanceField - String [必填项] 具有 glsl 距离函数的字符串。函数名称必须是“dist”,带有 vec3 参数。(参见上面的代码)。默认为球体距离。 -

-

- bounds - Int [可选] 将评估有符号距离字段的边界。默认为 1。 -

- - -

源代码

- -

- [link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/geometries/SDFGeometry.js examples/jsm/geometries/SDFGeometryGenerator.js] -

- - - diff --git a/docs/list.json b/docs/list.json index 554fe818694cd8..e6d9e99a782abc 100644 --- a/docs/list.json +++ b/docs/list.json @@ -346,7 +346,6 @@ "ConvexGeometry": "examples/en/geometries/ConvexGeometry", "DecalGeometry": "examples/en/geometries/DecalGeometry", "ParametricGeometry": "examples/en/geometries/ParametricGeometry", - "SDFGeometryGenerator": "examples/en/geometries/SDFGeometryGenerator", "TeapotGeometry": "examples/en/geometries/TeapotGeometry", "TextGeometry": "examples/en/geometries/TextGeometry" }, @@ -1100,8 +1099,7 @@ "DecalGeometry": "examples/zh/geometries/DecalGeometry", "ParametricGeometry": "examples/zh/geometries/ParametricGeometry", "TeapotGeometry": "examples/zh/geometries/TeapotGeometry", - "TextGeometry": "examples/zh/geometries/TextGeometry", - "SDFGeometryGenerator": "examples/zh/geometries/SDFGeometryGenerator" + "TextGeometry": "examples/zh/geometries/TextGeometry" }, "辅助对象": { diff --git a/examples/files.json b/examples/files.json index 8e16304e663f92..d289d742ba408d 100644 --- a/examples/files.json +++ b/examples/files.json @@ -34,7 +34,6 @@ "webgl_geometry_extrude_splines", "webgl_geometry_minecraft", "webgl_geometry_nurbs", - "webgl_geometry_sdf", "webgl_geometry_shapes", "webgl_geometry_spline_editor", "webgl_geometry_teapot", diff --git a/examples/jsm/geometries/SDFGeometryGenerator.js b/examples/jsm/geometries/SDFGeometryGenerator.js deleted file mode 100644 index e80c9a39ab1422..00000000000000 --- a/examples/jsm/geometries/SDFGeometryGenerator.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @author santiago / @glitch_life - * wrapper of https://www.npmjs.com/package/isosurface by https://github.com/mikolalysenko - * - * Returns BufferGeometry from SDF - */ - -import { - BufferAttribute, - BufferGeometry, - FloatType, - Mesh, - OrthographicCamera, - PlaneGeometry, - Scene, - ShaderMaterial, - Vector2, - WebGLRenderTarget -} from 'three'; - -import { surfaceNet } from './../libs/surfaceNet.js'; - -class SDFGeometryGenerator { - - constructor( renderer ) { - - this.renderer = renderer; - - } - - generate( res = 64, distFunc = 'float dist( vec3 p ){ return length(p) - 0.5; }', bounds = 1 ) { - - let w, h; - if ( res == 8 ) [ w, h ] = [ 32, 16 ]; - else if ( res == 16 ) [ w, h ] = [ 64, 64 ]; - else if ( res == 32 ) [ w, h ] = [ 256, 128 ]; - else if ( res == 64 ) [ w, h ] = [ 512, 512 ]; - else if ( res == 128 ) [ w, h ] = [ 2048, 1024 ]; - else if ( res == 256 ) [ w, h ] = [ 4096, 4096 ]; - else if ( res == 512 ) [ w, h ] = [ 16384, 8096 ]; - else if ( res == 1024 ) [ w, h ] = [ 32768, 32768 ]; - else throw new Error( 'THREE.SDFGeometryGenerator: Resolution must be in range 8 < res < 1024 and must be ^2' ); - - const maxTexSize = this.renderer.capabilities.maxTextureSize; - - if ( w > maxTexSize || h > maxTexSize ) throw new Error( 'THREE.SDFGeometryGenerator: Your device does not support this resolution ( ' + res + ' ), decrease [res] param.' ); - - const [ tilesX, tilesY ] = [ ( w / res ), ( h / res ) ]; - - const sdfCompute = ` - varying vec2 vUv; - uniform float tileNum; - uniform float bounds; - [#dist#] - void main() { gl_FragColor=vec4( ( dist( vec3( vUv, tileNum ) * 2.0 * bounds - vec3( bounds ) ) < 0.00001 ) ? 1.0 : 0.0 ); } - `; - - const sdfRT = this.computeSDF( w, h, tilesX, tilesY, bounds, sdfCompute.replace( '[#dist#]', distFunc ) ); - - const read = new Float32Array( w * h * 4 ); - this.renderer.readRenderTargetPixels( sdfRT, 0, 0, w, h, read ); - sdfRT.dispose(); - - // - - const mesh = surfaceNet( [ res, res, res ], ( x, y, z ) => { - - x = ( x + bounds ) * ( res / ( bounds * 2 ) ); - y = ( y + bounds ) * ( res / ( bounds * 2 ) ); - z = ( z + bounds ) * ( res / ( bounds * 2 ) ); - let p = ( x + ( z % tilesX ) * res ) + y * w + ( Math.floor( z / tilesX ) * res * w ); - p *= 4; - return ( read[ p + 3 ] > 0 ) ? - 0.000000001 : 1; - - }, [[ - bounds, - bounds, - bounds ], [ bounds, bounds, bounds ]] ); - - const ps = [], ids = []; - const geometry = new BufferGeometry(); - mesh.positions.forEach( p => { - - ps.push( p[ 0 ], p[ 1 ], p[ 2 ] ); - - } ); - mesh.cells.forEach( p => ids.push( p[ 0 ], p[ 1 ], p[ 2 ] ) ); - geometry.setAttribute( 'position', new BufferAttribute( new Float32Array( ps ), 3 ) ); - geometry.setIndex( ids ); - - return geometry; - - } - - computeSDF( width, height, tilesX, tilesY, bounds, shader ) { - - const rt = new WebGLRenderTarget( width, height, { type: FloatType } ); - const scn = new Scene(); - const cam = new OrthographicCamera(); - const tiles = tilesX * tilesY; - let currentTile = 0; - - Object.assign( cam, { left: width / - 2, right: width / 2, top: height / 2, bottom: height / - 2 } ).updateProjectionMatrix(); - cam.position.z = 2; - - const tileSize = width / tilesX; - const geometry = new PlaneGeometry( tileSize, tileSize ); - - while ( currentTile ++ < tiles ) { - - const c = currentTile - 1; - const [ px, py ] = [ ( tileSize ) / 2 + ( c % tilesX ) * ( tileSize ) - width / 2, ( tileSize ) / 2 + Math.floor( c / tilesX ) * ( tileSize ) - height / 2 ]; - const compPlane = new Mesh( geometry, new ShaderMaterial( { - uniforms: { - res: { value: new Vector2( width, height ) }, - tileNum: { value: c / ( tilesX * tilesY - 1 ) }, - bounds: { value: bounds } - }, - vertexShader: 'varying vec2 vUv;void main(){vUv=uv;gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);}', - fragmentShader: shader - } ) ); - compPlane.position.set( px, py, 0 ); - scn.add( compPlane ); - - } - - this.renderer.setRenderTarget( rt ); - this.renderer.render( scn, cam ); - this.renderer.setRenderTarget( null ); - - // - - geometry.dispose(); - - scn.traverse( function ( object ) { - - if ( object.material !== undefined ) object.material.dispose(); - - } ); - - return rt; - - } - -} - -export { SDFGeometryGenerator }; diff --git a/examples/screenshots/webgl_geometry_sdf.jpg b/examples/screenshots/webgl_geometry_sdf.jpg deleted file mode 100644 index 82d8696fd181dd..00000000000000 Binary files a/examples/screenshots/webgl_geometry_sdf.jpg and /dev/null differ diff --git a/examples/webgl_geometry_sdf.html b/examples/webgl_geometry_sdf.html deleted file mode 100644 index 6376535db1e81b..00000000000000 --- a/examples/webgl_geometry_sdf.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - three.js webgl - SDF Geometry - - - - - -
- three.js -SDF to Mesh-
- a wrapper of Mikola Lysenko's Isosurface
- Mandelbrot by EvilRyu
-
- - - - - - -