이 글은 이 시리즈의 세 번째 글입니다. 처음 두 글에서는 HTML5에서 이미지 왜곡 효과를 얻는 원리와 drawtriangles 기능의 자세한 사용법을 소개합니다.
drawtriangles 기능의 확장을 살펴보겠습니다. drawtriangles 기능을 사용하여 회전하는 3D 지구를 구현하면 효과는 다음과 같습니다
lufylegend 버전 1.5.0의 drawtriangles 기능에 버그가 있어서 조용히 lufylegend 버전 1.5.1을 업데이트했습니다. 아래 공식 홈페이지에서 다운로드 받으실 수 있습니다. 주소:
http: //lufylegend.com/lufylegend
실제로 3D 구형 효과를 그리려면 먼저 평면을 그린 다음 평면을 작은 삼각형으로 나눈 다음 이를 사용합니다.
이제 먼저 빈 LBitmapData 개체를 만든 다음 이 개체를 N개의 작은 삼각형으로 나눕니다.
earthBitmapData = new LBitmapData("#ffffff", 0, 0, 500, 300); var i, j; vertices = new Array(); for(i=0;i<=cols;i++){ for(j=0;j<=rows;j++){ vertices.push(i*15,j*15); } } indices = new Array(); for (i = 0; i < cols; i++) { for (j = 0; j < rows; j++) { indices.push(i * (rows + 1) + j, (i + 1) * (rows + 1) + j, i * (rows + 1) + j + 1); indices.push((i + 1) * (rows + 1) + j, i * (rows + 1) + j + 1, (i + 1) * (rows + 1) + j + 1); } } uvtData = new Array(); for (i = 0; i <= cols; i++) { for (j = 0; j <= rows; j++) { uvtData.push(i / cols, j / rows); } }
그런 다음 drawtriangles 함수를 사용하여 LBitmapData 개체를 그립니다.
backLayer = new LSprite(); addChild(backLayer); backLayer.graphics.clear(); backLayer.graphics.beginBitmapFill(earthBitmapData); backLayer.graphics.drawTriangles(vertices, indices, uvtData, 2);
화면으로 이동하여 아래와 같은 효과를 얻습니다.
이 평면을 원으로 프로그래밍하려면 먼저 그림에 있는 각 작은 삼각형의 좌표를 계산해야 합니다. 좌표를 계산해야 합니다. 아래 그림은 공의 수직 단면입니다.
삼각 함수를 사용하여 그림의 y 좌표와 공의 수평 단면을 계산합니다. y 좌표 위치의 공. 원의 반경 r1
var a = Math.sin(angle); if((90-180*j/rows)%90==0 && (90-180*j/rows)%180!=0)a=(90-180*j/rows)>0?1:-1; var y = -r*a; var sa = Math.cos(angle); var r1 = Math.abs(r*sa);
그러므로 먼저 계산된 y 좌표를 정점 배열로 가져옵니다
for(i=0;i<=cols;i++){ for(j=0;j<=rows;j++){ var angle = (90-180*j/rows)*Math.PI/180; var a = Math.sin(angle); if((90-180*j/rows)%90==0 && (90-180*j/rows)%180!=0)a=(90-180*j/rows)>0?1:-1; if((90-180*j/rows)%180==0)a=0; var sy = -r*a; vertices.push(i*15,sy); } }
x 좌표가 계산되지 않았기 때문입니다. 그러나 다음과 같이 특별한 수치가 얻어집니다
다음으로 x의 좌표가 어떻게 계산되는지 살펴보겠습니다. 먼저 반경이 r1인 평면 단면을 꺼냅니다. , 아래와 같이
삼각함수를 이용하여 그래프의 x좌표를 계산합니다
var b = Math.cos(angle*Math.PI/180); var x = r1*b;
이때 계산된 값만 가져오면 x 좌표를 정점 배열에 추가
for(i=0;i<=cols;i++){ for(j=0;j<=rows;j++){ var sa = Math.cos(angle); if((90-180*j/rows)%180==0)sa=1; var sr = Math.abs(r*sa); var angle2 = 360*(i+1)/cols; var b = Math.cos(angle2*Math.PI/180); if(angle2%360==0)b=1; else if(angle2%180==0)b=-1; var sx = sr*b; vertices.push(sx,j*15); } }
y 좌표는 계산되지 않으므로 다음과 같이 매우 흥미로운 그래프를 얻을 수 있습니다.
계산된 x 좌표와 y 좌표는 동시에 정점 배열로 가져옵니다.
for(i=0;i<=cols;i++){ for(j=0;j<=rows;j++){ var angle = (90-180*j/rows)*Math.PI/180; var a = Math.sin(angle); if((90-180*j/rows)%90==0 && (90-180*j/rows)%180!=0)a=(90-180*j/rows)>0?1:-1; if((90-180*j/rows)%180==0)a=0; var sy = -r*a; var sa = Math.cos(angle); if((90-180*j/rows)%180==0)sa=1; var sr = Math.abs(r*sa); var angle2 = 360*(i+1)/cols; var b = Math.cos(angle2*Math.PI/180); if(angle2%360==0)b=1; else if(angle2%180==0)b=-1; var sx = sr*b; vertices.push(sx, sy); } }
인 경우 다음과 같이 완전한 구형 그래픽을 얻을 수 있습니다
다음 단계는 간단합니다. 빈 그림을 지구의 평면도로 바꾸세요. 코드는 다음과 같습니다
earthBitmapData = new LBitmapData(imglist["earth"]);
코드를 다시 실행하면 다음과 같은 3D 그래픽을 얻을 수 있습니다
이제 지구를 회전시킬 차례입니다. 이전 기사에서 언급했듯이 drawtriangles 함수에 전달된 uvtData 배열의 요소는 각 작은 항목의 상대적 위치입니다. 원본 그림의 삼각형은 그림을 그리는 시작 위치를 결정합니다. 0123과 같은 위치 집합이 변경되면 위치는 1230이 되고 계속해서 2301로 변환됩니다. 그런 다음 코드에서는 분할된 배열을 각 열에 따라 이동하기만 하면 됩니다. 매번 첫 번째 열의 두 세트의 삼각형을 마지막 열로 이동하면 됩니다. 두 번째 열의 삼각형 세트가 첫 번째 열이 되므로 지속적인 변형으로 인해 지구가 회전할 수 있습니다
for (i = 0; i <= rows; i++) { uvtData.push(uvtData.shift()); uvtData.push(uvtData.shift()); }
원하는 경우 지구의 크기를 변경하는 것이 LSprite의 scaleX 및 scaleY 속성을 변경하는 것이 더 간단합니다. 개체의 크기를 변경할 수 있습니다.
http:/ /lufy.netne.net/lufylegend-js/3dearth/index.html
주의사항:
다시 한번 말씀드리지만, 본 글에서 소개하는 내용은 HTML5 오픈소스 버전 1.5.1 이상의 지원이 필요합니다. lufylegend 버전 1.5.1의 출시 주소는 다음과 같습니다
html5的div元素默认一行不可以放两个。div是一个块级元素,一个元素会独占一行,两个div默认无法在同一行显示;但可以通过给div元素添加“display:inline;”样式,将其转为行内元素,就可以实现多个div在同一行显示了。

