かなり長い間、私は、マウスに追随してシーン内の要素を拡大する拡大鏡効果を作成する方法を見つけようとしてきました。ライフルスコープのようなもの。どのアイデアをどこから始めるのですか?three.jsまたはbabylon.jsの3Dシーンの要素を拡大するために拡大鏡効果を作成するにはどうすればよいですか?
答えて
当然、質問を策定した後、解決策が私に起こりました。残念ながら、私が探していたネイティブのbabylon.jsソリューションではありませんが、まだ動作しています。 divsとjqueryを使用して、3D空間内の平面上のマテリアルとして使用されるソースイメージの拡大を可能にします。 トリックは、ターゲット上のマウスの位置(画像の高さと幅のパーセンテージに変換されている)を使用して、そのパーセンテージに従って拡大されたdivをガラス内で移動させる「オーバーターゲット」機能です。 私はデータベースから画像を取得し、そのサイズを計算するためにPHPを使用しました。なぜなら、それがプロジェクトの構造であるからです。しかし、あなたはどんな画像でも始めて、もちろん手動でhtとwdを入力することができます。
はここでデモです:http://64.78.15.229/eyemap3Djs/magnify.html
私はこれが誰かにいくつかの使用であると思います。おそらく、それはゲームやそれに類するもののライフルスコープとして使用することができます。
<?php
$studyID= $_GET['studyID'];
$myServer = "[your server]";
$myUser = "[you]";
$myPass = "[password]";
$myDB = "[db]";
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");
$query = "SELECT * FROM [your table] WHERE id=".$studyID;
$result = mssql_query($query);
$numRows = mssql_num_rows($result);
while($row = mssql_fetch_array($result))
{
$imageFile= $row["imageFile"];
$mag= $row["mag"];
}
mssql_close($dbhandle);
$size = getimagesize($imageFile);
$ht=$size[1];
$wd=$size[0];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8"/>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
<style>
html, body {
font-family: Verdana, Geneva, sans-serif;
font-size: 12px;
color: #333;
width : 100%;
height : 98%;
margin : 0;
padding : 0;
}
#renderCanvas {
width : 100%;
height : 100%;
touch-action: none;
z-index: 100;
}
#glass{
position:absolute;
overflow:hidden;
border:1px solid black;
border-radius: 50%;
padding-top: 0px;
padding-right: 0px;
padding-bottom: 0px;
padding-left: 0px;
pointer-events: none;
z-index: 100;
display:none;
}
#legend{
position:absolute;
font-size:10px;
font-family:Verdana, Geneva, sans-serif;
top:10px;
left:10px;
height:50px;
width:60px;
background-color:white;
z-index: 200;
}
</style>
<title>Magnifier</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="js/babylon.2.4.js"></script>
<script>
var studyID=<?php echo $studyID; ?>;
var imageFile="<?php echo $imageFile; ?>";
var mag=<?php echo $mag; ?>;
var picW=<?php echo $wd; ?>;
var picH=<?php echo $ht; ?>;
picW=picW*mag;
picH=picH*mag;
var percentage=picW/picH;
var svgW=1024;
var svgH=(1024/picW)*picH;
var glassH=200;
var glassW=200;
var scene;
var camera;
var cameraz=0;
var glassOff=false;
var leftPosition="";
var rightPosition="";
$(document).ready(function(){
$("#targetImg").attr({'src':imageFile});
$("#targetImg").css({'height':picH, 'width':picW});
});
window.addEventListener('DOMContentLoaded', function(){
var canvas = document.getElementById('renderCanvas');
var engine = new BABYLON.Engine(canvas, true);
var createScene = function() {
var scene = new BABYLON.Scene(engine);
var light = new BABYLON.PointLight("Omni", new BABYLON.Vector3(-25, 49, -40), scene);
this.angularSensibility = 5000;
cameraz=-1*(picW/140);
camera = new BABYLON.FreeCamera("FreeCamera", new BABYLON.Vector3(-0.6, -4, cameraz), scene);
camera.keysUp = [84]; // T
camera.keysDown = [66]; // B
camera.keysLeft = [70]; // L
camera.keysRight = [72]; // H
camera.angularSensibility = this.angularSensibility;
camera.attachControl(canvas, true);
//Ground
var ground = BABYLON.Mesh.CreatePlane("ground", 200.0, scene);
ground.material = new BABYLON.StandardMaterial("groundMat", scene);
ground.material.diffuseTexture = new BABYLON.Texture("textures/wallTile.jpg", scene);
ground.material.diffuseTexture.hasAlpha = true;
//ground.material.backFaceCulling = false;
ground.position = new BABYLON.Vector3(5, -10, -15);
ground.rotation = new BABYLON.Vector3(Math.PI/2, 0, 0);
//target
var target = new BABYLON.Mesh.CreatePlane("target", 10, scene);
target.scaling.x = percentage;
target.material = new BABYLON.StandardMaterial("Mat", scene);
target.material.diffuseTexture = new BABYLON.Texture("<?php echo $imageFile; ?>", scene);
target.material.emissiveColor = new BABYLON.Color3(1, 1, 1); // self-illuminate
target.material.diffuseTexture.hasAlpha = true;
target.position = new BABYLON.Vector3(0, -5, -5);
scene.gravity = new BABYLON.Vector3(0, -0.9, 0);
scene.collisionsEnabled = true;
camera.checkCollisions = true;
camera.applyGravity = true;
camera.ellipsoid = new BABYLON.Vector3(1, 3, 1);
ground.checkCollisions = true;
target.checkCollisions = true;
return scene;
}
scene = createScene();
engine.runRenderLoop(function(){
scene.render();
});
window.addEventListener('resize', function(){
engine.resize();
});
window.addEventListener("mousemove", function (e) {
if(glassOff==false){
var pickResult = scene.pick(scene.pointerX, scene.pointerY);
if (pickResult.hit) {
var w=percentage*10;
var h = (pickResult.pickedPoint.x).toFixed(4);
var v = (pickResult.pickedPoint.y).toFixed(4);
var x=0;
var y=0;
y=v*-1;
percenty=(y/10).toFixed(4);
x=Number(((w/2))+(1*h)).toFixed(4);
percentx=(x/w).toFixed(4);
if(pickResult.pickedMesh.name=="target"){
$("#glass").show();
overtarget(e,percentx,percenty);
overtarget=true;
}else{
$("#glass").hide();
overtarget=false;
}
}
}
});
});
function overtarget(e,percentx,percenty){
$('#glass').css({
height:glassH,
width: glassW,
left: e.pageX-glassW/2,
top: e.pageY-glassH/2
});
var picX = (percentx * picW) * -1;
var picY = (percenty * picH) * -1;
$('#targetImg').css({
'margin-left': picX+glassW/2,
'margin-top': picY+glassH/2
});
}
</script>
</head>
<body>
<canvas id="renderCanvas"></canvas>
<div id="glass"><img id="targetImg" src=""/></div>
<div id="legend">T=forward<BR />B=back<BR />F=left<BR />H=right</div>
</body>`
</html>
たぶん、いくつかのスクリーンショットは、あなたの答えにクールになる要求として –
スクリーンショットが追加 – user2016210
- 1. Android:ICSで拡大鏡を無効にするにはどうすればよいですか?
- 2. アンドロイドで拡大鏡を作成するには
- 3. NSViewまたは拡大鏡を使用して拡大/縮小する
- 4. iOSで画像「拡大」効果を生成するにはどうすればよいですか?
- 5. ウェブを120%に拡大し、フォントサイズを150%に拡大するにはどうすればよいですか?
- 6. webviewの拡大鏡機能をキャンセルするにはどうすればよいですか?
- 7. UITextviewで拡大鏡を無効にする
- 8. メタタグを拡大表示するにはどうすればよいですか?
- 9. スニペットを拡大表示するにはどうすればよいですか?
- 10. 拡大鏡ウィンドウを移動する
- 11. Xcodeのフォントサイズを拡大するにはどうすればいいですか
- 12. geodjangoでポリゴンを拡大または縮小するにはどうすればよいですか?
- 13. Qualtricsで拡大鏡を使用するには?
- 14. Windowsの拡大鏡を呼び出す
- 15. three.jsの一連の3Dポイントから3Dポリゴンを作成するにはどうすればよいですか?
- 16. UITextViewの下に拡大鏡が表示されないようにします
- 17. テキストiOSデバイスの拡大鏡
- 18. Tkinterキャンバスにインポートされた画像を拡大するにはどうすればよいですか?
- 19. ユーザーインターフェイスまたはフォントを拡大/拡大するmaya 2017
- 20. ブートストラップ画像全体を拡大するために画像を拡大する
- 21. Three.js- 3Dシーンでのカメラの表示を制限するにはどうすればよいですか?
- 22. グラフを拡大縮小して拡大表示した後、mxgraphでセルの幅と高さを取得するにはどうすればよいですか?
- 23. BoxLayoutのJFormattedTextFieldを拡大しないようにするにはどうすればよいですか?
- 24. クリックしたときにマーカーを拡大するにはどうすればよいですか?
- 25. このコードをさまざまなウィンドウサイズに拡大するにはどうすればよいですか?
- 26. 図のためのJavaScript拡大鏡 - ブラウザ間の互換性
- 27. 三角形を拡大/拡大/拡大/拡大するアルゴリズム
- 28. Matplotlib最大限に拡大するためのset_xlim()/ set_ylim()またはset_xbound()/ set_ybound()
- 29. リーフレット拡大鏡プラグイン - スイッチングレイヤー
- 30. ブラウザの拡大率をどのようにするには?
私が知っているすべてのプラグイン、画像と仕事..... – Hackerman