Skip to content

Commit

Permalink
Merge pull request #1685 from xeokit/fix/rotation-transformation-matr…
Browse files Browse the repository at this point in the history
…ices

Fix rotation transformation in getEachVertex.
  • Loading branch information
xeolabs authored Oct 2, 2024
2 parents 3aa751a + 5a9bf1d commit 020d6c8
Show file tree
Hide file tree
Showing 33 changed files with 67 additions and 59 deletions.
6 changes: 3 additions & 3 deletions src/viewer/scene/math/rtcCoords.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,9 @@ function rtcToWorldPos(rtcCenter, rtcPos, worldPos) {
* @param rtcPlanePos
* @returns {*}
*/
function getPlaneRTCPos(dist, dir, rtcOrigin, rtcPlanePos, rotationMatrixConjugate) {
const rtcCenter = (rotationMatrixConjugate
? (tempVec4.set(rtcOrigin, 0), tempVec4[3] = 1, math.mulMat4v4(rotationMatrixConjugate, tempVec4, tempVec4))
function getPlaneRTCPos(dist, dir, rtcOrigin, rtcPlanePos, rotationMatrix) {
const rtcCenter = (rotationMatrix
? (tempVec4.set(rtcOrigin, 0), tempVec4[3] = 1, math.mulMat4v4(rotationMatrix, tempVec4, tempVec4))
: rtcOrigin);
const rtcCenterToPlaneDist = math.dotVec3(dir, rtcCenter) + dist;
const dirNormalized = math.normalizeVec3(dir, tempVec3a);
Expand Down
2 changes: 1 addition & 1 deletion src/viewer/scene/model/SceneModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -1605,7 +1605,7 @@ export class SceneModel extends Component {
if (this._matrixDirty) {
math.quaternionToRotationMat4(this._quaternion, this._worldRotationMatrix);
math.conjugateQuaternion(this._quaternion, this._conjugateQuaternion);
math.quaternionToRotationMat4(this._quaternion, this._worldRotationMatrixConjugate);
math.quaternionToRotationMat4(this._conjugateQuaternion, this._worldRotationMatrixConjugate);
this._matrix.set(this._worldRotationMatrix);
math.translateMat4v(this._position, this._matrix);
this._matrixDirty = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export class DTXLinesColorRenderer {
rtcViewMatrix = viewMatrix;
}

gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);
gl.uniform1i(this._uRenderPass, renderPass);
Expand All @@ -106,7 +106,7 @@ export class DTXLinesColorRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
4 changes: 2 additions & 2 deletions src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -1122,8 +1122,8 @@ export class DTXTrianglesLayer {
worldPos[2] = positions[i + 2];
worldPos[3] = 1.0;
math.decompressPosition(worldPos, positionsDecodeMatrix);
math.transformPoint4(this.model.worldMatrix, worldPos);
math.transformPoint4(this.model.worldMatrix, worldPos);
math.transformPoint4(this.model.worldMatrix, worldPos, worldPos);
math.transformPoint4(this.model.worldMatrix, worldPos, worldPos);
worldPos[0] += offsetX;
worldPos[1] += offsetY;
worldPos[2] += offsetZ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export class DTXTrianglesColorRenderer {
rtcCameraEye = camera.eye;
}

gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);
gl.uniform3fv(this._uCameraEyeRtc, rtcCameraEye);
Expand All @@ -119,7 +119,7 @@ export class DTXTrianglesColorRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export class DTXTrianglesDepthRenderer {
rtcCameraEye = camera.eye;
}

gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);
gl.uniform3fv(this._uCameraEyeRtc, rtcCameraEye);
Expand All @@ -114,7 +114,7 @@ export class DTXTrianglesDepthRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ export class DTXTrianglesEdgesColorRenderer {
}

gl.uniform1i(this._uRenderPass, renderPass);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);

Expand All @@ -100,7 +100,7 @@ export class DTXTrianglesEdgesColorRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export class DTXTrianglesEdgesRenderer {
}

gl.uniform1i(this._uRenderPass, renderPass);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);

Expand Down Expand Up @@ -127,7 +127,7 @@ export class DTXTrianglesEdgesRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export class DTXTrianglesNormalsRenderer {

gl.uniform1i(this._uRenderPass, renderPass);

gl.uniformMatrix4fv(this._uWorldMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uWorldMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);

Expand All @@ -106,7 +106,7 @@ export class DTXTrianglesNormalsRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export class DTXTrianglesOcclusionRenderer {

gl.uniform3fv(this._uCameraEyeRtc, rtcCameraEye);
gl.uniform1i(this._uRenderPass, renderPass);
gl.uniformMatrix4fv(this._uWorldMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uWorldMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);

gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);
Expand All @@ -121,7 +121,7 @@ export class DTXTrianglesOcclusionRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ export class DTXTrianglesPickDepthRenderer {
gl.uniform2f(this._uDrawingBufferSize, gl.drawingBufferWidth, gl.drawingBufferHeight);
gl.uniform1f(this._uPickZNear, frameCtx.pickZNear);
gl.uniform1f(this._uPickZFar, frameCtx.pickZFar);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, projMatrix);
if (scene.logarithmicDepthBufferEnabled) {
Expand All @@ -125,7 +125,7 @@ export class DTXTrianglesPickDepthRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export class DTXTrianglesPickMeshRenderer {
}
gl.uniform2fv(this._uPickClipPos, frameCtx.pickClipPos);
gl.uniform2f(this._uDrawingBufferSize, gl.drawingBufferWidth, gl.drawingBufferHeight);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, projMatrix);
gl.uniform3fv(this._uCameraEyeRtc, rtcCameraEye);
Expand All @@ -112,7 +112,7 @@ export class DTXTrianglesPickMeshRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export class DTXTrianglesPickNormalsFlatRenderer {
}
gl.uniform2fv(this._uPickClipPos, frameCtx.pickClipPos);
gl.uniform2f(this._uDrawingBufferSize, gl.drawingBufferWidth, gl.drawingBufferHeight);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, projMatrix);
gl.uniform3fv(this._uCameraEyeRtc, rtcCameraEye);
Expand All @@ -123,7 +123,7 @@ export class DTXTrianglesPickNormalsFlatRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export class DTXTrianglesPickNormalsRenderer {
const state = dataTextureLayer._state;
const textureState = state.textureState;
const origin = dataTextureLayer._state.origin;
const {rotationMatrixConjugate} = model;
const {rotationMatrix} = model;

const viewMatrix = frameCtx.pickViewMatrix || camera.viewMatrix;
const projMatrix = frameCtx.pickProjMatrix || camera.projMatrix;
Expand Down Expand Up @@ -94,7 +94,7 @@ export class DTXTrianglesPickNormalsRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ export class DTXTrianglesSilhouetteRenderer {

gl.uniform3fv(this._uCameraEyeRtc, rtcCameraEye);
gl.uniform1i(this._uRenderPass, renderPass);
gl.uniformMatrix4fv(this._uWorldMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uWorldMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);

Expand Down Expand Up @@ -138,7 +138,7 @@ export class DTXTrianglesSilhouetteRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ export class DTXTrianglesSnapInitRenderer {
gl.uniform3fv(this._uCoordinateScaler, coordinateScaler);
gl.uniform1i(this._uRenderPass, renderPass);
gl.uniform1i(this._uPickInvisible, frameCtx.pickInvisible);
gl.uniformMatrix4fv(this._uSceneWorldModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneWorldModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);
if (SNAPPING_LOG_DEPTH_BUF_ENABLED) {
Expand All @@ -132,7 +132,7 @@ export class DTXTrianglesSnapInitRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ export class DTXTrianglesSnapRenderer {
gl.uniform3fv(this._uCoordinateScaler, coordinateScaler);
gl.uniform1i(this._uRenderPass, renderPass);
gl.uniform1i(this._uPickInvisible, frameCtx.pickInvisible);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrixConjugate);
gl.uniformMatrix4fv(this._uSceneModelMatrix, false, rotationMatrix);
gl.uniformMatrix4fv(this._uViewMatrix, false, rtcViewMatrix);
gl.uniformMatrix4fv(this._uProjMatrix, false, camera.projMatrix);
if (SNAPPING_LOG_DEPTH_BUF_ENABLED) {
Expand All @@ -137,7 +137,7 @@ export class DTXTrianglesSnapRenderer {
if (active) {
const sectionPlane = sectionPlanes[sectionPlaneIndex];
if (origin) {
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrixConjugate);
const rtcSectionPlanePos = getPlaneRTCPos(sectionPlane.dist, sectionPlane.dir, origin, tempVec3a, rotationMatrix);
gl.uniform3fv(sectionPlaneUniforms.pos, rtcSectionPlanePos);
} else {
gl.uniform3fv(sectionPlaneUniforms.pos, sectionPlane.pos);
Expand Down
Loading

0 comments on commit 020d6c8

Please sign in to comment.