Да, еще вопрос по поводу Three.points. Некоторое время у меня были проблемы, пытаясь выяснить, как настроить непрозрачность, размер и вращение на некоторое время. Я взял перерыв, чтобы работать над другими областями моего кода, и я вернулся к нему.
Моя проблема сейчас в том, что после моего предыдущего вопроса об этом я немного продвинулся в попытке заставить его работать, но я столкнулся с проблемой выдвижения точек, потому что я незнаком с этим методом или заставляет частицы происходить.
Это тупая версия моего кода, так что, надеюсь, это поможет;
var dirs = [], parts = [], container = document.createElement('div');
document.body.appendChild( container );
var renderer, camera, scene
var cameramode, composer
var particleSystem = [], particleCount = 15;
for (var i = 0; i < particleCount; ++ i) {
var pgeometry = new THREE.Geometry();
var pMaterial = new THREE.PointsMaterial({
map: new THREE.TextureLoader().load("x.png"),
blending: THREE.screenBlending,
size: 60, depthTest: true,
transparent: true, opacity: 1,
depthTest: false, sizeAttenuation: true
});
}
init();
animate();
update();
function init() {
for (var p = 0; p < particleCount; p++) {
pX = Math.floor(Math.random()*2) == 1 ? 1 : -1,
pY = Math.floor(Math.random()*2) == 1 ? 1 : -1,
pZ = Math.floor(Math.random()*2) == 1 ? 1 : -1;
var particle = new THREE.Vector3(pX, pY, pZ);
}
particle.velocity = new THREE.Vector3(0, 0, 0);
geometry.vertices.push(particle);
var points = new THREE.Points(geometry, pMaterial);
scene.add(points);
particleSystem.push(points);
}
function animate(){
requestAnimationFrame( animate );
controls.update(), composer.render();
update(), render();
};
function update() {
requestAnimationFrame( animate );
while (pCount--) {
var points = particleSystem[i];
if (particle.x < -150) {
particle.z = (Math.floor(Math.random()*2) == 1 ? 1 : -1)* 20;
particle.x = (Math.floor(Math.random()*2) == 1 ? 1 : -1)* 20;
particle.velocity.x = 0, particle.velocity.y = 0, particle.velocity.z = 0};
if (particle.z < -150) {
particle.z = (Math.floor(Math.random()*2) == 1 ? 1 : -1)* 20;
particle.x = (Math.floor(Math.random()*2) == 1 ? 1 : -1)* 20;
particle.velocity.x = 0, particle.velocity.y = 0, particle.velocity.z = 0 };
if (particle.y < -150) {
particle.z = (Math.floor(Math.random()*2) == 1 ? 1 : -1)* 20;
particle.x = (Math.floor(Math.random()*2) == 1 ? 1 : -1)* 20;
particle.velocity.x = 0, particle.velocity.y = 0, particle.velocity.z = 0 };
if (pCount%2 == 0){
if (particle.x < 0){
particle.velocity.x -= (Math.floor(Math.random()*2))*0.002;
particle.velocity.y -= (Math.floor(Math.random()*2))*0.0001;
particle.velocity.z -= (Math.sin(Math.random()*2))*0.001 };
if (particle.x > 0){
particle.velocity.x += (Math.floor(Math.random()*2))*0.002;
particle.velocity.y += (Math.floor(Math.random()*2))*0.00001;
particle.velocity.z -= (Math.random(Math.random()*2))*0.005 };
} else {
if (particle.x < 0){
particle.velocity.z += (Math.floor(Math.random()*2))*0.002;
particle.velocity.y += (Math.floor(Math.random()*2))*0.0001;
particle.velocity.x -= (Math.random(Math.random()*2))*0.001 };
if (particle.x > 0){
particle.velocity.z -= (Math.floor(Math.random()*2))*0.002;
particle.velocity.y -= (Math.floor(Math.random()*2))*0.00001;
particle.velocity.x += (Math.random(Math.random()*2))*0.005 }};
if (pCount%3 == 0){
if (particle.velocity.z > 0){
particle.velocity.y -= (Math.floor(Math.random()*2))*0.0001;
particle.velocity.x -= (Math.random(Math.random()*2))*0.005 };
if (particle.velocity.z < 0){
particle.velocity.y += (Math.floor(Math.random()*2))*0.00001;
particle.velocity.x -= (Math.random(Math.random()*2))*0.005 / 2}};
if (pCount%5 == 0){
if (particle.velocity.z > 0){
particle.velocity.y -= (Math.floor(Math.random()*2))*0.0001;
particle.velocity.z += (Math.random(Math.random()*2))*0.005 };
if (particle.velocity.z < 0){
particle.velocity.y += (Math.floor(Math.random()*2))*0.00001;
particle.velocity.z += (Math.random(Math.random()*2))*0.005 }};
if (pCount%7 == 0){
if (particle.velocity.z > 0){
particle.velocity.y -= (Math.floor(Math.random()*2))*0.0001;
particle.velocity.x -= (Math.random(Math.random()*2))*0.005};
if (particle.velocity.z < 0){
particle.velocity.y += (Math.floor(Math.random()*2))*0.00001;
particle.velocity.x -= (Math.random(Math.random()*2))*0.005 / 2}};
}
particleSystem.geometry.verticesNeedUpdate = true;
particleSystem.rotation.y += (Math.random()*0.001)
} //animate end
renderer.setAnimationLoop(() => {
update();
composer.render(scene, camera);
});
function render()
{
uniforms.tAudioData.value.needsUpdate = true;
composer.render();
}
У меня постоянно возникают проблемы с указанием местоположения, частицы, точки, т. Д., И я не знаю, как что-то изменить. Моя текущая проблема связана с расположением точек с помощью этого метода в сравнении с;
for (var p = 0; p < particleCount; p++) {
pX = Math.floor(Math.random()*2) == 1 ? 1 : -1,
pY = Math.floor(Math.random()*2) == 1 ? 1 : -1,
pZ = Math.floor(Math.random()*2) == 1 ? 1 : -1;
var particle = new THREE.Vector3(pX, pY, pZ);
}
geometry.vertices.push(particle);
var points = new THREE.Points(geometry, pMaterial);
scene.add(points);
particleSystem.push(points);
, который не имеет никаких проблем, но ограничивает функциональность только позиционированием и т. Д. Вероятно, есть несколько других проблем, которые я вызываю, о которых я на самом деле не знаю, но как мне поступить с этим или исправить текущие проблемы, которые у меня возникают?
(Часть 2 этого поста: .points непрозрачность / размер в течение трех. Js )