diff --git a/examples/jsm/lines/webgpu/LineSegments2.js b/examples/jsm/lines/webgpu/LineSegments2.js index 73eab628ddf422..da9fe4dd4acc08 100644 --- a/examples/jsm/lines/webgpu/LineSegments2.js +++ b/examples/jsm/lines/webgpu/LineSegments2.js @@ -9,9 +9,9 @@ import { Sphere, Vector3, Vector4, - Line2NodeMaterial + Line2NodeMaterial, + Vector2 } from 'three/webgpu'; - import { LineSegmentsGeometry } from '../../lines/LineSegmentsGeometry.js'; const _start = new Vector3(); @@ -29,6 +29,7 @@ const _closestPoint = new Vector3(); const _box = new Box3(); const _sphere = new Sphere(); const _clipToWorldVector = new Vector4(); +const _viewport = new Vector4(); let _ray, _lineWidth; @@ -93,8 +94,7 @@ function raycastWorldUnits( lineSegments, intersects ) { function raycastScreenSpace( lineSegments, camera, intersects ) { const projectionMatrix = camera.projectionMatrix; - const material = lineSegments.material; - const resolution = material.resolution; + const resolution = lineSegments.resolution; const matrixWorld = lineSegments.matrixWorld; const geometry = lineSegments.geometry; @@ -233,6 +233,8 @@ class LineSegments2 extends Mesh { this.type = 'LineSegments2'; + this.resolution = new Vector2(); + } // for backwards-compatibility, but could be a method of LineSegmentsGeometry... @@ -264,6 +266,13 @@ class LineSegments2 extends Mesh { } + onBeforeRender( renderer ) { + + renderer.getViewport( _viewport ); + this.resolution.set( _viewport.z, _viewport.w ); + + } + raycast( raycaster, intersects ) { const worldUnits = this.material.worldUnits; @@ -303,7 +312,7 @@ class LineSegments2 extends Mesh { } else { const distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) ); - sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution ); + sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, this.resolution ); } @@ -333,7 +342,7 @@ class LineSegments2 extends Mesh { } else { const distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) ); - boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution ); + boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, this.resolution ); }