是否可以在html5畫布中進行透視圖像轉換?我現在正在使用EaselJS,無法找到適合我需求的解決方案。EaselJS透視圖像轉換
2
A
回答
2
我還沒有嘗試過easel.js,但是每個圖像轉換都是通過矩陣運算完成的:平移,旋轉,傾斜等等。在easel.js源代碼上有一個Matrix2D
類,它:http://www.createjs.com/Docs/EaselJS/Matrix2D.html。對於透視轉換,您需要使用rotation
,scaling
和skewing
。你只需要玩數值和測試哪種最適合你的需求。
3
要實現透視轉換,您需要一個選項來轉換3D對象,但就CreateJS/EaselJS使用2D轉換矩陣而言,您無法做到。
但是,你可以實現類似的外觀&感覺如果你將在遊戲中使用傾斜和比例。
比如我做了平整度卡的舉動,這給到卡的透視圖:
var aspectRatio = 1.777777777777778;
var canvasHeight, canvasWidth, canvasTop, canvasLeft;
var graphicsLoader;
var stage, frameTick;
var calculateSize = function() {
if ((window.innerWidth/window.innerHeight) >= aspectRatio) {
canvasHeight = window.innerHeight;
canvasWidth = canvasHeight * aspectRatio;
canvasTop = 0;
canvasLeft = (window.innerWidth - canvasWidth)/2;
} else {
canvasWidth = window.innerWidth;
canvasHeight = canvasWidth/aspectRatio;
canvasLeft = 0;
canvasTop = (window.innerHeight - canvasHeight)/2;
}
var gameCanvas = document.getElementById('exampleScene');
gameCanvas.style.width = canvasWidth + "px";
gameCanvas.style.height = canvasHeight + "px";
gameCanvas.style.top = canvasTop + "px";
gameCanvas.style.left = canvasLeft + "px";
};
//load graphics
graphicsManifet = [
{id: "flatness", src: "https://i.imgur.com/6E1NKLa.png"},
{id: "card", src: "https://i.imgur.com/CXhpG1X.png"},
];
graphicsLoader = new createjs.LoadQueue(true);
graphicsLoader.loadManifest(graphicsManifet);
graphicsLoader.on("complete", function() {
initScene();
}, this);
function initScene() {
stage = new createjs.Stage("exampleScene");
createjs.Ticker.on("tick", frameTick);
//draw
var flatness = new createjs.Bitmap(graphicsLoader.getResult("flatness"));
flatness.x = 200;
var card = new createjs.Bitmap(graphicsLoader.getResult("card"));
card.alpha = 0;
stage.addChild(
flatness,
card
);
var animationTime = intervalTime = 800;
createjs.Tween.get()
.wait(0)
.call(function() {
movePerspective(card, 280, 10, 0);
card.alpha = 1;
})
.wait(intervalTime)
.call(function() {
movePerspective(card, 1530, 10, animationTime);
card.alpha = 1;
})
.wait(intervalTime)
.call(function() {
movePerspective(card, 1570, 680, animationTime);
card.alpha = 1;
})
.wait(intervalTime)
.call(function() {
movePerspective(card, 230, 680, animationTime);
card.alpha = 1;
})
.wait(intervalTime)
.call(function() {
movePerspective(card, 280, 10, animationTime);
card.alpha = 1;
}).loop = true;
};
function frameTick(e) {
stage.update(e);
}
movePerspective = function(object, x, y, time) {
typeof time != "number" ? time = 1000 : "";
var scales = {
y: y,
scaleX : 0.887073905 + y*0.000142045, // this numbers I calculated depending
scaleY : 0.761221624 + y*0.000284091 // on perspective angle of flatness board
};
var skAspect = 0.00673453853 - y * 0.000000654928977;
var cardSkewX = (6.5991 - skAspect * x);
var pointskew = {
x: x,
skewX: cardSkewX
};
createjs.Tween.get(object).to({
x: pointskew.x,
y: scales.y,
skewX: pointskew.skewX,
scaleX: scales.scaleX,
scaleY: scales.scaleY
}, time, createjs.Ease.getPowInOut(3));
};
window.onload = function() {
window.addEventListener("resize", function() {
calculateSize();
});
};
//set framerate
createjs.Ticker.timingMode = createjs.Ticker.RAF_SYNCHED;
createjs.Ticker.framerate = 60;
$(function() {
calculateSize();
});
#exampleScene {
position: absolute;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.createjs.com/createjs-2015.11.26.min.js"></script>
<canvas id="exampleScene" width="1920" height="1080"></canvas>
+0
需要幫助計算平直度板的透視角度 – 2017-10-27 13:07:59
相關問題
- 1. 透視圖/轉換矩陣
- 2. 透視轉換
- 3. CSS透視轉換
- 4. 將邊框應用於CSS轉換透視圖像
- 5. 將jpeg圖像轉換爲透明PNG圖像
- 6. 如何將圖像轉換爲java中的透明圖像
- 7. Django將url轉換爲圖像/視圖
- 8. 位圖轉換 - 從B&W源創建透明+黑色圖像
- 9. 測試圖像/視頻轉換類
- 10. c + +轉換/播放視頻和圖像
- 11. FFMpeg:將圖像轉換爲視頻
- 12. FFMPEG視頻圖像批量轉換
- 13. 將PNG圖像轉換爲視頻
- 14. 將圖像轉換爲視頻
- 15. FFMPEG圖像轉換效果視頻
- 16. 圖像轉換
- 17. 轉換圖像
- 18. 圖像轉換
- 19. 圖像轉換
- 20. 圖像處理 - 在將圖像保存爲jpg之前轉換透明像素
- 21. 在火狐瀏覽器中使用CSS轉換透視圖壞像素
- 22. 轉換透視表數據幀
- 23. 如何特別轉換透視原點?
- 24. 使用GD進行透視轉換
- 25. 轉換數據幀(數據透視)
- 26. 轉換列使用數據透視
- 27. 透視投影 - 如何轉換座標
- 28. 使用CATransform3D透視的摺紙轉換
- 29. 曲線透視:將3D轉換爲2D
- 30. 透視變換
到目前爲止,似乎只有2D仿射變換在大多數實施瀏覽器,所以你可以得到一些等軸測視角。對於真正的3D轉換,看起來我們需要等待一段時間或跳入WebGL。請參閱http://www.w3schools.com/cssref/css3_pr_transform.asp和http://blog.makezine.com/2009/02/23/projective-transformation-and-persp/ – 2012-11-08 13:54:16