Viewport.Info.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. import { UIPanel, UIBreak, UIText } from './libs/ui.js';
  5. var ViewportInfo = function ( editor ) {
  6. var signals = editor.signals;
  7. var strings = editor.strings;
  8. var container = new UIPanel();
  9. container.setId( 'info' );
  10. container.setPosition( 'absolute' );
  11. container.setLeft( '10px' );
  12. container.setBottom( '10px' );
  13. container.setFontSize( '12px' );
  14. container.setColor( '#fff' );
  15. var objectsText = new UIText( '0' ).setMarginLeft( '6px' );
  16. var verticesText = new UIText( '0' ).setMarginLeft( '6px' );
  17. var trianglesText = new UIText( '0' ).setMarginLeft( '6px' );
  18. var frametimeText = new UIText( '0' ).setMarginLeft( '6px' );
  19. container.add( new UIText( strings.getKey( 'viewport/info/objects' ) ).setTextTransform( 'lowercase' ) );
  20. container.add( objectsText, new UIBreak() );
  21. container.add( new UIText( strings.getKey( 'viewport/info/vertices' ) ).setTextTransform( 'lowercase' ) );
  22. container.add( verticesText, new UIBreak() );
  23. container.add( new UIText( strings.getKey( 'viewport/info/triangles' ) ).setTextTransform( 'lowercase' ) );
  24. container.add( trianglesText, new UIBreak() );
  25. container.add( new UIText( strings.getKey( 'viewport/info/frametime' ) ).setTextTransform( 'lowercase' ) );
  26. container.add( frametimeText, new UIBreak() );
  27. signals.objectAdded.add( update );
  28. signals.objectRemoved.add( update );
  29. signals.geometryChanged.add( update );
  30. //
  31. function update() {
  32. var scene = editor.scene;
  33. var objects = 0, vertices = 0, triangles = 0;
  34. for ( var i = 0, l = scene.children.length; i < l; i ++ ) {
  35. var object = scene.children[ i ];
  36. object.traverseVisible( function ( object ) {
  37. objects ++;
  38. if ( object.isMesh ) {
  39. var geometry = object.geometry;
  40. if ( geometry.isGeometry ) {
  41. vertices += geometry.vertices.length;
  42. triangles += geometry.faces.length;
  43. } else if ( geometry.isBufferGeometry ) {
  44. vertices += geometry.attributes.position.count;
  45. if ( geometry.index !== null ) {
  46. triangles += geometry.index.count / 3;
  47. } else {
  48. triangles += geometry.attributes.position.count / 3;
  49. }
  50. }
  51. }
  52. } );
  53. }
  54. objectsText.setValue( objects.format() );
  55. verticesText.setValue( vertices.format() );
  56. trianglesText.setValue( triangles.format() );
  57. }
  58. signals.sceneRendered.add( updateFrametime );
  59. function updateFrametime( frametime ) {
  60. frametimeText.setValue( Number( frametime ).toFixed( 2 ) + " ms" );
  61. }
  62. return container;
  63. };
  64. export { ViewportInfo };