Skip to content

Commit 20638b1

Browse files
author
理子豪
committed
ViewHelper: Customize the viewport size and fix renderer.autoClear settings
1 parent c5f48e4 commit 20638b1

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

examples/jsm/helpers/ViewHelper.js

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ class ViewHelper extends Object3D {
3434
* Constructs a new view helper.
3535
*
3636
* @param {Camera} camera - The camera whose transformation should be visualized.
37-
* @param {HTMLDOMElement} [domElement] - The DOM element that is used to render the view.
37+
* @param {WebGLRenderer|WebGPURenderer} renderer - The renderer that is used to render the view.
3838
*/
39-
constructor( camera, domElement ) {
39+
constructor( camera, renderer ) {
4040

4141
super();
4242

@@ -144,28 +144,24 @@ class ViewHelper extends Object3D {
144144
/**
145145
* Renders the helper in a separate view in the bottom-right corner
146146
* of the viewport.
147-
*
148-
* @param {WebGLRenderer|WebGPURenderer} renderer - The renderer.
149147
*/
150-
this.render = function ( renderer ) {
148+
this.render = function () {
151149

152150
this.quaternion.copy( camera.quaternion ).invert();
153151
this.updateMatrixWorld();
154152

155153
point.set( 0, 0, 1 );
156154
point.applyQuaternion( camera.quaternion );
157155

158-
//
159-
160-
const x = domElement.offsetWidth - dim;
161-
const y = renderer.isWebGPURenderer ? domElement.offsetHeight - dim : 0;
162-
163156
renderer.clearDepth();
164157

165158
renderer.getViewport( viewport );
166-
renderer.setViewport( x, y, dim, dim );
159+
renderer.setViewport( helperViewport.x, helperViewport.y, helperViewport.z, helperViewport.w );
167160

161+
const autoClear = renderer.autoClear;
162+
renderer.autoClear = false;
168163
renderer.render( this, orthoCamera );
164+
renderer.autoClear = autoClear;
169165

170166
renderer.setViewport( viewport.x, viewport.y, viewport.z, viewport.w );
171167

@@ -177,8 +173,22 @@ class ViewHelper extends Object3D {
177173
const q1 = new Quaternion();
178174
const q2 = new Quaternion();
179175
const viewport = new Vector4();
176+
const helperViewport = new Vector4( renderer.domElement.offsetWidth - dim, renderer.isWebGPURenderer ? renderer.domElement.offsetHeight - dim : 0, dim, dim );
180177
let radius = 0;
181178

179+
/**
180+
* Sets the viewport for the helper.
181+
* @param {number} x viewport x
182+
* @param {number} y viewport y
183+
* @param {number} width viewport width
184+
* @param {number} height viewport height
185+
*/
186+
this.setViewport = function ( x, y, width, height ) {
187+
188+
helperViewport.set( x, y, width, height );
189+
190+
};
191+
182192
/**
183193
* This method should be called when a click or pointer event
184194
* has happened in the app.
@@ -190,9 +200,9 @@ class ViewHelper extends Object3D {
190200

191201
if ( this.animating === true ) return false;
192202

193-
const rect = domElement.getBoundingClientRect();
194-
const offsetX = rect.left + ( domElement.offsetWidth - dim );
195-
const offsetY = rect.top + ( domElement.offsetHeight - dim );
203+
const rect = renderer.domElement.getBoundingClientRect();
204+
const offsetX = rect.left + ( renderer.domElement.offsetWidth - dim );
205+
const offsetY = rect.top + ( renderer.domElement.offsetHeight - dim );
196206
mouse.x = ( ( event.clientX - offsetX ) / ( rect.right - offsetX ) ) * 2 - 1;
197207
mouse.y = - ( ( event.clientY - offsetY ) / ( rect.bottom - offsetY ) ) * 2 + 1;
198208

0 commit comments

Comments
 (0)