three.js 在线包含它的 URL 是啥?

Posted

技术标签:

【中文标题】three.js 在线包含它的 URL 是啥?【英文标题】:What is the URL for three.js to include it online?three.js 在线包含它的 URL 是什么? 【发布时间】:2014-06-19 12:39:01 【问题描述】:

我正在尝试使用 three.js 在谷歌应用引擎中制作一个 javascript 应用程序,但我没有获得将其在线包含在我的文档中的 URL。我不想上传整个three.js 包,体积很大。我想知道是否有一种方法可以让 URL 包含库,就像 jQuery 一样:http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js

如果这个问题已经被问到,那么请提供链接。

【问题讨论】:

如果您担心链接文件的大小,请参阅:***.com/a/57018763/369005 【参考方案1】:

您的问题的搜索词应该是

三个js cdn

生成以下链接(对于 r128):

https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.js

https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js

【讨论】:

不工作了,使用下面的答案。 仍然为我工作。但无论如何,我今天更新了 cloudflare 上最新可用的答案(注意它不是最新发布的)。 哦,可能只是我?【参考方案2】:

请下载库并链接到本地​​。

但是,如果一定要热链接,那么可以直接链接到three.js网站。

<script src="http://threejs.org/build/three.min.js"></script>

<script src="http://threejs.org/examples/js/libs/tween.min.js"></script>

<script src="http://threejs.org/examples/js/libs/stats.min.js"></script>

提示:如果您正在调试,请使用未缩小版的three.js -- three.js -- 而不是three.min.js

three.js r.67

【讨论】:

我注意到 Google 托管了three.js,请参阅...developers.google.com/speed/libraries/#threejs 但是,它是否也托管了示例和其他重要的实用程序(我相信)没有托管在主要的“three.min”中.js”?如果希望链接到预托管的three.js,上述内容仍然成立吗? 绝对不要使用threejs.org,这不是它的意图。这有效:cdnjs.com/libraries/three.js 具有版本控制的优势。 cdnjs.com 链接无效。截至目前的最新版本:cloudfare.com = R83; googleapis.com = R84; threejs.org = R95 唯一对我有用的答案,只需要用 https 替换 http,谢谢!【参考方案3】:

截至 2019 年 8 月,three.js 有一个 ES6 模块版本。如果你想使用它,你就不能真正使用 cloudflare(至少在 2019-09 年)。

更新:从 2021 年 4 月 23 日 (r128) 开始,three.js 更改了threejs npm 模块的创建方式,因此它不再与许多 CDN 兼容。 They recommend 使用 www.skypack.dev

例子:

html, body  margin: 0; height: 100%; 
canvas  width: 100%; height: 100%; display block; 
<canvas id="c"></canvas>
<script type="module">
import * as THREE from 'https://cdn.skypack.dev/three';
import OrbitControls from 'https://cdn.skypack.dev/three/examples/jsm/controls/OrbitControls.js';

function main() 
  const canvas = document.querySelector('#c');
  const renderer = new THREE.WebGLRenderer(canvas);

  const fov = 45;
  const aspect = 2;  // the canvas default
  const near = 0.1;
  const far = 100;
  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
  camera.position.set(0, 10, 20);

  function updateCamera() 
    camera.updateProjectionMatrix();
  

  const controls = new OrbitControls(camera, canvas);
  controls.target.set(0, 5, 0);
  controls.update();

  const scene = new THREE.Scene();
  scene.background = new THREE.Color('black');

  
    const planeSize = 40;

    const loader = new THREE.TextureLoader();
    const texture = loader.load('https://threejsfundamentals.org/threejs/resources/images/checker.png');
    texture.wrapS = THREE.RepeatWrapping;
    texture.wrapT = THREE.RepeatWrapping;
    texture.magFilter = THREE.NearestFilter;
    const repeats = planeSize / 2;
    texture.repeat.set(repeats, repeats);

    const planeGeo = new THREE.PlaneGeometry(planeSize, planeSize);
    const planeMat = new THREE.MeshPhongMaterial(
      map: texture,
      side: THREE.DoubleSide,
    );
    const mesh = new THREE.Mesh(planeGeo, planeMat);
    mesh.rotation.x = Math.PI * -.5;
    scene.add(mesh);
  
  
    const cubeSize = 4;
    const cubeGeo = new THREE.BoxGeometry(cubeSize, cubeSize, cubeSize);
    const cubeMat = new THREE.MeshPhongMaterial(color: '#8AC');
    const mesh = new THREE.Mesh(cubeGeo, cubeMat);
    mesh.position.set(cubeSize + 1, cubeSize / 2, 0);
    scene.add(mesh);
  
  
    const sphereRadius = 3;
    const sphereWidthDivisions = 32;
    const sphereHeightDivisions = 16;
    const sphereGeo = new THREE.SphereGeometry(sphereRadius, sphereWidthDivisions, sphereHeightDivisions);
    const sphereMat = new THREE.MeshPhongMaterial(color: '#CA8');
    const mesh = new THREE.Mesh(sphereGeo, sphereMat);
    mesh.position.set(-sphereRadius - 1, sphereRadius + 2, 0);
    scene.add(mesh);
  

  
    const color = 0xFFFFFF;
    const intensity = 1;
    const light = new THREE.DirectionalLight(color, intensity);
    light.position.set(0, 10, 0);
    light.target.position.set(-5, 0, 0);
    scene.add(light);
    scene.add(light.target);
  

  function resizeRendererToDisplaySize(renderer) 
    const canvas = renderer.domElement;
    const width = canvas.clientWidth;
    const height = canvas.clientHeight;
    const needResize = canvas.width !== width || canvas.height !== height;
    if (needResize) 
      renderer.setSize(width, height, false);
    
    return needResize;
  

  function render() 

    if (resizeRendererToDisplaySize(renderer)) 
      const canvas = renderer.domElement;
      camera.aspect = canvas.clientWidth / canvas.clientHeight;
      camera.updateProjectionMatrix();
    

    renderer.render(scene, camera);

    requestAnimationFrame(render);
  

  requestAnimationFrame(render);


main();
</script>

【讨论】:

【参考方案4】:

这是Google hosted API。

<script src="https://ajax.googleapis.com/ajax/libs/threejs/r76/three.min.js"></script>

【讨论】:

【参考方案5】:

你可以在你的 html 文件中包含这个:

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/100/three.js"></script>

或使用three.min.js

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/100/three.min.js"></script>

【讨论】:

【参考方案6】:

如果您担心 lib 大小,您可以从 PageCDN 的 three.js CDN 链接,由于更好的压缩,它比其他 CDN 小 17KB

<script src="https://pagecdn.io/lib/three/106/three.min.js" integrity="sha256-tAVw6WRAXc3td2Esrjd28l54s3P2y7CDFu1271mu5LE=" crossorigin="anonymous"></script>

【讨论】:

以上是关于three.js 在线包含它的 URL 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Three.js 的 CopyShader 是啥?

如何使用Three.js获取纹理尺寸

Three.js 对象的“中心”是啥?

Three.js:Lambert 和 Phong 之间的确切区别是啥?

最接近 three.js 的完整原生库是啥?

Three.js 中文文档和在线演示实例