Three.js实例:SkyboxforThree.js

我在 three.js 上自学了我的个人作业,我仍然不熟悉这个计算机图形。我想在我的动画系统中添加 Skybox,但经过大量试验后未能做到这一点。在代码中,我做了很多笔记以使其运行。

<!DOCTYPE html>
<html>
<head>
<meta cht="utf-8">
<le>Mine</le>
<style>
/*body{
margin: 0;
padding: 0;
background-color: #000000;
font-size: 0;
overflow: hidden;}
*/
canvas{
  
width: 100%; height: 100%;
  
    }
</style>
</head>
<body>
<script src="build/three.js"></script>
<script src="FirstPersonControls.js"></script>
<script src="build/three.min.js"></script>
<script src="OrbitControls.js"></script>
<script>
//adding the scene with camera
var scene = new THREE.Scene();
var meshes=[];
var clock=new THREE.Clock();
var camera = new THREE.PerspectiveCamera(
45, window.innerWidth / window.innerHeight, 0.01, 1000 );
camera.position.set(0,5,60);
var renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.setPixelRatio(window.devicePixelRatio);
// renderer.setClearColor(0xffffff);
renderer.shadowMap.enabled=true;
renderer.shadowMap.type=0;
renderer.gammaInput=true;
renderer.gammaOutput=true;
renderer.domElement.style.position = 'relative';
doent.body.appendChild( renderer.domElement );
//controls
// var controls = new THREE.FirstPersonControls(camera,renderer.domElement);
// controls.movementSpeed=200;
// controls.lookSpeed=0.1;
// controls.lookVertical=true;
// controls.lon=-1.5*180/Math.PI; 
var sunLight = new THREE.SpotLight(0xffffff, 0.3, 0, Math.PI / 2);
sunLight.position.set(1000, 2000, 1000);
sunLight.castShadow = true;
sunLight.shadow.bias = -0.0002;
sunLight.shadow.camera.far = 4000;
sunLight.shadow.camera.near = 750;
sunLight.shadow.camera.fov = 30;
scene.add(sunLight);
var ambientLight = new THREE.AmbientLight(0x3f2806);
scene.add(ambientLight);
    var pointLight = new THREE.PointLight(0xffaa00, 1, 5000);
       
    pointLight.position.set(0, 0, 0);
scene.add(pointLight);
//adding the geometry (spheregeometry)
var geometry = new THREE.SphereGeometry( 10, 90, 50 );
var material = new THREE.MeshPngMaterial( {
shininess: 100,
    color: 0xffffff,
    specular: 0xffffff,
    //envMap: cubeCamera1.renderTarget.texture,
    transparent: true,
    side: THREE.BackSide,
    blending: THREE.AdditiveBlending,
    depthWrite: false
} );
var sphere = new THREE.Mesh( geometry, material );
scene.add( sphere );
// var cubegeometry = new THREE.CubeGeometry (1000, 1000, 1000);
// var cubeMaterials = 
// [
// 
new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load("violence_ft.jpg"), side: THREE.DoubleSide}),
// 
new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load("violence_bk.jpg"), side: THREE.DoubleSide}),
// 
new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load("violence_up.jpg"), side: THREE.DoubleSide}),
// 
new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load("violence_dn.jpg"), side: THREE.DoubleSide}),
// 
new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load("violence_rt.jpg"), side: THREE.DoubleSide}),
// 
new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load("violence_lf.jpg"), side: THREE.DoubleSide})
// 
];
// // var cubeMaterials = new Three.MeshFaceMaterial( cubeMaterials );
// var cubenew = new Three.Mesh( cubegeometry, cubeMaterials);
// scene.add(cubenew);
// function loop(){
// requestAnimationFrame(loop);
// var delta=clock.getDelta();
// controls.update(delta);
// renderer.render(scene,camera);
// }
// loop();
//rendering the scene
function animate() {
requestAnimationFrame( animate );
renderer.render( scene, camera );
}
animate();
//animating the scene
// cube.rotation.x += 0.01;
// cube.rotation.y += 0.01
var render = function render() {
requestAnimationFrame( render );
renderer.render( scene, camera );
};
render();
</script>
</body>
</html>
1

