瀏覽代碼

Tests: Add unit test for Mesh.raycast(). (#21399)

Michael Herzog 4 年之前
父節點
當前提交
41ded4ee03
共有 1 個文件被更改,包括 39 次插入14 次删除
  1. 39 14
      test/unit/src/objects/Mesh.tests.js

+ 39 - 14
test/unit/src/objects/Mesh.tests.js

@@ -1,49 +1,74 @@
 /* global QUnit */
 
 import { Mesh } from '../../../../src/objects/Mesh';
+import { Raycaster } from '../../../../src/core/Raycaster';
+import { PlaneGeometry } from '../../../../src/geometries/PlaneGeometry';
+import { MeshBasicMaterial } from '../../../../src/materials/MeshBasicMaterial';
+import { Vector2 } from '../../../../src/math/Vector2';
+import { Vector3 } from '../../../../src/math/Vector3';
 
 export default QUnit.module( 'Objects', () => {
 
 	QUnit.module( 'Mesh', () => {
 
 		// INHERITANCE
-		QUnit.todo( "Extending", ( assert ) => {
+		QUnit.todo( 'Extending', ( assert ) => {
 
-			assert.ok( false, "everything's gonna be alright" );
+			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
 		// INSTANCING
-		QUnit.todo( "Instancing", ( assert ) => {
+		QUnit.todo( 'Instancing', ( assert ) => {
 
-			assert.ok( false, "everything's gonna be alright" );
+			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
 
 		// PUBLIC STUFF
-		QUnit.todo( "isMesh", ( assert ) => {
+		QUnit.todo( 'isMesh', ( assert ) => {
 
-			assert.ok( false, "everything's gonna be alright" );
+			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
-		QUnit.todo( "copy", ( assert ) => {
+		QUnit.todo( 'copy', ( assert ) => {
 
-			assert.ok( false, "everything's gonna be alright" );
+			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
-		QUnit.todo( "updateMorphTargets", ( assert ) => {
+		QUnit.todo( 'updateMorphTargets', ( assert ) => {
 
-			assert.ok( false, "everything's gonna be alright" );
+			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );
-		QUnit.todo( "raycast", ( assert ) => {
+		QUnit.todo( 'raycast', ( assert ) => {
 
-			assert.ok( false, "everything's gonna be alright" );
+			const geometry = new PlaneGeometry();
+			const material = new MeshBasicMaterial();
+
+			const mesh = new Mesh( geometry, material );
+
+			const raycaster = new Raycaster();
+			raycaster.ray.origin.set( 0.25, 0.25, 1 );
+			raycaster.ray.direction.set( 0, 0, - 1 );
+
+			const intersections = [];
+
+			mesh.raycast( raycaster, intersections );
+
+			const intersection = intersections[ 0 ];
+
+			assert.equal( intersection.object, mesh, 'intersction object' );
+			assert.equal( intersection.distance, 1, 'intersction distance' );
+			assert.equal( intersection.faceIndex, 1, 'intersction face index' );
+			assert.deepEqual( intersection.face, { a: 0, b: 2, c: 1 }, 'intersction vertex indices' );
+			assert.deepEqual( intersection.point, new Vector3( 0.25, 0.25, 0 ), 'intersction point' );
+			assert.deepEqual( intersection.uv, new Vector2( 0.75, 0.75 ), 'intersction uv' );
 
 		} );
-		QUnit.todo( "clone", ( assert ) => {
+		QUnit.todo( 'clone', ( assert ) => {
 
-			assert.ok( false, "everything's gonna be alright" );
+			assert.ok( false, 'everything\'s gonna be alright' );
 
 		} );