3d上的深度比例错误
Wrong depth proportion on 3d
我为"跳棋"制作了一个游戏板。我想在它的轴上旋转一点(rotateX)。旋转120度后,我注意到深度不均衡。所有的正方形都是相同的大小,而越近的正方形看起来越大。我做错了什么?
这是我的代码:https://jsfiddle.net/w3bow2Lc/
//init board
var counter = 0;
for (var i = 0; i < 8; i++) {
var tr = $('<tr/>');
for (var j = 0; j < 8; j++) {
var td = $('<td/>').attr('class', 'square').attr('id', counter);
if (i % 2 == 0)
$(td).addClass('even');
else
$(td).addClass('odd');
tr.append(td);
counter++;
}
$('#board').append(tr);
}
//init white soldiers
//var soldier = '<svg height="40" width="40" class="soldier" draggable="true"><circle cx="20" cy="20" r="14" fill="white" stroke="black" stroke-width="1" ></circle></svg>';
var soldier = '<div class="soldier white" draggable="true"></div>';
var squares = $('#board td');
for (var i = 0; i < 24; i++) {
if ($(squares[i]).hasClass('even') && i % 2 == 0)
$(squares[i]).append($(soldier).attr('id', 'soldier' + i));
if ($(squares[i]).hasClass('odd') && i % 2 != 0)
$(squares[i]).append($(soldier).attr('id', 'soldier' + i));
}
//init black soldiers
//var soldier = '<svg height="40" width="40" class="soldier" draggable="true"><circle cx="20" cy="20" r="14" fill="black" stroke="white" stroke-width="1" ></circle></svg>';
var soldier = '<div class="soldier black" draggable="true"></div>';
var squares = $('#board td');
for (var i = 40; i < 64; i++) {
if ($(squares[i]).hasClass('even') && i % 2 == 0)
$(squares[i]).append($(soldier).attr('id', 'soldier' + i));
if ($(squares[i]).hasClass('odd') && i % 2 != 0)
$(squares[i]).append($(soldier).attr('id', 'soldier' + i));
}
#board {
margin: 50px 100px;
//border:15px solid gray;
transform-style: preserve-3d;
position: absolute;
transform: rotateX(120deg);
}
#board td {
<!-- outline: 2px solid white;
--> padding: 0;
}
.square {
width: 40px;
height: 40px;
padding: 0;
outline: 1px solid white;
}
.even:nth-child(2n+1) {
background-color: brown;
}
.even:nth-child(2n+2) {
background-color: BlanchedAlmond;
}
.odd:nth-child(2n+1) {
background-color: BlanchedAlmond;
}
.odd:nth-child(2n+2) {
background-color: brown;
}
.soldier {
cursor: pointer;
width: 30px;
height: 30px;
border-radius: 25px;
margin: auto;
}
.white {
background-color: white;
border: 1px solid black;
}
.black {
background-color: black;
border: 1px solid white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id='board'></table>
要定义三维空间,需要设置perspective
属性:
#board {
margin: 50px 100px;
transform-style: preserve-3d;
position: absolute;
transform: perspective(600px) rotateX(120deg);
}
这是一个更新的JSFiddle。
你可以把这个值想象成观众离物体有多远——这个值越大,透视效果就越微妙。下面是一个更详细的资源,解释如何使用此属性以及perspective-origin
属性。希望这能有所帮助!
您需要向父元素添加一个透视图。在这种情况下,只需在正文中添加一个800px的透视图。(最好是用一个新的元素包裹木板,并将视角应用于此)
body{
perspective:800px;
}
您还需要将转换从transform: rotateX(120deg);
更改为transform: rotateX(-120deg);
此处的工作示例
https://jsfiddle.net/Jcoulterdesign/Lfwewzcn/2/
你可以调整透视量和旋转,直到你得到你想要的确切外观,但这将解决深度问题。
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 我如何修复包含在captcha的addthis中的错误
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- CKFinder 3为所选文件返回错误的URL
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 相位器状态未捕获参考错误
- /undefined在我的404错误日志中多次出现
- Javascript未捕获语法错误意外的标识符错误
- 3d上的深度比例错误
- 深度嵌套的backbone.js对象会导致错误
- 猫鼬-自引用深度填充错误
- 深度等于的错误