|
|
请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
和 SpriteMaterial 精灵材质一样,点材质THREE.PointsMaterial的形状默认也是矩形。改变点材质的形状就是给它贴个背景透明的纹理贴图,但对ThreeJS内置的几何体而言,依附其上的 map 并不能完美改变点材质的形状,试看:
<img style="position:absolute;width:200px;height:200px;z-index:10;" src="https://638183.freep.cn/638183/web/svg/sunfl-2.svg" alt="" title="纹理原图" />
<script type="module">
import { THREE, scene, camera, renderer, clock, basic3, click3 } from 'https://638183.freep.cn/638183/3dev/3/3basic.js';
basic3();
new THREE.TextureLoader().load(
'https://638183.freep.cn/638183/web/svg/sunfl-2.svg',
(texture) => {
texture.colorSpace = THREE.SRGBColorSpace;
const geometry = new THREE.SphereGeometry(); // 球体几何体
const material = new THREE.PointsMaterial({ size: 0.15, map: texture, transparent: true }); // 点材质
const points = new THREE.Points(geometry, material);
scene.add(points);
renderer.render(scene, camera);
}, undefined, (err) => console('error:', err)
);
</script>
运行代码可以看到球体不完美,球体图像中的点材质保留着矩形的形状,texture 纹理贴图以一个整体分摊给各个点,所有的点并不能完美以贴图构图。要让纹理成为每一个点的图像形状,需要对几何体进行重构,一个简单的实现思路是:创建一个缓冲几何体 BufferGeometry,它从球体几何体 SphereGeometry 那里获取所有顶点的位置(position)信息,然后,使用该缓冲几何体+点材质构建图像。具体代码如下:
<img style="position:absolute;width:200px;height:200px;z-index:10;" src="https://638183.freep.cn/638183/web/svg/sunfl-2.svg" alt="" title="纹理原图" />
<script type="module">
import { THREE, scene, camera, renderer, clock, basic3, click3 } from 'https://638183.freep.cn/638183/3dev/3/3basic.js';
basic3();
const positions = new THREE.SphereGeometry().attributes.position;
new THREE.TextureLoader().load(
'https://638183.freep.cn/638183/web/svg/sunfl-2.svg',
(texture) => {
texture.colorSpace = THREE.SRGBColorSpace;
const geometry = new THREE.BufferGeometry(); // 球体几何体
geometry.setAttribute('position', positions);
const material = new THREE.PointsMaterial({ size: 0.15, map: texture, transparent: true }); // 点材质
const points = new THREE.Points(geometry, material);
scene.add(points);
renderer.render(scene, camera);
}, undefined, (err) => console('error:', err)
);
</script>
这回球体图像是完整的,而且,重要的是,“绘制”球体的点材质完美贴上了纹理,纹理图片的形状就是每一个点的形状。
|
评分
-
| 参与人数 3 | 威望 +100 |
金钱 +200 |
经验 +100 |
收起
理由
|
泡沫
| + 20 |
+ 40 |
+ 20 |
很给力! |
杨帆
| + 30 |
+ 60 |
+ 30 |
精品文章! |
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|