@xeokit/xeokit-sdk 2.4.0-alpha-89 → 2.4.0-alpha-90

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 (30) hide show
  1. package/dist/xeokit-sdk.cjs.js +169 -92
  2. package/dist/xeokit-sdk.es.js +169 -92
  3. package/dist/xeokit-sdk.es5.js +58 -58
  4. package/dist/xeokit-sdk.min.cjs.js +3 -3
  5. package/dist/xeokit-sdk.min.es.js +3 -3
  6. package/dist/xeokit-sdk.min.es5.js +3 -3
  7. package/package.json +1 -1
  8. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +3 -0
  9. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +11 -3
  10. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +4 -0
  11. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +11 -4
  12. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickDepthRenderer.js +13 -2
  13. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickMeshRenderer.js +13 -2
  14. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsFlatRenderer.js +14 -2
  15. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsRenderer.js +13 -2
  16. package/src/viewer/scene/model/vbo/VBOSceneModelRenderers.js +17 -39
  17. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickDepthRenderer.js +3 -1
  18. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickMeshRenderer.js +3 -1
  19. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickDepthRenderer.js +4 -1
  20. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickMeshRenderer.js +3 -0
  21. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickDepthRenderer.js +4 -1
  22. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickMeshRenderer.js +3 -1
  23. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsFlatRenderer.js +3 -1
  24. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsRenderer.js +3 -1
  25. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickDepthRenderer.js +3 -1
  26. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickMeshRenderer.js +3 -1
  27. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsFlatRenderer.js +3 -1
  28. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsRenderer.js +3 -1
  29. package/src/viewer/scene/webgl/RenderBuffer.js +1 -1
  30. package/src/viewer/scene/webgl/Renderer.js +31 -29
