计算机图形学Web前端笔记-浏览器中心点转场景坐标理论及实现(two.js)
生活随笔
收集整理的這篇文章主要介紹了
计算机图形学Web前端笔记-浏览器中心点转场景坐标理论及实现(two.js)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現的功能是這樣的:
輸入window.mainPage.flyTo(xxx,?xxx)
后會在瀏覽器中心點畫個圓心,使用鼠標及滾輪滾動后。
再次運行:
前一篇博文已經說了3*3變化矩陣實現圖形放縮及平移,這里不再多談,此處只記錄下,將屏幕中心點坐標,轉換為two.js的場景坐標點:
這里的two.scene._matrix就是3*3的矩陣。
cirX?=?(屏幕坐標X點?-?水平位移)/?水平縮放
cirY?=?(屏幕坐標Y點?-?垂直位移)/?垂直縮放
?
源碼如下:
;import * as Two from "JS/two"; import * as $ from "JS/jquery";let two; let mouse; let isPressed = false; let originalPositionX = 0; let originalPositionY = 0; let map = new Map(); let rect;export function drawGraphic(){let elem = document.getElementById("draw-shapes");let params = {type: Two.Types['webgl'],fullscreen: true,autostart: true};two = new Two(params).appendTo(elem);mouse = new Two.ZUI(two.scene);mouse.addLimits(0.1, 10);let $stage = $(two.renderer.domElement);$stage.bind('mousewheel wheel', function(event){let e = event.originalEvent;e.stopPropagation();e.preventDefault();let dy = (e.wheelDeltaY || -e.deltaY) / 1000;mouse.zoomBy(dy, e.clientX, e.clientY);});$stage.bind('mouseup', function(event){isPressed = false;});$stage.bind('mouseout', function(event){isPressed = false;});$stage.bind('mousedown', function(event){isPressed = true;originalPositionX = event.clientX;originalPositionY = event.clientY;let x = event.clientX;let y = event.clientY;for(let value of map){let xOffset = value[0]._width / 2;let yOffset = value[0]._height / 2;let letX = ((value[0]._translation._x - xOffset) * (two.scene._matrix.elements[0]) + two.scene._matrix.elements[2]);let letY = ((value[0]._translation._y - yOffset) * (two.scene._matrix.elements[4]) + two.scene._matrix.elements[5]);let letWidth = value[0]._width * two.scene._matrix.elements[0];let letHeight = value[0]._height * two.scene._matrix.elements[4];if(x > letX &&y > letY &&x < letX + letWidth &&y < letY + letHeight){let r = Math.round(Math.random() * 255);let g = Math.round(Math.random() * 255);let b = Math.round(Math.random() * 255);let rgbStr = "rgb(" + r + "," + g + "," + b + ")";value[0].fill = rgbStr;break;}}});$stage.bind('mousemove', function(event){if(isPressed){let boolX = event.clientX - originalPositionX;let boolY = event.clientY - originalPositionY;mouse.graphicMove(boolX, boolY);originalPositionX = event.clientX;originalPositionY = event.clientY;}});createBtn(1001, 200, 200, 500, "red");createBtn(1002, 400, 400, 500, "green");createBtn(1003, 600, 600, 500, "blue");createBtn(1004, 800, 800, 500, "black");createBtn(1005, 1000, 1000, 500, "yellow");createBtn(1006, 400, 800, 500, "purple"); }function createBtn(id, x, y, weight, color) {rect = two.makeRectangle(x, y, 200, 200);rect.noStroke();rect.fill = color;rect.myId = id;map.set(rect, weight); }//計算當前屏幕圓心 對應的 圖形坐標 function getScreenOriginal(){let original = {x: 0,y: 0};original.x = two.width / 2;original.y = two.height / 2;console.log(two.scene._matrix.elements)//獲取水平位移及垂直位移//將瀏覽器上界面坐標轉換為two.js的場景坐標,也就是 cirX和cirY為當前界面中點的場景坐標let cirX = (original.x - two.scene._matrix.elements[2]) / two.scene._matrix.elements[0];let cirY = (original.y - two.scene._matrix.elements[5]) / two.scene._matrix.elements[4];console.log("cirX:" + cirX + " cirY:" + cirY);original.x = cirX;original.y = cirY;return original; }export function flyToPosition(x, y){let dot = getScreenOriginal();let circle = two.makeCircle(dot.x, dot.y, 10);circle.fill = "red"; }?
?
總結
以上是生活随笔為你收集整理的计算机图形学Web前端笔记-浏览器中心点转场景坐标理论及实现(two.js)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle笔记-使用sql命令插入cl
- 下一篇: Web前端笔记-two.js加载图片