three.js 기초 강의글 보고 까먹을까봐 작성하는 글

보고 배운 강의 출처입니다!! : http://binteractive.org/?p=213
예제 및 예제코드는 여기서 확인하세요.

three.js는 ie10 이하 호환이 안됩니다.

[1편]
-구도 잡고 화면 만드는 것 Scene
-화면 촬영 PerspectiveCamera
-화면에 표현 WebGLPenderer
 실제 우리 눈에 보여지게 해주는 renderer

three에서 생성한 함수이기 때문에 아래와 같이 실행
var camera = new THREE.PerspectriveCamera(...);

3d 객체는 표면이 추가되어야 한다.(재질, 색....)
재질을 채우기 위해 Mesh를 함수로 만들어야  위 출처에서 설명하기를 Mesh는?

Geometry - 점, 선, 면 으로 이루어짐
Material - Geometry 색을 채워 줌 (재질)
Mesh - 점, 선, 면 들에 색을 채워준 덩어리?

즉, Geometry + Material = Mesh 라고 한다.

Mesh는 아래와 같이 추가해야 한다.
// scence.add(Mesh변수명);
var geometry = new THREE.BoxGeometry(1,1,1);
var meterial = new THREE.MeshBasicMaterial({color : 0x00ff00});
var cube = new THREE.Mesh(geometry, material);

scene.add(cube);
cube는 Mesh 변수 값이므로 변수명이 다른 것이어도 무방하다.

실제 render
-매 프레임마다 함수를 호출
-애니메이트 코드
-HTML 화면에 scene, camera render
// 최초 호출
// 재귀함수 이므로 최초 1번의 호출만 있으면 반복 호출 됨.
animate();

function animate(){
    requestAnimationFrame(animate);
    // x, y 회전
    cube.rotation.x += 0.1;
    cube.rotation.y += 0.1;
    // rendering
    renderer.render(scene,camera);
};

[2편]
z좌표가 클 수록 멀리서 보는 느낌을 준다.
1편에서는 camera.position.z = 5; 였는데,
2편에서는 50으로 수정한다.

비교 이미지 ↓

z = 5


z = 50




점을 이용해 선을 만든다.

3차원 점은 아래와 같이 작성한다.
var material1 = new THREE.LineBasicMaterial({color : 0xe0e0e0 });
var geometry = new THREE.Geometry();

// 점 추가
geometry1.vertices.push(new THREE.Vector3(x, y, z));
geometry1.vertices.push(new THREE.Vector3(x, y, z));

// 라인 객체
var line = new THREE.Line(geometry1, meterial1);
scene.add(line);
x - x좌표
y - y좌표
z - z좌표

animate로 회전 시키기.
animate();

function animate(){
    requestAnimationFrame(animate);
    line.rotation.x -= 0.003;
    line.rotation.y -= 0.004;

    renderer.render(scence, camera);
}

선, 박스 차이
// 선
var geometry = new THREE.Geometry();
var material = new THREE.LineBasicMaterial( { color: 0xe0e0e0  } );

// 박스
var geometry = new THREE.BoxGeometry( 100, 100, 100 );
var material = new THREE.MeshBasicMaterial( { color: 0x909090, transparent: true } );

그리기 위해서 
scene, camera, renderer가 필요하다고 했는데, 
여기서 renderer를 보면 WebGLRenderer()이란게 있다.
var renderer = new THREE.WebGLRenderer();

WebGL이 뭘까?
구글 검색 해본 결과, 웹 기반의 그래픽 라이브러리라고 한다.
플러그인을 사용하지 않고 OpenGL 기반 API를 이용하여 브라우저의 HTML canvas에 랜더링하여 3D 웹 컨텐츠 제작을 가능하게 한다.

아 너무 어려워서 박스 랜덤 생성까지만 따라 하다가 포기했다...
다음에 필요해지면 다시 공부해야겠다!


마우스 휠로 0 ~ 100까지 숫자 조절이 가능하게 하는 작업을 하게 되었다.

비록 취소되어 사용은 안했지만, 간단하게 검토하던 것을 적어두려고 한다!

처음에는 <input type="number"> 태그를 사용하여 간단히 작업하려고 했는데,

정책상 브라우저 호환에 문제가 있어서 <input type="text"> 태그로 작업을 진행하게 되었다.

 

