easy-threesdk 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/index.js +78 -0
  2. package/loader/WaterMaterial/index.js +35 -36
  3. package/loader/WaterMaterial/resource/textures/waternormals.jpg +0 -0
  4. package/package.json +1 -1
  5. package/plugins/LabelControl.js +566 -92
  6. package/plugins/ModelControl.js +43 -34
  7. package/tools/index.js +11 -4
  8. package/loader/WaterMaterial/WaterEffect.js +0 -255
  9. package/loader/WaterMaterial/resource/shaders/caustics/fragment.glsl +0 -24
  10. package/loader/WaterMaterial/resource/shaders/caustics/vertex.glsl +0 -34
  11. package/loader/WaterMaterial/resource/shaders/debug/fragment.glsl +0 -12
  12. package/loader/WaterMaterial/resource/shaders/debug/vertex.glsl +0 -10
  13. package/loader/WaterMaterial/resource/shaders/pool/fragment.glsl +0 -17
  14. package/loader/WaterMaterial/resource/shaders/pool/vertex.glsl +0 -16
  15. package/loader/WaterMaterial/resource/shaders/simulation/drop_fragment.glsl +0 -22
  16. package/loader/WaterMaterial/resource/shaders/simulation/normal_fragment.glsl +0 -19
  17. package/loader/WaterMaterial/resource/shaders/simulation/update_fragment.glsl +0 -33
  18. package/loader/WaterMaterial/resource/shaders/simulation/vertex.glsl +0 -9
  19. package/loader/WaterMaterial/resource/shaders/utils.glsl +0 -60
  20. package/loader/WaterMaterial/resource/shaders/water/fragment.glsl +0 -69
  21. package/loader/WaterMaterial/resource/shaders/water/vertex.glsl +0 -24
  22. package/loader/WaterMaterial/resource/tiles.jpg +0 -0
  23. package/loader/WaterMaterial/resource/vite.svg +0 -1
  24. package/loader/WaterMaterial/resource/xneg.jpg +0 -0
  25. package/loader/WaterMaterial/resource/xpos.jpg +0 -0
  26. package/loader/WaterMaterial/resource/ypos.jpg +0 -0
  27. package/loader/WaterMaterial/resource/zneg.jpg +0 -0
  28. package/loader/WaterMaterial/resource/zpos.jpg +0 -0