您可以通过使用CubeTextureLoader将框的 6 个纹理加载到立方体贴图中,然后将纹理分配给scene.background来添加天空框

{
  const loader = new THREE.CubeTextureLoader();
  const texture = loader.load([
    'resources/images/cubemaps/computer-history-museum/pos-x.jpg',
    'resources/images/cubemaps/computer-history-museum/neg-x.jpg',
    'resources/images/cubemaps/computer-history-museum/pos-y.jpg',
    'resources/images/cubemaps/computer-history-museum/neg-y.jpg',
    'resources/images/cubemaps/computer-history-museum/pos-z.jpg',
    'resources/images/cubemaps/computer-history-museum/neg-z.jpg',
  ]);
  scene.background = texture;
}
Seethis

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(658)
Python绘制八边形代码:Javascript画布绘制一个八边形
上一篇
资深web前端:后端Web开发vs前端 Web开发的未来
下一篇

相关推荐

  • java json工具包 Hello World}

    Java JSON工具包是一种用于处理JSON数据的Java库,它可以帮助开发人员轻松地读取、生成和操纵JSON数据。JSON是一种轻量级的文本格式,用于交换和存储数据,它可以很容易地与Java代码进行交互。…

    2023-06-03 11:36:30
    0 86 53
  • 编程猫比赛作品:冒险作品解释(adventureworks data model)

    关于编程猫比赛作品的问题,在adventureworks data model中经常遇到,我一直在看微软的 Adventure Works 2012 数据库。如果有任何信息解释为什么表按原样创建,我会非常感兴趣。某种模式概述我猜…

    2024-06-23 03:47:26
    0 80 82
  • Json文件怎么注释代码:Brat注释文件到 json文件的转换

    关于Json文件怎么注释代码的问题,在annotation file中经常遇到,我是使用 brat 注释工具的新手,我想将我的两个注释文件“test.ann”和“train.ann”转换为.json 文件,以便我可以在我的神经网络中使用它们。是否有任何特定的转换工具?我尝试过 cli 工具,但它是用 GO 语言编写的,我想知道是否有任何用 Python 语言编写的…

    2024-04-02 01:38:49
    0 30 70
  • 日式rpg手游:ILERPG电影免费格式免费RPG

    关于日式rpg手游的问题,在freerpg中经常遇到,谁能告诉我这条线是如何编码的免费 RPG?…

    2023-11-09 10:00:50
    0 22 68
  • 天眼查询系统病毒:是否查询防病毒定义日期(antivirus definitions out of date)

    关于天眼查询系统病毒的问题,在antivirus definitions out of date中经常遇到,是否有可能查询(WMI?)安装在远程计算机上的定义的病毒定义日期?我想从 Symantec Endpoint Protection 开始,然后分支到其他防病毒产品。…

    2024-04-12 06:35:10
    0 92 95
  • 中诚快递单号查询:如何从快递中的url获取id param和查询似乎不起作用

    关于中诚快递单号查询的问题,在express get by id中经常遇到,我有一个 URL,我试图获得 ID,但它没有工作 req.params 也不是 req.query…

    2024-01-09 10:22:20
    0 84 92
  • Property:$(this).prop('property')vs.this.property

    关于Property的问题,在.prop jquery中经常遇到,鉴于 jQuery 的哲学少写,多做,当我看到这个时,我总是很惊讶:…

    2023-12-24 15:51:36
    0 67 10
  • Ar 10:ar.js通过点击ar元素播放视频

    关于Ar 10的问题,在ar video playback中经常遇到,我使用 ar.js 库通过标记显示视频,一切似乎都很好,除了 iOS 指南不允许您使用音频自动播放视频,解决方案是使用按钮使视频播放,所以我已经通过 html 实现了它(请参阅下面的代码)。…

    2024-07-07 06:31:10
    0 62 43

发表评论

登录 后才能评论

评论列表(8条)