소스 검색

using transform matirx

hsiao 5 년 전
부모
커밋
32fb53c71d
46개의 변경된 파일2311개의 추가작업 그리고 23개의 파일을 삭제
  1. BIN
      public/scenes/campus/Assets/00ACC3C40649240DF9BD6F0AAFA56389.png
  2. BIN
      public/scenes/campus/Assets/0CAAE57A1FC2D9880117C70327C0766D.png
  3. BIN
      public/scenes/campus/Assets/0CC9142D64AB6E5082D13A75B37DDE7A.png
  4. BIN
      public/scenes/campus/Assets/11D39409EFDA73738D4CDC0619A7DAF6.png
  5. BIN
      public/scenes/campus/Assets/1798AB1545B6F6944BBB5B29E538F7E0.png
  6. BIN
      public/scenes/campus/Assets/17B157CB75B005E126B2CAA6C8D4A411.png
  7. BIN
      public/scenes/campus/Assets/1BC7DC99A71CB0580C4815D19D887143.png
  8. BIN
      public/scenes/campus/Assets/1F2B41E795D3CA14026AE36357315B1F.png
  9. BIN
      public/scenes/campus/Assets/218C8F7A5193B09F1414D85AB5678538.png
  10. BIN
      public/scenes/campus/Assets/2F6FF7766D95FF9177F7CEDED606F3E8.png
  11. BIN
      public/scenes/campus/Assets/3BC6B123A43889CB37533199B58E131B.png
  12. BIN
      public/scenes/campus/Assets/3E1AF388FCC01A6E4A8886EE6A7ED24C.png
  13. BIN
      public/scenes/campus/Assets/4DF5D4774BC5709DA9CD27F9614DDFB4.png
  14. BIN
      public/scenes/campus/Assets/51AE3B29BFC5259042CF85F2F4E29925.png
  15. BIN
      public/scenes/campus/Assets/546CB88B13BDAE73F1836E258A8128AC.png
  16. BIN
      public/scenes/campus/Assets/60DA469BAECB6A458836C9D7145954A0.png
  17. BIN
      public/scenes/campus/Assets/6C6D3EAE3EDB52581DF01C6301686C94.png
  18. BIN
      public/scenes/campus/Assets/6FF181DB67E10FA8628467102210C809.png
  19. BIN
      public/scenes/campus/Assets/724486ACAAB8B758059A3AE77E842655.png
  20. BIN
      public/scenes/campus/Assets/761CC41F9A3000C9048E64F5E3DB207E.png
  21. BIN
      public/scenes/campus/Assets/76584CD8BA814CFE3243DABBA61DA0FF.png
  22. BIN
      public/scenes/campus/Assets/77E5FFB9C9EC66D16BB49D3FF160629C.png
  23. BIN
      public/scenes/campus/Assets/793BD9CFAF44CE597D34074A714D48D9.png
  24. BIN
      public/scenes/campus/Assets/7FE51DCF8A388026BFCAE0F4C4BF0236.png
  25. BIN
      public/scenes/campus/Assets/80390CC69A7E3D8331F8D7C94A862B2D.png
  26. BIN
      public/scenes/campus/Assets/9906B1BA7E1524CEABBF1C9DD1CE3627.png
  27. BIN
      public/scenes/campus/Assets/9B18107ABB606F8BE1F9810D6BF298CE.png
  28. BIN
      public/scenes/campus/Assets/9B54F2BBCF60147EAE8B1037E5A0CBAC.png
  29. BIN
      public/scenes/campus/Assets/A2629F15A3CEB78E2100B247B37F898D.png
  30. BIN
      public/scenes/campus/Assets/C66527F4D6692A6601EBD445EE0DA514.png
  31. BIN
      public/scenes/campus/Assets/CF2A0E8DDE7C3F5C32D7D566A000D75C.png
  32. BIN
      public/scenes/campus/Assets/D36EBC54726C5D107F74895632D3FEF7.png
  33. BIN
      public/scenes/campus/Assets/D3942AAE506B2CF302009CE24B4750DA.png
  34. BIN
      public/scenes/campus/Assets/DBCD39AE9382BD8A286B8E456ABA987D.png
  35. BIN
      public/scenes/campus/Assets/DEB9BC496090FFA96A7A2D6B9550A056.png
  36. BIN
      public/scenes/campus/Assets/E168D926B640D775F707FDC46119D41F.png
  37. BIN
      public/scenes/campus/Assets/E2372AAC784391F034806F1032513AA2.png
  38. BIN
      public/scenes/campus/Assets/E2660024DCD28F3D66C20955368A57A7.png
  39. BIN
      public/scenes/campus/Assets/E46479FA144721C80781F0345AC4FF51.png
  40. BIN
      public/scenes/campus/Assets/FFAE02A1E8B2E46F6FC4BE9F703657C1.png
  41. BIN
      public/scenes/campus/Unity2GLTF.bin
  42. 2258
    0
      public/scenes/campus/Unity2GLTF.gltf
  43. 1
    0
      public/scenes/campus/index.json
  44. 1
    0
      public/scenes/campus/scene.json
  45. 26
    7
      src/controller.ts
  46. 25
    16
      src/index.ts