package/index.js CHANGED
@@ -165,6 +165,7 @@ class ThreeSdk {
165
165
  this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
166
166
  this.renderer.setSize(width, height);
167
167
  this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
168
+
168
169
  this.container.appendChild(this.renderer.domElement);
169
170
 
170
171
  //初始化控制器
@@ -784,6 +785,83 @@ class ThreeSdk {
784
785
  return threeGroup;
785
786
  }
786
787
 
788
+ /**
789
+ * 获取 mesh 的信息并返回 JSON 对象
790
+ * @param {THREE.Mesh} mesh - 要获取信息的 mesh
791
+ * @returns {Object} 包含位置、旋转、缩放信息的 JSON 对象
792
+ */
793
+ getMeshInfo(mesh) {
794
+ if (!mesh) {
795
+ return null;
796
+ }
797
+
798
+ const info = {
799
+ position: {
800
+ x: mesh.position.x,
801
+ y: mesh.position.y,
802
+ z: mesh.position.z,
803
+ },
804
+ rotation: {
805
+ x: mesh.rotation.x,
806
+ y: mesh.rotation.y,
807
+ z: mesh.rotation.z,
808
+ },
809
+ scale: {
810
+ x: mesh.scale.x,
811
+ y: mesh.scale.y,
812
+ z: mesh.scale.z,
813
+ },
814
+ };
815
+
816
+ return info;
817
+ }
818
+
819
+ /**
820
+ * 将 JSON 信息应用到 mesh
821
+ * @param {THREE.Mesh} mesh - 要应用信息的 mesh
822
+ * @param {Object} infoJson - 包含位置、旋转、缩放信息的 JSON 对象
823
+ */
824
+ applyMeshInfo(mesh, infoJson) {
825
+ if (!mesh || !infoJson) {
826
+ console.warn("⚠️ applyMeshInfo: mesh 或 infoJson 为空");
827
+ return;
828
+ }
829
+
830
+ // 应用位置
831
+ if (infoJson.position) {
832
+ mesh.position.set(
833
+ infoJson.position.x || 0,
834
+ infoJson.position.y || 0,
835
+ infoJson.position.z || 0
836
+ );
837
+ }
838
+
839
+ // 应用旋转(弧度制)
840
+ if (infoJson.rotation) {
841
+ mesh.rotation.set(
842
+ infoJson.rotation.x || 0,
843
+ infoJson.rotation.y || 0,
844
+ infoJson.rotation.z || 0
845
+ );
846
+ }
847
+
848
+ // 应用缩放
849
+ if (infoJson.scale) {
850
+ mesh.scale.set(
851
+ infoJson.scale.x || 1,
852
+ infoJson.scale.y || 1,
853
+ infoJson.scale.z || 1
854
+ );
855
+ }
856
+
857
+ // 如果当前选中了该 mesh,更新 TransformControls
858
+ if (selectedMesh === mesh && transformControls) {
859
+ transformControls.updateMatrixWorld();
860
+ }
861
+
862
+ console.log("✅ 信息已应用到 mesh:", mesh.userData.name || "未命名对象");
863
+ }
864
+
787
865
  /**
788
866
  * 将相机平滑移动到指定位置,并可以围绕位置旋转查看
789
867
  * @param {THREE.Vector3} position - 标签的3D位置
@@ -1,36 +1,35 @@
1
- function createWaterLoader(renderer, camera, scene) {
2
- // Load Textures
3
- const cubetextureloader = new THREE.CubeTextureLoader();
4
- const textureCube = cubetextureloader.load([
5
- '/resource/xpos.jpg', '/resource/xneg.jpg',
6
- '/resource/ypos.jpg', '/resource/ypos.jpg',
7
- '/resource/zpos.jpg', '/resource/zneg.jpg',
8
- ]);
9
-
10
- const textureloader = new THREE.TextureLoader();
11
- const tiles = textureloader.load('/resource/tiles.jpg');
12
-
13
- // Initialize Water Effect
14
- const waterEffect = new WaterEffect(renderer, camera, scene, {
15
- tiles: tiles,
16
- skybox: textureCube
17
- });
18
-
19
- function animate() {
20
- // Update water effect
21
- waterEffect.update();
22
-
23
- // Clear and Render Scene
24
- renderer.setClearColor(new THREE.Color('white'), 1);
25
- renderer.clear();
26
-
27
- renderer.render(scene, camera);
28
-
29
- controls.update();
30
-
31
- requestAnimationFrame(animate);
32
- }
33
-
34
- animate();
35
- return waterEffect;
36
- }
1
+ import { Water } from "three/examples/jsm/objects/Water.js";
2
+ import * as THREE from "three";
3
+ import waterNormalMap from "./resource/textures/waternormals.jpg";
4
+ function createWaterLoader(scene) {
5
+ // 创建 PlaneGeometry 网格
6
+ const planeGeometry = new THREE.PlaneGeometry(10, 10);
7
+
8
+ const planeMesh = new Water(planeGeometry, {
9
+ textureWidth: 512,
10
+ textureHeight: 512,
11
+ waterNormals: new THREE.TextureLoader().load(
12
+ waterNormalMap,
13
+ function (texture) {
14
+ texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
15
+ }
16
+ ),
17
+ sunDirection: new THREE.Vector3(),
18
+ sunColor: 0xffffff,
19
+ waterColor: 0x001e0f,
20
+ distortionScale: 3.7,
21
+ fog: scene.fog !== undefined,
22
+ });
23
+
24
+ planeMesh.rotation.x = -Math.PI / 2;
25
+
26
+ function animate() {
27
+ planeMesh.material.uniforms["time"].value += 1.0 / 60.0;
28
+
29
+ requestAnimationFrame(animate);
30
+ }
31
+
32
+ animate();
33
+ return planeMesh;
34
+ }
35
+ export default createWaterLoader;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-threesdk",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "����Threejs��װ�ij��ù��ܵ�sdk",
5
5
  "main": "index.js",
6
6
  "private": false,