html5中列表和表格的区别:1、表格主要是用于显示数据的,而列表主要是用于给数据进行布局;2、表格是使用table标签配合tr、td、th等标签进行定义的,列表是利用li标签配合ol、ul等标签进行定义的。

固定方法:1、使用header标签定义文档头部内容,并添加“position:fixed;top:0;”样式让其固定不动;2、使用footer标签定义尾部内容,并添加“position: fixed;bottom: 0;”样式让其固定不动。

html5中不支持的标签有:1、acronym,用于定义首字母缩写,可用abbr替代;2、basefont,可利用css样式替代;3、applet,可用object替代;4、dir,定义目录列表,可用ul替代;5、big,定义大号文本等等。

HTML5中画布标签是“<canvas>”。canvas标签用于图形的绘制,它只是一个矩形的图形容器,绘制图形必须通过脚本(通常是JavaScript)来完成;开发者可利用多种js方法来在canvas中绘制路径、盒、圆、字符以及添加图像等。

html5废弃了dir列表标签。dir标签被用来定义目录列表,一般和li标签配合使用,在dir标签对中通过li标签来设置列表项,语法“<dir><li>列表项值</li>...</dir>”。HTML5已经不支持dir,可使用ul标签取代。

3种取消方法:1、给td元素添加“border:none”无边框样式即可,语法“td{border:none}”。2、给td元素添加“border:0”样式,语法“td{border:0;}”,将td边框的宽度设置为0即可。3、给td元素添加“border:transparent”样式,语法“td{border:transparent;}”,将td边框的颜色设置为透明即可。

因为html5不基于SGML(标准通用置标语言),不需要对DTD进行引用,但是需要doctype来规范浏览器的行为,也即按照正常的方式来运行,因此html5只需要写doctype即可。“!DOCTYPE”是一种标准通用标记语言的文档类型声明,用于告诉浏览器编写页面所用的标记的版本。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

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

뜨거운 주제