@@ -903,7 +903,7 @@ const Renderer = function (scene, options) {
903
903
  * Picks an Entity.
904
904
  * @private
905
905
  */
906
- this.pick = (function () {
906
+ this.pick = (function () {
907
907
 
908
908
  const tempVec3a = math.vec3();
909
909
  const tempMat4a = math.mat4();
@@ -948,13 +948,11 @@ const Renderer = function (scene, options) {
948
948
 
949
949
  // Picking with arbitrary World-space ray
950
950
  // Align camera along ray and fire ray through center of canvas
951
-
952
- const pickFrustumMatrix = math.frustumMat4(-1, 1, -1, 1, 0.01, scene.camera.project.far, tempMat4a);
953
-
951
+
954
952
  if (params.matrix) {
955
953
 
956
954
  pickViewMatrix = params.matrix;
957
- pickProjMatrix = pickFrustumMatrix;
955
+ pickProjMatrix = scene.camera.projMatrix;
958
956
 
959
957
  } else {
960
958
 
@@ -971,7 +969,7 @@ const Renderer = function (scene, options) {
971
969
  math.cross3Vec3(worldRayDir, randomVec3, up);
972
970
 
973
971
  pickViewMatrix = math.lookAtMat4v(worldRayOrigin, look, up, tempMat4b);
974
- pickProjMatrix = pickFrustumMatrix;
972
+ pickProjMatrix = scene.camera.projMatrix;
975
973
 
976
974
  pickResult.origin = worldRayOrigin;
977
975
  pickResult.direction = worldRayDir;
@@ -993,7 +991,7 @@ const Renderer = function (scene, options) {
993
991
  }
994
992
  }
995
993
 
996
- const pickBuffer = renderBufferManager.getRenderBuffer("pick");
994
+ const pickBuffer = renderBufferManager.getRenderBuffer("pick", { size: [1, 1] });
997
995
 
998
996
  pickBuffer.bind();
999
997
 
@@ -1055,10 +1053,12 @@ const Renderer = function (scene, options) {
1055
1053
  frameCtx.pickViewMatrix = pickViewMatrix;
1056
1054
  frameCtx.pickProjMatrix = pickProjMatrix;
1057
1055
  frameCtx.pickInvisible = !!params.pickInvisible;
1056
+ frameCtx.pickClipPos = [
1057
+ getClipPosX(canvasPos[0], gl.drawingBufferWidth),
1058
+ getClipPosY(canvasPos[1], gl.drawingBufferHeight),
1059
+ ];
1058
1060
 
1059
- gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
1060
-
1061
- gl.clearColor(0, 0, 0, 0);
1061
+ gl.viewport(0, 0, 1, 1);
1062
1062
  gl.depthMask(true);
1063
1063
  gl.enable(gl.DEPTH_TEST);
1064
1064
  gl.disable(gl.CULL_FACE);
@@ -1092,8 +1092,7 @@ const Renderer = function (scene, options) {
1092
1092
  }
1093
1093
  }
1094
1094
  }
1095
- const resolutionScale = scene.canvas.resolutionScale;
1096
- const pix = pickBuffer.read(Math.round(canvasPos[0] * resolutionScale), Math.round(canvasPos[1] * resolutionScale));
1095
+ const pix = pickBuffer.read(0, 0);
1097
1096
  let pickID = pix[0] + (pix[1] * 256) + (pix[2] * 256 * 256) + (pix[3] * 256 * 256 * 256);
1098
1097
 
1099
1098
  if (pickID < 0) {
@@ -1118,8 +1117,12 @@ const Renderer = function (scene, options) {
1118
1117
  frameCtx.pickViewMatrix = pickViewMatrix; // Can be null
1119
1118
  frameCtx.pickProjMatrix = pickProjMatrix; // Can be null
1120
1119
  // frameCtx.pickInvisible = !!params.pickInvisible;
1120
+ frameCtx.pickClipPos = [
1121
+ getClipPosX(canvasPos[0], gl.drawingBufferWidth),
1122
+ getClipPosY(canvasPos[1], gl.drawingBufferHeight),
1123
+ ];
1121
1124
 
1122
- gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
1125
+ gl.viewport(0, 0, 1, 1);
1123
1126
 
1124
1127
  gl.clearColor(0, 0, 0, 0);
1125
1128
  gl.enable(gl.DEPTH_TEST);
@@ -1129,8 +1132,7 @@ const Renderer = function (scene, options) {
1129
1132
 
1130
1133
  pickable.drawPickTriangles(frameCtx);
1131
1134
 
1132
- const resolutionScale = scene.canvas.resolutionScale;
1133
- const pix = pickBuffer.read(Math.round(canvasPos[0] * resolutionScale), Math.round(canvasPos[1] * resolutionScale));
1135
+ const pix = pickBuffer.read(0, 0);
1134
1136
 
1135
1137
  let primIndex = pix[0] + (pix[1] * 256) + (pix[2] * 256 * 256) + (pix[3] * 256 * 256 * 256);
1136
1138
 
@@ -1162,8 +1164,12 @@ const Renderer = function (scene, options) {
1162
1164
  frameCtx.pickZFar = nearAndFar[1];
1163
1165
  frameCtx.pickElementsCount = pickable.pickElementsCount;
1164
1166
  frameCtx.pickElementsOffset = pickable.pickElementsOffset;
1165
-
1166
- gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
1167
+ frameCtx.pickClipPos = [
1168
+ getClipPosX(canvasPos[0], gl.drawingBufferWidth),
1169
+ getClipPosY(canvasPos[1], gl.drawingBufferHeight),
1170
+ ];
1171
+
1172
+ gl.viewport(0, 0, 1, 1);
1167
1173
 
1168
1174
  gl.clearColor(0, 0, 0, 0);
1169
1175
  gl.depthMask(true);
@@ -1174,8 +1180,7 @@ const Renderer = function (scene, options) {
1174
1180
 
1175
1181
  pickable.drawPickDepths(frameCtx); // Draw color-encoded fragment screen-space depths
1176
1182
 
1177
- const resolutionScale = scene.canvas.resolutionScale;
1178
- const pix = pickBuffer.read(Math.round(canvasPos[0] * resolutionScale), Math.round(canvasPos[1] * resolutionScale));
1183
+ const pix = pickBuffer.read(0, 0);
1179
1184
 
1180
1185
  const screenZ = unpackDepth(pix); // Get screen-space Z at the given canvas coords
1181
1186
 
@@ -1476,12 +1481,12 @@ const Renderer = function (scene, options) {
1476
1481
  frameCtx.pickOrigin = pickResult.origin;
1477
1482
  frameCtx.pickViewMatrix = pickViewMatrix;
1478
1483
  frameCtx.pickProjMatrix = pickProjMatrix;
1484
+ frameCtx.pickClipPos = [
1485
+ getClipPosX(canvasPos[0], gl.drawingBufferWidth),
1486
+ getClipPosY(canvasPos[1], gl.drawingBufferHeight),
1487
+ ];
1479
1488
 
1480
- const pickNormalBuffer = renderBufferManager.getRenderBuffer("pick-normal");
1481
-
1482
- pickNormalBuffer.bind(gl.RGBA32I);
1483
-
1484
- gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
1489
+ gl.viewport(0, 0, 1, 1);
1485
1490
 
1486
1491
  gl.enable(gl.DEPTH_TEST);
1487
1492
  gl.disable(gl.CULL_FACE);
@@ -1491,10 +1496,7 @@ const Renderer = function (scene, options) {
1491
1496
 
1492
1497
  pickable.drawPickNormals(frameCtx); // Draw color-encoded fragment World-space normals
1493
1498
 
1494
- const resolutionScale = scene.canvas.resolutionScale;
1495
- const pix = pickNormalBuffer.read(Math.round(canvasPos[0] * resolutionScale), Math.round(canvasPos[1] * resolutionScale), gl.RGBA_INTEGER, gl.INT, Int32Array, 4);
1496
-
1497
- pickNormalBuffer.unbind();
1499
+ const pix = pickBuffer.read(0, 0);
1498
1500
 
1499
1501
  const worldNormal = [
1500
1502
  pix[0] / math.MAX_INT,
@@ -1695,4 +1697,4 @@ const Renderer = function (scene, options) {
1695
1697
  };
1696
1698
  };
1697
1699
 
1698
- export {Renderer};
1700
+ export { Renderer };