HTML5 변환 3차원 큐브는 막다른 골목 없이 360도 3차원 회전 효과를 구현합니다_html5 튜토리얼 기술
변형의 본질을 더 잘 파악하기 위해 우리는 막다른 골목 없이 360도 3차원 회전 효과를 얻을 수 있는 3차원 큐브 모델을 완성하기로 결정했습니다.
그런데 회전할 때 각 면의 보기 순서를 결정하기가 어렵고 아직 완벽하게 해결되지 않은 부분에 대해 누군가 답변해 주셨으면 좋겠습니다!
소스코드는 직접 기여하였습니다:
<script> <br>/**<br>* 이 버전에는 다음과 같은 문제가 있습니다. <br>* 3차원 회전의 zIndex 계산에 문제가 있습니다. <br>* 또한 다양한 모델이 부족하며 일반적인 모델에는 선, 표면, 원뿔, 구, 타원체 등 <br>*/ <br>함수 cuboidModel(left_init,top_init,long_init,width_init,height_init) <br>{ <br>// ///////////////////////////////////// <br>//개인 변수 초기화<br>/ ////////////////////////////////////// <br>//직육면체 초기화 위치 및 크기<br>var left = left_init; <br>var long = long_init; <br>var height = height_init; 변환 각도, 기본값은 0입니다. <br>varrotateX = 0; <br>varrotateY = 0;<br>var zIndex = 0; 직육면체의 측면 <br>var div_behind; <br>var div_right <br>var div_bottom; ///////// ////////////////////////// <br>//직육면체 초기화<br>/// ////////// /////////////////////////// <br>//초기값을 기준으로 6개의 면을 구성합니다. 위치. <br>this.init = function() { <br>//앞면 div 만들기 <br>div_front = document.createElement("div") <br>div_front.className = "cuboid_side_div" <br>div_front.innerHTML = "div 앞"; <br>div_front.style.BackgroundColor="#f1b2b2"; <br>document.body.appendChild(div_front) <br>//div 뒤에 만들기 <br>div_behind = document.createElement(" div"); <br>div_behind.className = "cuboid_side_div"; <br>div_behind.innerHTML = "div 뒤"; <br>div_behind.style.BackgroundColor="#bd91eb"; <br>document.body.appendChild( div_behind);//왼쪽 div 만들기 <br>div_left = document.createElement("div"); <br>div_left.className = "cuboid_side_div" <br>div_left.innerHTML = "div left"; >div_left.style.groundColor="#64a3c3"; <br>document.body.appendChild(div_left) <br>//오른쪽 div 만들기 <br>div_right = document.createElement("div") <br> .className = "cuboid_side_div"; <br>div_right.innerHTML = "div 오른쪽"; <br>div_right.style.BackgroundColor="#78e797"; <br>document.body.appendChild(div_right)// 상단 div 만들기 <br>div_top = document.createElement("div"); <br>div_top.className = "cuboid_side_div"; <br>div_top.innerHTML = "div top" <br>div_top.style.BackgroundColor=" #e7db78"; <br>document.body.appendChild(div_top); <br>//하단 div 생성 <br>div_bottom = document.createElement("div"); <br>div_bottom.className = "cuboid_side_div"; <br>div_bottom.innerHTML = "div 하단"; <br>div_bottom.style.BackgroundColor="#e79c78"; <br>document.body.appendChild(div_bottom) <br>this.refresh() <br>} ; <br>//Redraw<br>this.refresh = function() <br>{ <br>//div_front 스타일 정의 <br>div_front.style.left = left "px" <br>div_front.style; top = 상단 "px"; <br>div_front.style.width = 긴 "px"; <br>div_front.style.height = 높이 "px" <br>div_front.style.webkitTransformOrigin = "50% 50%" ((-1)*너비 / 2) "px"; <br>//div_behind 스타일 정의<br>div_behind.style.left = 왼쪽 "px"; <br>div_behind.style.top = 상단 "px" ; <br>div_behind.style.width = div_front.style.width; <br>div_behind.style.height = div_front.style.height; <br>div_behind.style.webkitTransformOrigin = "50% 50% " ((-1 ) *너비 / 2) "px"; <br>//div_left 스타일 정의 <br>div_left.style.left = 왼쪽 ((긴 - 높이) / 2) "px" <br>div_left.style.top = 상단 ((높이 - 너비) / 2) "px"; <br>div_left.style.width = 높이 "px"; <br>div_left.style.height = 너비 "px" <br>div_left.style.webkitTransformOrigin "50% 50%" ((-1) * long /2 ) "px"; <br>//div_right 스타일 정의<br>div_right.style.left = div_left.style.left <br>div_right.style; top = div_left.style.top; <br>div_right.style.width = div_left.style.width; <br>div_right.style.height = div_left.style.height; <br>div_right.style.webkitTransformOrigin = "50% 50% " ((-1) * 긴 /2 ) "px"; <br>//div_top 스타일 정의<br>div_top.style.left = 왼쪽 "px"; <br>div_top.style.top = 상단( (높이 - 너비)/ 2) "px"; <br>div_top.style.width = 긴 "px"; <br>div_top.style.height = 너비 "px" <br>div_top.style.webkitTransformOrigin = " 50% 50% " ((-1) * 높이 /2 ) "px"; <br>//div_bottom 스타일 정의 <br>div_bottom.style.left = div_top.style.left; <br>div_bottom.style.top = div_top.style.top; <br>div_bottom.style.width = div_top.style.width; <br>div_bottom.style.height = div_top.style.height <br>div_bottom.style.webkitTransformOrigin; % " ((-1) * 높이 /2 ) "px"; <br>this.rotate(rotateX,rotateY,rotateZ); <br>}; <br>//큐브 회전<br>this.rotate = function(x,y,z) { <br>rotateX = x; <br>rotateY = y; <br>rotateZ = z <br>varrotateX_front =rotateX;var RotateY_front = 회전Y; <br>var RotateZ_front = 회전Z; varrotateY_behind=rotateY_front *(-1); <br>var RotateZ_behind = RotateZ_front * (-1); <br>varrotateX_top =rotateX_front 90; <br>varrotateY_top=rotateZ_front; <br>varrotateZ_top =rotateY_front *(-1); <br>varrotateX_bottom=rotateX_front-90; <br>var RotateY_bottom = RotateZ_front * (-1); <br>varrotateZ_bottom=rotateY_front; <br>varrotateX_left =rotateX_front 90; <br>varrotateY_left =rotateZ_front - 90; <br>varrotateZ_left =rotateY_front *(-1); <br>varrotateX_right=rotateX_front 90; <br>varrotateY_right=rotateZ_front 90; <br>varrotateZ_right=rotateY_front *(-1); <br>//判断各个면적 z轴显示顺序 <br>var zIndex_front_default = -1; <br>var zIndex_behind_default = -6; <br>var zIndex_top_default = -5; <br>var zIndex_bottom_default = -2; <br>var zIndex_left_default = -4; <br>var zIndex_right_default = -3; <br>var xI = (rotateX_front / 90) % 4; <br>var yI = (rotateY_front / 90) % 4; <br>var zI = (rotateZ_front / 90) % 4; <br>var zIndex_matrix = new Array(); <br>for(var i = 0; i < 3;i ) { <br />zIndex_matrix.push(new Array()); <br />} <br />zIndex_matrix = [["","zIndex_top",""], <br />["zIndex_left","zIndex_front","zIndex_right"], <br />["","zIndex_bottom", ""]]; <br />var zIndex_matrix_behind = "zIndex_behind"; <br />//计算zIndex <br />if((xI >= 0 && xI < 1) ||(xI >= -4 && xI < -3)) { <br />} else if(( xI >= 1 && xI < 2) ||(xI >= -3 && xI < -2)) { <br />var zIndex_matrix_tmp = zIndex_matrix[0][1]; <br />zIndex_matrix[0][1] = zIndex_matrix[1][1]; <br />zIndex_matrix[1][1] = zIndex_matrix[1][2]; <br />zIndex_matrix[1][2] = zIndex_matrix_behind; <br />zIndex_matrix_behind = zIndex_matrix_tmp; <br />} else if((xI >= 2 && xI < 3) ||(xI >= -2 && xI < -1)) { <br />var zIndex_matrix_tmp = zIndex_matrix[0][1] ; <br />zIndex_matrix[0][1] = zIndex_matrix[2][1]; <br />zIndex_matrix[2][1] = zIndex_matrix_tmp; <br />zIndex_matrix_tmp = zIndex_matrix[1][1]; <br />zIndex_matrix[1][1] = zIndex_matrix_behind; <br />zIndex_matrix_behind = zIndex_matrix_tmp; <br />} else if((xI >= 3 && xI < 4) ||(xI >= -1 && xI < 0)) { <br />var zIndex_matrix_tmp = zIndex_matrix[0][1]; <br />zIndex_matrix[0][1] = zIndex_matrix_behind; <br />zIndex_matrix_behind = zIndex_matrix[2][1]; <br />zIndex_matrix[2][1] = zIndex_matrix[1][1]; <br />zIndex_matrix[1][1] = zIndex_matrix_tmp; <br />} <br />if((yI > 0 && yI <= 1) ||(yI > -4 && yI <= -3)) { <br />var zIndex_matrix_tmp = zIndex_matrix[1][ 0]; <br />zIndex_matrix[1][0] = zIndex_matrix_behind; <br />zIndex_matrix_behind = zIndex_matrix[1][2]; <br />zIndex_matrix[1][2] = zIndex_matrix[1][1]; <br />zIndex_matrix[1][1] = zIndex_matrix_tmp; <br />} else if((yI > 1 && yI <= 2) ||(yI > -3 && yI <= -2)) { <br />var zIndex_matrix_tmp = zIndex_matrix[1][0] ; <br />zIndex_matrix[1][0] = zIndex_matrix[1][2]; <br />zIndex_matrix[1][2] = zIndex_matrix_tmp; <br />zIndex_matrix_tmp = zIndex_matrix[1][1]; <br />zIndex_matrix[1][1] = zIndex_matrix_behind; <br />zIndex_matrix_behind = zIndex_matrix_tmp; <br />} else if((yI > 2 && yI <= 3) ||(yI > -2 && yI <= -1)) { <br />var zIndex_matrix_tmp = zIndex_matrix[1][0] ; <br />zIndex_matrix[1][0] = zIndex_matrix[1][1]; <br />zIndex_matrix[1][1] = zIndex_matrix[1][2]; <br />zIndex_matrix[1][2] = zIndex_matrix_behind; <br />zIndex_matrix_behind = zIndex_matrix_tmp; <br />} else if((yI > 3 && yI <= 4) ||(yI > -1 && yI <= 0)) { <br />} <br /><br />if((zI > 0 && zI <= 1) ||(zI > -4 && zI <= -3)) { <br />var zIndex_matrix_tmp = zIndex_matrix[0][1]; <br />zIndex_matrix[0][1] = zIndex_matrix[1][0]; <br />zIndex_matrix[1][0] = zIndex_matrix[2][1]; <br />zIndex_matrix[2][1] = zIndex_matrix[1][2]; <br />zIndex_matrix[1][2] = zIndex_matrix_tmp; <br />} else if((zI > 1 && zI <= 2) ||(zI > -3 && zI <= -2)) { <br />var zIndex_matrix_tmp = zIndex_matrix[0][1] ; <br />zIndex_matrix[0][1] = zIndex_matrix[2][1]; <br />zIndex_matrix[2][1] = zIndex_matrix_tmp; <br />zIndex_matrix_tmp = zIndex_matrix[1][0]; <br />zIndex_matrix[1][0] = zIndex_matrix[1][2]; <br />zIndex_matrix[1][2] = zIndex_matrix_tmp; <br />} else if((zI > 2 && zI <= 3) ||(zI > -2 && zI <= -1)) { <br />var zIndex_matrix_tmp = zIndex_matrix[0][1] ; <br />zIndex_matrix[0][1] = zIndex_matrix[1][2]; <br />zIndex_matrix[1][2] = zIndex_matrix[2][1]; <br />zIndex_matrix[2][1] = zIndex_matrix[1][0]; <br />zIndex_matrix[1][0] = zIndex_matrix_tmp; <br />} else if((zI > 3 && zI <= 4) ||(zI > -1 && zI <= 0)) { <br />} <br />//赋值zIndex <br /> eval(zIndex_matrix[0][1] "=" zIndex_top_default); <br />eval(zIndex_matrix[1][0] "=" zIndex_left_default); <br />eval(zIndex_matrix[1][1] "=" zIndex_front_default); <br />eval(zIndex_matrix[1][2] "=" zIndex_right_default); <br />eval(zIndex_matrix[2][1] "=" zIndex_bottom_default); <br />eval(zIndex_matrix_behind "=" zIndex_behind_default); <br />//front <br />varTransform_rotate_front = "perspective(500px)rotateX("rotateX_front <br />"deg)rotateY("rotateY_front<br />"deg)rotateZ("rotateZ_front "deg)"; <br />div_front.style.webkitTransform = 변환_회전_전면; <br />div_front.style.zIndex = zIndex_front; <br />//뒤 <br />varTransform_rotate_behind = "원근(500px)rotateX("rotateX_behind<br />"deg)rotateY("rotateY_behind<br />"deg)rotateZ("rotateZ_behind "deg)"; <br />div_behind.style.webkitTransform =Transform_rotate_behind; <br />div_behind.style.zIndex = zIndex_behind; <br />//left <br />varTransform_rotate_left = "perspective(500px)rotateX("rotateX_left <br />"deg)rotateZ("rotateZ_left<br />"deg)rotateY("rotateY_left "deg)"; <br />div_left.style.webkitTransform = 변환_회전_왼쪽; <br />div_left.style.zIndex = zIndex_left; <br />//right <br />varTransform_rotate_right = "perspective(500px)rotateX("rotateX_right<br />"deg)rotateZ("rotateZ_right<br />"deg)rotateY("rotateY_right "deg)"; <br />div_right.style.webkitTransform = 변환_회전_오른쪽; <br />div_right.style.zIndex = zIndex_right; <br />//top <br />varTransform_rotate_top = "perspective(500px)rotateX("rotateX_top <br />"deg)rotateZ("rotateZ_top<br />"deg)rotateY("rotateY_top "deg)"; <br />div_top.style.webkitTransform =Transform_rotate_top; <br />div_top.style.zIndex = zIndex_top; <br />//bottom <br />varTransform_rotate_bottom = "perspective(500px)rotateX("rotateX_bottom <br />"deg)rotateZ("rotateZ_bottom<br />"deg)rotateY("rotateY_bottom "deg)"; <br />div_bottom.style.webkitTransform =Transform_rotate_bottom; <br />div_bottom.style.zIndex = zIndex_bottom; <br />}; <br />//중요한 방법, 宽, 高 <br />this.resize = function(new_long, new_width, new_height) <br />{ <br />long = new_long; <br />너비 = new_width; <br />높이 = new_height; <br />this.refresh(); <br />}; <br />//중요한 투자 방식 <br />this.move = function(new_left,new_top) { <br />top = new_top; <br />왼쪽 = new_left; <br />this.refresh(); <br />}; <br />} <br /><br />함수 변환() { <br />cuboid.resize(parseInt(document.getElementById("long").value), <br />parseInt(document.getElementById("width"). 값), <br />parseInt(document.getElementById("height").value)); <br />cuboid.move(parseInt(document.getElementById("left").value), <br />parseInt(document.getElementById("top").value)); <br />cuboid.rotate(parseInt(document.getElementById("rotatex").value), <br />parseInt(document.getElementById("rotatey").value), <br />parseInt(document.getElementById("rotatez" ).값)); <br />//cuboid.refresh(); <br />} <br /></script>
왼쪽:px
상단:< ;/input>px
긴:px
너비:px
높이:px
rotateX: deg
rotateY: deg
rotateZ: deg
<스크립트>
var cuboid = new cuboidModel(parseInt(document.getElementById("left").value),
parseInt(document.getElementById("top").value),
parseInt(document.getElementById(" long").value),
parseInt(document.getElementById("width").value),
parseInt(document.getElementById("height").value));
cuboid.init();

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











CSS를 사용하여 요소의 회전 배경 이미지 애니메이션 효과를 구현하는 방법 배경 이미지 애니메이션 효과는 웹 페이지의 시각적 매력과 사용자 경험을 향상시킬 수 있습니다. 이 문서에서는 CSS를 사용하여 요소의 회전 배경 애니메이션 효과를 얻는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저 배경 이미지를 준비해야 합니다. 배경 이미지는 태양 사진이나 선풍기 등 원하는 사진이면 됩니다. 이미지를 저장하고 이름을 "bg.png"로 지정합니다. 다음으로, HTML 파일을 생성하고 파일에 div 요소를 추가하여 다음과 같이 설정합니다.

Vue에서 이미지를 압축하고 형식을 지정하는 방법은 무엇입니까? 프런트 엔드 개발에서는 이미지를 압축하고 형식을 지정해야 하는 경우가 종종 있습니다. 특히 모바일 개발에서는 페이지 로딩 속도를 높이고 사용자 트래픽을 절약하기 위해 이미지를 압축하고 포맷하는 것이 중요합니다. Vue 프레임워크에서는 일부 도구 라이브러리를 사용하여 이미지를 압축하고 형식을 지정할 수 있습니다. 압축기.js 라이브러리를 사용한 압축 압축기.js는 이미지 압축을 위한 JavaS입니다.

CSS3D 보기 속성 해석: 변환 및 관점, 특정 코드 예제가 필요합니다. 소개: 현대 웹 디자인에서 3D 효과는 매우 인기 있는 요소가 되었습니다. CSS의 변환 및 원근 속성을 통해 웹 페이지에 3D 시각 효과를 쉽게 추가하여 웹 페이지를 더욱 생생하고 매력적으로 만들 수 있습니다. 이 문서에서는 이러한 두 가지 속성을 설명하고 특정 코드 예제를 제공합니다. 1. 변환 속성: transf

Vue에서 이미지 애니메이션 및 그라데이션 효과를 구현하는 방법은 무엇입니까? Vue는 애니메이션과 그라데이션 효과를 쉽게 구현할 수 있게 해주는 사용자 인터페이스 구축을 위한 진보적인 프레임워크입니다. 이 기사에서는 Vue를 사용하여 이미지 애니메이션 및 그라데이션 효과를 구현하는 방법을 소개하고 몇 가지 코드 예제를 제공합니다. 1. Vue의 전환 효과를 사용하여 이미지 애니메이션을 구현합니다. Vue는 전환 효과에 대한 기본 제공 지침을 제공하므로 HTML 요소에 애니메이션 효과를 쉽게 추가할 수 있습니다. 전환 효과를 사용할 때 그림 요소를 래핑하고 요소에 전환 지침을 추가할 수 있습니다. 예

순수 CSS를 통해 이미지의 큐브 회전 효과를 얻는 방법에 대한 방법 및 기법 현대 웹 디자인에서는 멋진 효과를 추가하는 것이 매우 중요하며 CSS를 사용하여 큐브 회전 효과를 얻는 것은 매우 흥미롭고 어려운 작업입니다. 이 기사에서는 순수 CSS를 통해 이미지의 큐브 회전 효과를 얻는 방법과 기술을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. 먼저, 컨테이너 요소와 각각 이미지가 포함된 6개의 얼굴 요소로 구성된 기본 HTML 구조가 필요합니다. <d

CSS 회전 속성 탐색: 변환 및 회전 소개: 최신 웹 디자인에서는 페이지의 매력과 사용자 경험을 높이기 위해 요소에 특수 효과를 추가해야 하는 경우가 많습니다. 그중에서도 요소의 회전은 독특한 시각 효과를 만드는 데 도움이 되는 일반적인 효과입니다. CSS에서는 요소의 회전을 달성하기 위해 변환 속성과 회전 속성을 사용할 수 있습니다. 이 문서에서는 이 두 속성의 사용을 살펴보고 코드를 제공합니다.

CSS 원형 레이아웃 속성에 대한 자세한 설명: border-radius 및 변환 1. 소개 웹 디자인에서 원형 레이아웃은 버튼, 아바타 등과 같은 원형 요소를 만드는 데 자주 사용됩니다. 원형 레이아웃을 구현하기 위한 두 가지 주요 CSS 속성은 border-radius와 변환입니다. 이 문서에서는 border-radius 및 변환 속성을 사용하여 링 레이아웃을 만드는 방법을 자세히 소개하고 구체적인 코드 예제를 제공합니다. 2. 보더라

3차원 동적 얼굴 인식은 사람의 골격 윤곽을 식별하는 것이며, 3차원 동적 얼굴 인식은 입력된 얼굴 이미지를 기반으로 눈, 코끝, 입꼬리, 눈썹 등을 구현합니다. 얼굴의 다양한 측면 구성요소 윤곽점 등을 통해 얼굴의 주요 특징점을 자동으로 찾아냅니다.
