JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://jsc3d.googlecode.com/svn/trunk/jsc3d/jsc3d.js"></script>
<canvas id="cv" height="200" width="300" style="border:1px solid #000;"></canvas>
JavaScript
var canvas, viewer, scene, groundPlane;
function onViewerMouseDown(x, y, button, depth, mesh) {
viewer.buttonStates[button] = true;
viewer.mouseX = x;
viewer.mouseY = y;
}
function onViewerMouseUp(x, y, button, depth, mesh) {
viewer.buttonStates[button] = false;
}
function onViewerMouseMove(x, y, button, depth, mesh) {
var isDragging = viewer.buttonStates[0] == true;
if (isDragging) {
var rotY = (x - viewer.mouseX) * 360 / viewer.canvas.height;
// original:
// viewer.rotMatrix.rotateAboutYAxis(rotY);
var rotMat = new JSC3D.Matrix3x4;
rotMat.rotateAboutYAxis(rotY);
viewer.rotMatrix.multiply(rotMat);
viewer.mouseX = x;
viewer.mouseY = y;
viewer.update();
}
}
canvas = document.getElementById('cv');
viewer = new JSC3D.Viewer(canvas);
viewer.setParameter('InitRotationX', 25);
viewer.setParameter('InitRotationY', 10);
viewer.setParameter('InitRotationZ', 5);
viewer.setParameter('Renderer', 'canvas');
viewer.init();
viewer.isDefaultInputHandlerEnabled = false;
viewer.onmousedown = onViewerMouseDown;
viewer.onmouseup = onViewerMouseUp;
viewer.onmousemove = onViewerMouseMove;
scene = viewer.getScene();
scene = new JSC3D.Scene;
scene.init();
scene.aabb = new JSC3D.AABB();
scene.aabb.maxX = 50;
scene.aabb.maxY = 200;
scene.aabb.maxZ = 50;
scene.aabb.minX = -50;
scene.aabb.minY = 0;
scene.aabb.minZ = -50;
makeGroundPlane(scene, 0x0000ff);
viewer.replaceScene(scene);
scene = viewer.getScene();
scene.calcAABB();
viewer.update();
function makeGroundPlane(scene, color) {
var sceneBox = scene.aabb;
var planeCenter = sceneBox.center();
var planeHalfSize = 0.5 * Math.max(sceneBox.maxX - sceneBox.minX, sceneBox.maxZ - sceneBox.minZ);
var planeMinX = planeCenter[0] - planeHalfSize;
var planeMinZ = planeCenter[2] - planeHalfSize;
var planeY = sceneBox.minY - 0.01 * (sceneBox.maxY - sceneBox.minY);
var numOfGridsPerDimension = 10;
var sizePerGrid = 2 * planeHalfSize / numOfGridsPerDimension;
groundPlane =...