小编use*_*845的帖子

检测与精灵相交的光线

在鼠标单击时,我投影光线以查看哪些对象与点击相交.我有一堆Mesh对象可以使用.但是,当我将Sprite添加到对象列表时,从未检测到Sprite.

1)应该检测精灵吗?有什么东西让它们无法被发现吗?我需要做些什么来使它们看起来"稳固"吗?2)如果无法检测到Sprites,那么使它们可点击的最佳方法是什么?在他们周围添加隐形圆筒?

这是一些适用于Mesh的部分代码.

var containerPosition = $container.position();
var vector = new THREE.Vector3(((event.clientX - containerPosition.left) / scene.WIDTH) * 2 - 1, - ((event.clientY - containerPosition.top) / scene.HEIGHT) * 2 + 1, 0.5);
new THREE.Projector().unprojectVector(vector, scene.camera);
var ray = new THREE.Ray(scene.camera.position, vector.subSelf(scene.camera.position).normalize());
var intersects = ray.intersectObjects(scene.solidObjects);
if (intersects.length > 0) {
Run Code Online (Sandbox Code Playgroud)

three.js

6
推荐指数
1
解决办法
1418
查看次数

创建透明圆柱体

我正在尝试创建一个透明的圆柱体。我尝试过设置透明、不透明度等,但似乎无法使其工作。有什么办法可以做到这一点吗?我需要加载带有 Alpha 通道的虚拟纹理吗?有没有更简单的方法?

material = new THREE.MeshBasicMaterial({wireframe: true});
material.transparent = true;
mesh = new THREE.Mesh(new THREE.CylinderGeometry(4, 4, 50, 8, 1, true), material);
scene.add(mesh);
Run Code Online (Sandbox Code Playgroud)

更新:我已将代码更改为以下内容,但以这种方式使用 ShaderMaterial 似乎是错误的。但它有效...

material = new THREE.ShaderMaterial({wireframe: true, transparent: true});
mesh = new THREE.Mesh(new THREE.CylinderGeometry(4, 4, 50, 8, 1, true), material);
scene.add(mesh);
Run Code Online (Sandbox Code Playgroud)

更新:这是图像。

  • 我无法正确添加图像或添加链接,因为我需要 11 的声誉,但只有 10,所以我添加了损坏的链接。在每个 url 前面添加“h”。

ttp://img692.imageshack.us/img692/6412/shadermaterial.png 使用 ShaderMaterial,您可以看到由透明圆柱体包围的矩形灰色精灵。

http://img855.imageshack.us/img855/3988/opacity00.png 使用具有不透明度 0.0 的 MeshBasicMaterial。

http://img27.imageshack.us/img27/6087/opacity05.png 使用不透明度为 0.5 的 MeshBasicMaterial。

http://img837.imageshack.us/img837/8043/opacity10.png 使用具有不透明度 1.0 的 MeshBasicMaterial。

javascript webgl three.js

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

three.js ×2

javascript ×1

webgl ×1