BIN
public/scenes/campus/Assets/00ACC3C40649240DF9BD6F0AAFA56389.png 파일 보기


BIN
public/scenes/campus/Assets/0CAAE57A1FC2D9880117C70327C0766D.png 파일 보기


BIN
public/scenes/campus/Assets/0CC9142D64AB6E5082D13A75B37DDE7A.png 파일 보기


BIN
public/scenes/campus/Assets/11D39409EFDA73738D4CDC0619A7DAF6.png 파일 보기


BIN
public/scenes/campus/Assets/1798AB1545B6F6944BBB5B29E538F7E0.png 파일 보기


BIN
public/scenes/campus/Assets/17B157CB75B005E126B2CAA6C8D4A411.png 파일 보기


BIN
public/scenes/campus/Assets/1BC7DC99A71CB0580C4815D19D887143.png 파일 보기


BIN
public/scenes/campus/Assets/1F2B41E795D3CA14026AE36357315B1F.png 파일 보기


BIN
public/scenes/campus/Assets/218C8F7A5193B09F1414D85AB5678538.png 파일 보기


BIN
public/scenes/campus/Assets/2F6FF7766D95FF9177F7CEDED606F3E8.png 파일 보기


BIN
public/scenes/campus/Assets/3BC6B123A43889CB37533199B58E131B.png 파일 보기


BIN
public/scenes/campus/Assets/3E1AF388FCC01A6E4A8886EE6A7ED24C.png 파일 보기


BIN
public/scenes/campus/Assets/4DF5D4774BC5709DA9CD27F9614DDFB4.png 파일 보기


BIN
public/scenes/campus/Assets/51AE3B29BFC5259042CF85F2F4E29925.png 파일 보기


BIN
public/scenes/campus/Assets/546CB88B13BDAE73F1836E258A8128AC.png 파일 보기


BIN
public/scenes/campus/Assets/60DA469BAECB6A458836C9D7145954A0.png 파일 보기


BIN
public/scenes/campus/Assets/6C6D3EAE3EDB52581DF01C6301686C94.png 파일 보기


BIN
public/scenes/campus/Assets/6FF181DB67E10FA8628467102210C809.png 파일 보기


BIN
public/scenes/campus/Assets/724486ACAAB8B758059A3AE77E842655.png 파일 보기


BIN
public/scenes/campus/Assets/761CC41F9A3000C9048E64F5E3DB207E.png 파일 보기


BIN
public/scenes/campus/Assets/76584CD8BA814CFE3243DABBA61DA0FF.png 파일 보기


BIN
public/scenes/campus/Assets/77E5FFB9C9EC66D16BB49D3FF160629C.png 파일 보기


BIN
public/scenes/campus/Assets/793BD9CFAF44CE597D34074A714D48D9.png 파일 보기


BIN
public/scenes/campus/Assets/7FE51DCF8A388026BFCAE0F4C4BF0236.png 파일 보기


BIN
public/scenes/campus/Assets/80390CC69A7E3D8331F8D7C94A862B2D.png 파일 보기


BIN
public/scenes/campus/Assets/9906B1BA7E1524CEABBF1C9DD1CE3627.png 파일 보기


BIN
public/scenes/campus/Assets/9B18107ABB606F8BE1F9810D6BF298CE.png 파일 보기


BIN
public/scenes/campus/Assets/9B54F2BBCF60147EAE8B1037E5A0CBAC.png 파일 보기


BIN
public/scenes/campus/Assets/A2629F15A3CEB78E2100B247B37F898D.png 파일 보기


BIN
public/scenes/campus/Assets/C66527F4D6692A6601EBD445EE0DA514.png 파일 보기


BIN
public/scenes/campus/Assets/CF2A0E8DDE7C3F5C32D7D566A000D75C.png 파일 보기


BIN
public/scenes/campus/Assets/D36EBC54726C5D107F74895632D3FEF7.png 파일 보기


BIN
public/scenes/campus/Assets/D3942AAE506B2CF302009CE24B4750DA.png 파일 보기


BIN
public/scenes/campus/Assets/DBCD39AE9382BD8A286B8E456ABA987D.png 파일 보기


BIN
public/scenes/campus/Assets/DEB9BC496090FFA96A7A2D6B9550A056.png 파일 보기


