gpt4 book ai didi

javascript - three.js 渐变背景颜色不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:10 25 4
gpt4 key购买 nike

我用 three.js 制作了一个 3d 图形元素网站

为了制作渐变背景色,我在谷歌中搜索了几个小时。

而且我发现下面的源被广泛使用。

html {
width: 100%;
height: 100%;

background: #11e8bb; /* Old browsers */
background: -moz-linear-gradient(top, #11e8bb 0%, #8200c9 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(top, #11e8bb 0%,#8200c9 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(to bottom, #11e8bb 0%,#8200c9 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#11e8bb', endColorstr='#8200c9',GradientType=0 ); /* IE6-9 */
}

只需将 linear-gradient 设置为背景,其他示例就可以很好地处理该代码。

但我的情况是行不通的。

我的代码在这里。

[index.html]

<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/build/three.min.js"></script>
<script src="OrbitControls.js"></script>
<script src="Device2.js"></script>
<script src="FlyControls.js"></script>
<script src="hammer.js"></script>
<script src="https://unpkg.com/three.texttexture"></script>
<script src="https://unpkg.com/three.textsprite"></script>
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
</head>
<body>
<header>
<div class="header-left">
<img src="./img/company_logo.png">
</div>
<div class="header-right">
<a href="#">ABOUT</a>
<a href="#">PRODUCT</a>
<a href="#">CONTACT</a>
</div>
</header>
<!-- <div id="threejs" data-long-press-delay="300" onmousedown="mouseDown()"></div>-->
<div id="threejs"></div>
<script src="src.js"></script>
<div class="down-btn">
<a href="#section">&darr;</a>
</div>
<section id="section">
SECTION
</section>
</body>
</html>

[src.js]

// Define Variables
var myElement = document.getElementById("threejs");
let camera, scene, renderer;
const mouse = new THREE.Vector2();
clicked = new THREE.Vector2();
const target = new THREE.Vector2();
const windowHalf = new THREE.Vector2( window.innerWidth / 2, window.innerHeight / 2 );
const moveState = {forward: 0, back: 0};
var isMobile = false;
var hold = -1;

/****** Define Function ******/
/*****************************/

checkMobile = () => {
var UserAgent = navigator.userAgent;

if (UserAgent.match(/iPhone|iPod|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson/i) != null || UserAgent.match(/LG|SAMSUNG|Samsung/) != null) {
isMobile = true;
} else {
isMobile = false;
}
}
checkMobile();

// Pinch zoom
var hammer = new Hammer(myElement);
hammer.get('pinch').set({ enable: true });
hammer.on('pinch', function(event) {
event.preventDefault();
if(parseInt(event.scale) > 0) { // Zoom in/out check
camera.position.z -= 4;
} else {
camera.position.z += 4.5;
}
});

onMouseMove = (event) => {
mouse.x = ( (event.clientX/2) - (windowHalf.x/2) );
mouse.y = ( (event.clientY/2) - (windowHalf.y/2) );
clicked.x = ( event.clientX / window.innerWidth ) * 2 - 1;
clicked.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
}

onResize = (event) => {
const width = window.innerWidth;
const height = window.innerHeight;

windowHalf.set( width / 2, height / 2 );

camera.aspect = width / height;
camera.updateProjectionMatrix();
renderer.setSize( width, height );
}

onContextMenu = (event) => {
event.preventDefault();
}

onMouseDown = (event) => {
hold = event.which;
}

onMouseUp = () => {
hold = -1;
};

// Start Script
init = () => {
camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 5000 );
camera.position.x = 0;
camera.position.y = 0;
camera.position.z = 1000;

scene = new THREE.Scene();

const geometry = new THREE.BoxBufferGeometry();
const material = new THREE.MeshNormalMaterial({ transparent: true });

if(isMobile) { // 모바일이면
var controls = new THREE.DeviceOrientationControls(camera);
} else {
console.log('isMobile false');
}

group = new THREE.Group();

for ( let i = 0; i < 800; i ++ ) {
let sprite = new THREE.TextSprite({
textSize: 2,
redrawInterval: 1,
texture: {
text: 'TEST',
fontFamily: 'Arial, Helvetica, sans-serif',
},
material: {
color: 'white',
},
});
sprite.position.x = Math.random() * 180-100;
sprite.position.y = Math.random() * 180-100;
sprite.position.z = Math.random() * 1000-40;
group.add(sprite);

}
scene.add(group);

renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

// Event handler
document.addEventListener('mousemove', onMouseMove, false);
document.addEventListener('mousedown', onMouseDown, false);
document.addEventListener('mouseup', onMouseUp, false);
document.addEventListener('contextmenu', onContextMenu, false);

window.addEventListener('resize', onResize, false);

// Helper
var axesHelper = new THREE.AxesHelper( 15 );
scene.add( axesHelper );

animate = () => {
// For camera follow mouse cursor
target.x = ( 1 - mouse.x ) * 0.002;
target.y = ( 1 - mouse.y ) * 0.002;
camera.rotation.x += 0.05 * ( target.y - camera.rotation.x );
camera.rotation.y += 0.05 * ( target.x - camera.rotation.y );

if(isMobile) {
controls.update();
}
switch(hold) {
case 1:
if(camera.position.z > 0) {
camera.position.z -= 4;
}
break;
case 3:
camera.position.z += 4;
break;
}

// Object opacity related to distance between camera and object
for (i = 0; i < 800; i++) {
var distance = camera.position.distanceTo(group.children[i].position);
var opacity = -1 / 400 * distance + 1;
if (opacity < 0) {
opacity = 0;
}
group.children[i].material.opacity = opacity;
}

requestAnimationFrame( animate );
renderer.render( scene, camera );
}
// Run
animate();
}
// Run
init();

只是简单的网站。并且我为我的 html 定义了背景,以将背景颜色更改为渐变。

但它不起作用。

有什么解决办法吗?

谢谢。

最佳答案

三个 Canvas 是否完全覆盖了背景?尝试

renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );

关于javascript - three.js 渐变背景颜色不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52378660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com