HTML

<input id="target" type="text">

 

jQuery

// Firefox
$('#target').on('wheel', function(e){
   e.preventDefault();
   var num = $(this).val();
   
   if(e.originalEvent.deltaY < 0){
     if(num >= 100) return false;

     console.log('업');
   }else{
     if(num <= 0) return false;

     console.log('다운');
   }
});

// 그 외 브라우저
$('#target').on('mousewheel',function (e) {
      e.preventDefault();
      var num = Number($(this).val());

      if(e.originalEvent.wheelDelta > 0){
        if(num >= 100) return false;
		$(this).val(num + 1);
        console.log('업');
        
      }else{
        if(num <= 0) return false;
        $(this).val(num - 1);

        console.log('다운');
      }
});

Firefox만 스크롤 이벤트의 메서드가 약간 다르기때문에 분기하여 작성했다.

브라우저 체크 후 조건문으로 분기하는 작업이 필요하다.

 

Javascript

자바스크립트는 예제를 만들기 위해 작성하였기 때문에 크롬만 테스트를 했다.

const target = document.getElementById('target');

target.addEventListener('mousewheel',function (e) {
      e.preventDefault();
      var num = Number(this.value);
                       
      if(e.wheelDeltaY > 0){
        if(num >= 100) return false;
		this.value = num + 1 ;
        console.log('업');
        
      }else{
        if(num <= 0) return false;
		this.value = num - 1 ;
        console.log('다운');
      }
});

 

 

예제

See the Pen aRjgGO by leeyoonseo (@okayoon) on CodePen.

 

 

다들 웹 사이트에서 내 아이디나 이메일이 ok*****@gmail.com 이런식으로 *표로 표시되는 것은 본 적이 있을 것이다.
보안적으로 요청사항이 들어와서 (비록 DB털리면 다 털리겠지만) 작업했는데,
간지나게 하고 싶어서 정규식 찾아봤는데.... ㅠㅠ 해탈했다.
진짜 정규식은 1도 모르겠다.
도움을 얻어서 간지나는 법을 찾았는데...

 

JS

userEmail = 'abcdefg@gmail.com';

var id =userEmail.split("@")[0].replace(/(?<=.{1})./gi,"*");
var mail =userEmail.split("@")[1].replace(/(?=.{2})./gi,"*");
userEmail= id+"@"+mail;

alert(userEmail);

 

 

결과를 보면

 

id는 a*****으로 나오고 mail은 ******m으로 나온다.

요청사항이 a*****@********m이었기 때문에 저렇게하는 방법을 찾아봤다.

 

출처는 아래 주소이며 나는 이 출처를 통해 배움을 얻은 분에게 카페 답변으로 코드를 받았다.<-

http://8boknote.tistory.com/98

 

근데!!!!!!!!!

사파리에서 정규식이 안 먹더라... ?<= 이 부분에서 문법 에러 탁탁 뱉던데... 

내가 작성한 정규식이 아니라서 고치기 뭐했다.. (물론 못 고침)

 

그러면서 그냥 간지를 버렸다. 

시간도 촉박...

// 이메일 마스킹 처리
function emailSecurity(userEmail){
  var id = userEmail.split('@')[0];
  var mail = userEmail.split('@')[1];
  
  var maskingId = function(id){
    var splitId = id.substring(0,1);

    for(var i = 1; i < id.length; i++){
        splitId += '*';
    }
    return splitId;
  };

  var maskingMail = function(mail){
    var splitMail = '';

    for(var i = 1; i < mail.length; i++){
        splitMail += '*';
    }
    splitMail += mail.substring(mail.length-1,mail.length);
    return splitMail;
  };

  userEmail = maskingId(id) + '@' + maskingMail(mail);
  
  return userEmail;
}
 

 

최소사이즈 체크하여 최소사이즈보다 작으면 최소사이즈 값 삽입하기.

 

JS

var minimumSizeCheck = function(target,minNum){
  var regNumber = /^[0-9]*$/;
  var val = $(target).val();
  if( val < 700 || val == '' || !regNumber.test(val) ) $(target).val(minNum);
};

$('#width, #height').on('blur',function(){
  minimumSizeCheck('#width','700');
  minimumSizeCheck('#height','400');
});

 

 

 

+ Recent posts