BIN
public/scenes/campus/Assets/E168D926B640D775F707FDC46119D41F.png 파일 보기


BIN
public/scenes/campus/Assets/E2372AAC784391F034806F1032513AA2.png 파일 보기


BIN
public/scenes/campus/Assets/E2660024DCD28F3D66C20955368A57A7.png 파일 보기


BIN
public/scenes/campus/Assets/E46479FA144721C80781F0345AC4FF51.png 파일 보기


BIN
public/scenes/campus/Assets/FFAE02A1E8B2E46F6FC4BE9F703657C1.png 파일 보기


BIN
public/scenes/campus/Unity2GLTF.bin 파일 보기


+ 2258
- 0
public/scenes/campus/Unity2GLTF.gltf
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 1
- 0
public/scenes/campus/index.json 파일 보기

@@ -0,0 +1 @@
1
+{"date":"2020/04/27 16:46:52","author":"uinnvoa","description":"","license":"优锘科技版权所有","camInfo":{"eye":"-25.916 33.351 -6.956","target":"-9.081 7.755 10.079"},"version":"1.1.0"}

+ 1
- 0
public/scenes/campus/scene.json 파일 보기

@@ -0,0 +1 @@
1
+{"camInfo":{"eye":"-25.916 33.351 -6.956","target":"-9.081 7.755 10.079"},"id":"0","gltfid":"node_World_-15956","outdoors":{"id":"1","gltfid":"node_FloorPlan_-15966","structure":{"placements":[{"id":"-57192","gltfid":"node_CombinePlacement_-57192"},{"id":"-57202","gltfid":"node_CombinePlacement_-57202"},{"id":"-57212","gltfid":"node_CombinePlacement_-57212"}]}}}

+ 26
- 7
src/controller.ts 파일 보기

@@ -1,11 +1,13 @@
1
-import { Object3D, Raycaster, Camera, Scene, Euler } from "three";
1
+import { Object3D, Raycaster, Camera, Scene, Euler, Vector3 } from "three";
2 2
 import { FooGame } from './index';
3 3
 
