2017-09-21 1 views
0

직사각형 장면 프레임 대신 원형 장면을 사용하여 큐브가 웹 사이트 프레임에 표시되도록합니다. 전체 웹 페이지에 원형 프레임의 정육면체 대신 장면을 표시하고 싶지 않습니다. 직사각형 프레임을 원형 프레임으로 변경하기 위해 "var scene = new THREE.Scene();"장면을 수정할 수 있습니까? 죄송합니다. 바보 같은 질문이지만 Google에서 답을 찾지 못했습니다. 제발 도와주세요, 난 그냥 초보자예요!three.js를 사용하여 둥근 원형 프레임 webgl 창 장면을 만드는 방법

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>Learning 3JS</title> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0" /> 
    <meta name="theme-color" content="#ff3400" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
    <script src="../three.js-master/build/three.js"></script> 
    <script src="detector.js"> 

     if (Detector.webgl) { 
      animate(); 
     } else { 
      var warning = Detector.getWebGLErrorMessage(); 
      document.getElementById('container').appendChild(warning); 
     } 

    </script> 

    <script src="OrbitControls.js"></script> 
    <script src="TrackballControls.js"></script> 
</head> 

<body> 
    <div id="container" style="width: 100%; height: 640px; background: aqua;"></div> 

    <script> 

     var container = document.querySelector('#container'); 

     var scene = new THREE.Scene(); 
     var camera = new THREE.PerspectiveCamera(75, container.clientWidth/container.clientHeight, 0.1, 1000); 
     var renderer = new THREE.WebGLRenderer(); 

     var geometry = new THREE.BoxGeometry(20, 20, 20); 
     var material = new THREE.MeshLambertMaterial({ color: 0xffffff }); 
     var mesh = new THREE.Mesh(geometry, material); 

     scene.add(mesh); 
     camera.position.z = 50; 

     var light = new THREE.PointLight(0xffff00); 
     /* position the light so it shines on the cube (x, y, z) */ 
     light.position.set(-15, -10, 30); 
     scene.add(light); 

     var controls = new THREE.OrbitControls(camera); 
     //var controls = new THREE.TrackballControls(camera); 
     controls.target.set(0, 0, 0) 

     var loop = function() 
     { 
      requestAnimationFrame(loop); 
      controls.update(); 
      renderer.render(scene, camera); 
      mesh.rotation.x += 0.02; 
      mesh.rotation.y += 0.005; 
      //mesh.rotation.z += 0.1; 
     } 

     loop(); 

     renderer.setSize(container.clientWidth, container.clientHeight); 
     container.appendChild(renderer.domElement); 

    </script> 
</body> 
</html> 
+0

글쎄, 당신은 사각형 캔버스을하지만, 아무것도 그립니다되지 않도록 다음 라운드 스텐실 버퍼를 사용할 수 있습니다 : 당신은 아마 더 나은 적어도에 그것으로 캔버스 개념과 방법 WebGL이 작업을 이해하고, 처음으로 시작합니다 동그라미 바깥 쪽. – zero298

+0

스텐실은 3 가지로 지원되지 않지만, 다른 예제와 비교할 때 매우 사소한 것은 아닙니다 ('gl' 컨텍스트를 가져와 스텐실을 사용하고 올바른 호출을 할 필요가 있습니다). 그러나 유효한 해결책입니다. – pailhead

답변

1

아니요, 순환 이미지를 사용할 수없는 것처럼 순환 캔버스/프레임 버퍼를 사용할 수 없습니다. 이것은 일종의 일반적인 컴퓨팅 규칙입니다.

그러나 이미지의 경우와 마찬가지로 원형 "뷰포트"를 시뮬레이션 할 수 있으며이를 수행하는 방법은 매우 다양합니다. 예를 들어, 투명한 픽셀을 사용하거나 이미지의 직사각형 배경을 배경과 같은 색으로 칠합니다.

또한 THREE.js는 현재 사용자가 수행하는 작업을 이해하지 못하게합니다. 자동 기능.

https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Getting_started_with_WebGL

+0

어, "예방"이라는 말은 꽤 대담한 성명과 같습니다. 나는 그것이 오픈 소스 이후로 예방되지 않고 연구 될 수 있다고 주장합니다. 충분한 웹 글을 배우는 것이 어려울 것이라고 생각합니다. 충분히 배울 수있을 것입니다. js와 이것을 다른 방법으로하십시오. 캔버스를 사용하지 않고도 dom을 사용하는 것이 가능해야합니다. 세 가지를 사용하면 클리핑 셰이더를 작성하고 전체 화면 쿼드를 원시 webgl보다 훨씬 쉽게 만들 수 있습니다. 그러나, 당신이 그것을 할 필요가 분명하지 않을 수 있습니다. – pailhead

+0

이 경우, deepds14는 백그라운드 프로세스에서 canvas 요소를 자동으로 만드는 방법 때문에 THREE.js가 "잘못 인도"한 것 같습니다. 뭔가 존재하지만 실제로는 코드에 나타나지 않습니다. 캔버스는 사실 일종의 이미지입니다. 이 간단한 정보 (WebGL은 Canvas라고 불리는 이미지의 한 종류를 그립니다)를 사용하면 "원형 뷰포트"라는 목표를 달성하기 위해 무엇을 검색해야하는지 알 수 있습니다. 왜냐하면이 캔버스가 어떻게 구성되고, 표시되고, 채워지는지에 대한 답이 시작되기 때문입니다. –