많은 웹 디자이너들이 사이트 디자인에 큰 영향을 미치는 방법을 찾아야하므로 사용자의주의를 끌 수 있습니다. 헤더 그래픽을 사용하여 방문 페이지 메뉴 아래에 슬라이드 쇼를 배치하고 이제는 대다수의 사이트의 대다수 가이 같은 형식을 따르기 위해 수년 동안 진화 해 왔습니다. 웹 사이트 빌더 짐마자
오늘날 다른 웹상 사이트에서 '하루의 사이트'를이기는 디자인은 일반적으로 조금 더 독특한 것입니다. WebGL은 이것을 위해 훌륭합니다. 대화 형 요소를 추가하면 사용자의 관심을 끌 수 있으며 이것이 방금 방문한 다른 사이트와 동일하지 않다는 것을 보여줄 수 있습니다. 그것은 거대한 슬라이드 쇼를 가진 것보다 훨씬 더 흥미로운 사이트를 만듭니다. 시차 스크롤 ...에 복잡한 요구가있는 사이트가있는 경우 웹 호스팅 서비스가 켜져 있습니다.
이 튜토리얼에서 스플래시 효과를 얻으려면 액체, 반사 표면이 추가되며, 이로 인해 카메라쪽으로 애니메이션이 앞으로 이동합니다. 모습과 느낌을 완성하기 위해 앞으로 나아가는 입자도있을 것입니다. 센터에서 사이트 로고가 있으며 전체 장면은 사용자의 마우스 이동에 반응하여 콘텐츠가 이동하고 3D가 실제로 눈에 띄게됩니다.
그만큼 로고 디자인 투명한 PNG로 렌더링됩니다 (안전 유지 클라우드 스토리지 ), 그래서 이것은 자신의 디자인으로 쉽게 맞춤 설정할 수 있습니다. 조명은 또한 색상이 궤도를 궤도하고 장면 내의 다른 파도를 강조하도록 움직일 것입니다.
파일을 다운로드하십시오 이 자습서의 경우.
프로젝트 파일에서 시작 폴더를 열고 코드 편집기로 드래그하십시오. 열다 ' index.html. '그리고 자바 스크립트 라이브러리가 이미 연결되어 있음을 알 수 있습니다. 빈 스크립트 태그 내부에는 코드가 이동할 수 있습니다. 여기서 WebGL이 프로젝트를 실행할 수 있는지 확인하기 위해 탐지되면 장면에서 사용되는 전체 범위의 변수가 추가됩니다.
if (! repector.webgl) repector.AddgetWebGlMessage ();
var screen_width = window.innerWidth;
var screen_height = window.innerHeight;
var 렌더러, 카메라, 장면, movergroup, floorgeometry, floormaterial, pointlight, pointlight2, pgeometry;
var floor_res = 60;
var floor_ht = 650;
var stepcount = 0;
var noisescale = 9.5;
var noiseseed = math.random () * 100;
변수의 다음 블록은 워터 플로어가 얼마나 큰지와 초기 마우스 위치와 함께 움직이는 속도를 처리합니다. 화면의 중심이 작동 중이며 개선 된 잡음 라이브러리가 물의 표면을 만드는 데 사용됩니다.
var floor_width = 3600;
var floor_depth = 4800;
var move_spd = 1.9;
var mousex = 0;
var mousey = 0;
var windowhalfx = window.innerWidth / 2;
var windowhalfy = window.innerheight / 2;
var snoise = 새로운 개선 된 ();
var textureLoader = new three.textureLoader ();
일부 최종 변수는 장면의 사후 처리 효과에 추가됩니다. 마우스 이동을 확인하는 이벤트 리스너가 추가됩니다. 장면이 디스플레이 포트에서 이동하여 마우스 이동에 반응합니다. 여기에 추가 된 함수는 허용되는 움직임의 양을 사용할 수 있습니다.
그 ' 매개 변수 '함수는 사후 처리 효과의 모든 설정이 저장됩니다. 당신이 무엇이든 바꿔야 할 필요가 있다면, 이것은 그것을 할 수있는 장소입니다. 틸트 시프트 블러는 처음 네 줄로 덮여 있으며, 필름은 나머지 선에서 통과합니다. 이것은 주로 화면 강도 및 소음 강도를위한 것입니다.
마지막 매개 변수는 화면 가장자리 주위의 어두운 비 네트를위한 것입니다. 그 ' init. '그리고' 생명 있는 '함수가 실행되도록 호출됩니다. 그 ' 생명 있는 '기능은 튜토리얼에서 훨씬 늦게 생성되지만' init. '기능이 여기에 생성됩니다. 카메라와 장면은 3D 콘텐츠를 볼 수 있도록 설정됩니다.
EffectVignette.uniforms [ "offset"]. 값 = 1.0;
EffectVignette.uniforms [ "어둠"].value = 1.3;
}
init ();
생명 있는();
함수 init () {
카메라 = 새로운 3.PerspectiveCamera (70, window.innerwidth / window.innerheight, 1, 4000);
camera.position.z = 2750;
장면 = 새로운 3.scene ();
scene.fog = New three.FogExp2 (0x1c3c4a, 0.00045);
장면의 내용을 보려면 4 개의 표시등이 배치됩니다. 첫 번째는 장면의 기본적인 분위기를 얻는 것만으로 사용되는 반구 빛입니다. 다음으로 장면의 한가운데에 밝은 푸른 빛을 추가하는 중심 빛입니다. 이것은 전체 장면에 빛을주기 위해 한쪽으로 설정됩니다.
VAR HEMISPHERELIGHT = NEW 3.HEMISPHERELIGHT (0xE3FEFF, 0xE6DDC8, 0.7);
Scene.add (Hemispherelight);
hemispherelight.position.y = 300;
var centerlight = 새로운 3.Spotlight (0xB7F9FF, 1);
Scene.add (가운데 라이트);
centerlight.position.set (2500, 300, 2000);
centerlight.penumbra = 1;
CenterLight.Decay = 5;
다음 두 개의 표시등이 추가됩니다. ' 포인트 라이트 '그리고' Pointlight2. '컬러 조명이 장면 주위의 반대 방향으로 동그라미가 있으므로 빛이 끊임없이 변화합니다. 첫 번째는 분홍색 빛이고 두 번째는 오렌지색 빛입니다. 반사 이미지의 경로 및 형식은 마지막 두 줄에 설정됩니다.
Pointlight = New 3. 포인트 라이트 (0xE07BFF, 1.5);
pointlight.position.z = 200;
Scene.add (Pointlight);
Pointlight2 = New 3. 포인트 라이트 (0xFF4E00, 1.2);
pointlight2.position.z = 200;
Scene.add (Pointlight2);
var path = "img /";
var format = '.jpg';
액체 표면은 반사, 반짝이 표면을 가지며 리플렉션 큐브를 만들어 이루어집니다. 이것은 액체의 표면에 반사 될 360도 스카이 박스가있는 큐브입니다. 그 ' urls. '배열은로드 할 이미지가 들어 있으며, 자료가 설정됩니다.
발동기 그룹에는 나중에 첨가 될 약간의 입자가 포함되어 있으며, 바닥 그룹은 액체의 표면을 포함합니다. 새로운 3D 객체가 생성되어 그 표면을 유지합니다. 2 개의 액체 표면이있을 것입니다. 하나는 반사 재료를 가지며 두 번째는 와이어 프레임을 가질 것입니다. 플로시 재료 '여기에 정의 된대로.
MoverGroup = New 3.Object3D ();
Scene.add (MoverGroup);
var floorgroup = new three.Object3D ();
var Floormaterial = New 3. ^ 폰밀도 ({
색상 : 0xeeeeee, Side : Three.Douribeide, 블렌딩 : 3.AdditiveBlending, 와이어 프레임 : True
});
Floorgeometry = New 3.PlaneGineGeplineGeometry (floor_width + 1200, floor_depth, floor_res, floor_res);
두 액체 표면이 여기에 " 플로어 메쉬 '그리고' Floormesh2. ' 그들은 ' 바닥 그룹 '그런 다음 카메라 앞에서 좋은 시야각으로 회전했습니다. 이것은 직접 평평하지는 않지만 그런 것처럼 보이는 것처럼 약간 각진되었습니다.
var Floormesh = New 3.Mesh (Floorgeometry, Cubematerial);
var Floormesh2 = New three.Mesh (Floorgeometry, Floormaterial);
floormesh2.position.y = 20;
floormesh2.position.z = 5;
floorgroup.add (Floormesh);
floorGroup.add (Floormesh2);
Scene.add (floorgroup);
floormesh.rotation.x = math.pi / 1.65;
floormesh2.rotation.x = math.pi / 1.65;
floorgroup.position.y = 180;
여기서 코드 섹션은 빈 기하학 객체를 생성 한 다음 입자로 작동하는 2,000 개의 정점을 2,000 정점으로 만듭니다. 이들은 X, Y 및 Z 축의 임의 위치에 분산됩니다. 이들은 액체 바닥의 표면 바로 위에 떠올 수 있습니다.
pgeometry = New 3.Geometry ();
Sprite = TextureLoader.load ( "img / sprite.png");
for (i = 0; I <2000; i ++) {
var vertex = new three.Vector3 ();
vertex.x = 4000 * math.random () - 2000;
vertex.y = -200 + math.random () * 700;
vertex.z = 5000 * math.random () - 2000;
pgeometry.vertices.push (정점);
}
여기에 정의 된 재료는 입자가 어떻게 보이는지를 설정합니다. 이전 단계에서 이미지를로드하고 재료가 생성되면 각 입자의 이미지로 사용됩니다. 이는 모든 입자에 대한 각 지오메트리의 각 지점에 적용됩니다. 그런 다음이 다음 장면에 추가됩니다.
로고가 화면 중앙에 놓이고 카메라에 직면 할 평평한 평면에 추가됩니다. 로고는 약간 투명하게 만들어졌으며 첨가물 블렌드가 주어 졌으므로 라이터 객체가 뒤에서 숨겨져있을 때 더 많이 볼 수 있습니다. 이것은 위치에 있고 장면에 배치됩니다.
스프라이트 = TextureLoader.load ( "img / logo.png");
Geometry = new 3.PlanePlaneBufferGeometry (500, 640, 1);
재질 = 새로운 3.meshlambertmaterial ({
투명 : 사실, 불투명도 : 0.8, 블렌딩 : 3.AdditiveBlending, Map : Sprite, Side : Three.Dourleside
});
var plane = new three.mesh (기하학, 재료);
plane.position.set (0, 70, 1800);
Scene.add (비행기);
렌더러는 부드럽고 앨리어리싱 된 가장자리가 부드럽고 이제는 배경색이 설정됩니다. 이것은 장면이 HTML 페이지에 있도록 문서 본문에 추가됩니다. 사후 처리 효과는 다양한 렌더링 및 셰이더 패스가 초기화되어 설정되어 설정됩니다.
필름과 글리치 패스가 추가되면 모든 패스를 함께 작성하는 효과 작성기가 생성됩니다. 이들은 하나씩 하나씩 작곡가에게 추가되며 결국 잠재 고객 디스플레이를위한 화면으로 렌더링됩니다.
장면의 초기화에는 마지막 몇 가지 설정이 추가됩니다. 사후 처리를위한 매개 변수가 설정되면 파도의 설정이 호출되고 브라우저의 크기가 조정될 때마다 이벤트 수신기가 추가됩니다. 이렇게하면 디스플레이가 새 차원에 맞게 업데이트 될 수 있습니다.
이제는 액체의 표면에 파도가 생성됩니다. 이는 X 및 Z 축의 바닥 기하학의 각 꼭지점을 이동하여 Y 축에서 위쪽으로 이동시켜 수행됩니다. 이 단계에서 ' ...에 대한 '루프는 x 및 z 축을 위해 생성됩니다.
함수 setwaves () {
stepcount ++;
movergroup.position.z = -move_spd;
var i, ipos;
var offset = stepcount * move_spd / floor_depth * floor_res;
(i = 0; i & lt; floor_res + 1; i ++) {
를 위해 (varj = 0; j & lt; floor_res + 1; j ++) {
ipos = i + offset;
모든 정점이 같은 방식으로 위쪽으로 확장되지 않습니다. 카메라에서 가장 멀리 떨어져있는 멀리 떨어져 있으면 옆구리가 약간 덜 될 것이며, 카메라에 가장 가까운 카메라가 가장 적은 것으로 확장됩니다. 이것은 뒤쪽과 측면을 약간 더 흥미롭게 만듭니다.
IF ((i & gt; 30) || (j & lt; 12) || (j & gt; 48)) { floorgeometry.vertices [i * (floor_res + 1) + j] .z = snoise.noise (ipos / floor_res * noisescale, j / floor_res * noisescale, noiseseed) * floor_ht; } else (i & gt; 25 & amp; & amp; i & lt; 30) { floorgeometry.vertices [i * (floor_res + 1) + j] .z = snoise.noise (ipos / floor_res * noisescale, j / floor_res * noisescale, noiseseed) * (floor_ht / 1.2); } else { floorgeometry.vertices [i * (floor_res + 1) + j] .z = snoise.noise (iPO / floor_res * noisescale, j / floor_res * noisescale, noiseseed) * (floor_ht / 2); } } } floorgeometry.verticeNeedUpdate = true; }창이 크기가 조정되면 여기의 함수는 16 단계에서 설정된 리스너에서 호출됩니다. 카메라, 렌더러 및 작곡가는 모두 브라우저 창의 새 차원과 일치하도록 여기에서 재설정됩니다. 애니메이션 함수는 60fps에서 스스로 설정하여 렌더링 함수를 호출하여 디스플레이를 업데이트합니다.
기능 onWindowResize () {
camera.aspect = window.nnerWidth / window.innerHeight;
camera.updateProjectionMatrix ();
renderer.setsize (window.innerWidth, window.innerHeight);
composer.setsize (window.innerWidth, window.innerHeight);
}
기능 애니메이트 () {
requestanimationFrame (애니메이션);
세우다();
}
렌더링 함수는 모든 프레임이라고합니다. 점등은 장면에서 궤도를 궤도로 설정하고 카메라는 마우스 이동에 따라 위치에 있으며 조금 완화되어 점차적으로 움직 이도록 움직이게됩니다. 카메라는 항상 장면의 중심을 보게됩니다.
함수 렌더링 () {
var timer = -0.0002 * date.now ();
pointlight.position.x = 2400 * math.cos (타이머);
pointlight.position.z = 2400 * math.sin (타이머);
pointlight2.position.x = 1800 * math.cos (-timer * 1.5);
pointlight2.position.z = 1800 * math.sin (-timer * 1.5);
camera.position.x + = (mousex - camera.position.x) * .05;
camera.position.y + = (-mousey - camera.position.y) * .05;
Camera.LookAt (scene.position);
최종 단계에서 입자는 개별 정점에서 앞으로 이동하고 카메라에 도착하면 거리에 다시 배치됩니다. 이것은 업데이트되고 ' setwaves ' 기능은 파도가 앞으로 롤백되도록 호출됩니다. 장면은 효과 작곡가에 의해 렌더링됩니다.
이 기사는 원래 크리에이티브 웹 디자인 잡지에 출판되었습니다. 웹 디자이너 ...에 웹 디자이너를 구독하십시오 ...에
관련 기사:
관점을 그려야하는 방법을 배우는 것은 전체 드로잉 프로세스를 정확하게 변경할 수 있습니다. 전통적으로 연필과 종이로 그리는 지 여부 그래�..
그립과 함께 [삼] 색 이론 수학이나 과학을 배우는 것처럼 조금 너무 많이 보일 수 있습니다. 당신은 당신이 만드는 것이 창조적이고 �..
이 마스터 클래스에서는 배우기 위해 따라야하는 기본 단계를 드러냅니다. 그림을 그리는 �..