4 4
 export class GameController {
5 5
     root: HTMLElement;
6 6
     mouse: { dx: number, dy: number };
7 7
     callbackMap: any;
8
+    axisZ = new Vector3(0, 0, 1).normalize();
8 9
 
10
+    private vec: Vector3 = new Vector3();
9 11
     private raycaster: Raycaster;
10 12
 
11 13
     constructor(root: HTMLElement) {
@@ -15,7 +17,7 @@ export class GameController {
15 17
         this.mouse = { dx: 0, dy: 0 }
16 18
         this.raycaster = new Raycaster();
17 19
 
18
-        this.root.onmouseup=()=>{
20
+        this.root.onmouseup = () => {
19 21
             document.body.style.cursor = "none";
20 22
             this.root.requestPointerLock();
21 23
         };
@@ -39,22 +41,38 @@ export class GameController {
39 41
             eu.y -= this.mouse.dx * 0.001;
40 42
             eu.x = Math.max(- PI_2, Math.min(PI_2, eu.x));
41 43
             cam.quaternion.setFromEuler(eu);
42
-            
44
+
43 45
         };
44 46
     }
45 47
 
46 48
     bindMoveKeys(box: Object3D) {
47 49
         this.onKey_A(() => {
48
-            if (box) box.position.x -= 0.1;
50
+            if (box) {
51
+                //旋转矩阵的x向量
52
+                this.vec.setFromMatrixColumn(box.matrix, 0);
53
+                box.position.addScaledVector(this.vec, -0.1);
54
+            }
49 55
         });
50 56
         this.onKey_D(() => {
51
-            if (box) box.position.x += 0.1;
57
+            if (box) {
58
+                //旋转矩阵的x向量
59
+                this.vec.setFromMatrixColumn(box.matrix, 0);
60
+                box.position.addScaledVector(this.vec, 0.1);
61
+            }
52 62
         });
53 63
         this.onKey_S(() => {
54
-            if (box) box.position.z += 0.1;
64
+            if (box) {
65
+                this.vec.setFromMatrixColumn(box.matrix, 0);
66
+                this.vec.crossVectors(box.up, this.vec);
67
+                box.position.addScaledVector(this.vec, -0.1);
68
+            }
55 69
         });
56 70
         this.onKey_W(() => {
57
-            if (box) box.position.z -= 0.1;
71
+            if (box) {
72
+                this.vec.setFromMatrixColumn(box.matrix, 0);
73
+                this.vec.crossVectors(box.up, this.vec);
74
+                box.position.addScaledVector(this.vec, 0.1);
75
+            }
58 76
         });
59 77
     }
60 78
 
@@ -82,6 +100,7 @@ export class GameController {
82 100
     private bindKey() {
83 101
         this.root.onkeypress = (event) => {
84 102
             let c = event.keyCode;
103
+             
85 104
             if (this.callbackMap[c]) {
86 105
                 this.callbackMap[c]();
87 106
             }

+ 25
- 16
src/index.ts 파일 보기

@@ -1,6 +1,6 @@
1 1
 import * as THREE from "three"
2 2
 import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
3
-import { Object3D, Mesh, ShaderMaterial, IcosahedronGeometry, TextureLoader, MeshStandardMaterial, Scene, HemisphereLight, Color, DirectionalLight, Vector3 } from "three";
3
+import { Object3D, Mesh, ShaderMaterial, IcosahedronGeometry, TextureLoader, MeshStandardMaterial, Scene, HemisphereLight, Color, DirectionalLight, Vector3, AmbientLight, PlaneBufferGeometry, MeshPhongMaterial } from "three";
4 4
 
5 5
 import { GameController } from "./controller"
6 6
 import { VaringBox } from "./shader_test"
@@ -27,13 +27,15 @@ export class FooGame {
27 27
     constructor() {
28 28
         this.camera = new THREE.PerspectiveCamera(this.cam_fov, this.cam_aspect, 1, 1000)
29 29
         this.camera.position.x = -1;
30
-        this.camera.position.y = 1;
30
+        this.camera.position.y = 2;
31 31
         this.camera.position.z = 1;
32 32
 
33 33
         this.scene = new THREE.Scene();
34 34
 
35
-        this.light = new DirectionalLight(new Color(0XFFFFFF), 0.4);
35
+        this.light = new HemisphereLight(new Color(0XFFFFFF), new Color(0x000000), 1);
36 36
         this.light.position.set(0, 15, 0);
37
+
38
+        this.scene.add(new AmbientLight(new Color(0xffffff), 1));
37 39
         this.scene.add(this.light);
38 40
         this.renderer = new THREE.WebGLRenderer();
39 41
         this.renderer.setSize(window.innerWidth, window.innerHeight);
@@ -103,9 +105,11 @@ export class FooGame {
103 105
      */
104 106
     loadScene(callback: Function) {
105 107
 
106
-        this.gltfLoader.load("./scenes/foo.gltf", gltf => {
108
+        this.gltfLoader.load("./scenes/campus/Unity2GLTF.gltf", gltf => {
109
+            console.log(gltf);
110
+
107 111
             this.scene.add(gltf.scene);
108
-            //this.scene.background = new THREE.Color(0xffffff);
112
+            this.scene.background = new THREE.Color('rgb(191,196,234)');
109 113
 
110 114
             callback();
111 115
         });
@@ -115,12 +119,22 @@ export class FooGame {
115 119
 let game = new FooGame();
116 120
 
117 121
 game.loadScene(() => {
118
-    
119
-    let mat = GameUtils.makeRandomObjects(game.scene, 500);
122
+
123
+    /*let mat = GameUtils.makeRandomObjects(game.scene, 500);
120 124
     FooGame.setUpdate(game.scene, (obj: Object3D) => {
121 125
         mat.uniforms.time.value = performance.now() / 500;
122 126
     });
127
+*/
123 128
 
129
+    let geoGround = new PlaneBufferGeometry(200, 200, 100, 200);
130
+    let matGround = new MeshPhongMaterial({
131
+        color: "rgb(50,50,50)"
132
+    });
133
+
134
+    let ground = new Mesh(geoGround, matGround);
135
+    ground.rotation.x = -Math.PI / 2;
136
+    ground.position.y = -2;
137
+    game.scene.add(ground);
124 138
     game.camera.lookAt(new THREE.Vector3(0, 0, 0));
125 139
 
126 140
 
@@ -128,17 +142,12 @@ game.loadScene(() => {
128 142
      * 设置天空盒子
129 143
      */
130 144
     let skybox = game.findObjectByName("Sphere");
131
-    if(skybox instanceof Mesh){
132
-        let mesh:Mesh = skybox;
133
-        if(mesh.material instanceof MeshStandardMaterial){
134
-            let mat:MeshStandardMaterial = mesh.material;
145
+    if (skybox instanceof Mesh) {
146
+        let mesh: Mesh = skybox;
147
+        if (mesh.material instanceof MeshStandardMaterial) {
148
+            let mat: MeshStandardMaterial = mesh.material;
135 149
             mat.side = THREE.BackSide;
136 150
         }
137 151
     }
138
-
139
-    console.log(game.camera.matrix);
140
-    console.log(new Vector3().setFromMatrixPosition(game.camera.matrix));
141
-    console.log(new Vector3().setFromMatrixColumn(game.camera.matrix, 0));
142
-
143 152
 })
144 153
 

Loading…
취소
저장