花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 199|回复: 120

ThreeJS点材质形状问题

[复制链接]
  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2025-6-30 14:12 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    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 赞一个!

    查看全部评分

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2025-6-30 15:17 | 显示全部楼层
    不使用缓冲几何体 BufferGeometry的时候,纹理贴图是用自身形状整个帖到球体上的,有些点处在纹理图上的空白的地方,不能完整地体现出球体。而使用缓冲几何体,每个点都被完整地帖上纹理图。
    这个功能很奇妙
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2025-6-30 15:17 | 显示全部楼层
    一个是整体帖,每一个是逐点帖,效果完全不同呢。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-6-30 18:09 | 显示全部楼层
    红影 发表于 2025-6-30 15:17
    不使用缓冲几何体 BufferGeometry的时候,纹理贴图是用自身形状整个帖到球体上的,有些点处在纹理图上的空 ...

    但是不用贴图、不同每一个点颜色不同,那么没啥问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-15 13:49
  • 签到天数: 395 天

    [LV.9]以坛为家II

    305

    主题

    2687

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

    发表于 2025-6-30 19:51 | 显示全部楼层
    神奇,纹理图片的形状就是每一个点的形状。谢谢马老师经典讲授
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2025-6-30 21:11 | 显示全部楼层
    马黑黑 发表于 2025-6-30 18:09
    但是不用贴图、不同每一个点颜色不同,那么没啥问题

    是的,虽然颜色不同的,但每个点都是有的。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-6-30 21:35 | 显示全部楼层
    红影 发表于 2025-6-30 21:11
    是的,虽然颜色不同的,但每个点都是有的。

    嗯嗯
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-6-30 21:35 | 显示全部楼层
    杨帆 发表于 2025-6-30 19:51
    神奇,纹理图片的形状就是每一个点的形状。谢谢马老师经典讲授

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2025-6-30 21:45 | 显示全部楼层

    这些点里面的讲究的确太多了。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-6-30 21:47 | 显示全部楼层
    红影 发表于 2025-6-30 21:45
    这些点里面的讲究的确太多了。

    接近于自定义顶点但又比自定义方便一点——充分利用了内置缓冲几何体的基类属性
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2025-6-30 22:01 | 显示全部楼层
    看到这个神奇的几何体:缓冲几何体 BufferGeometry
    这个是把球体几何体打散,得到每个点的位置重新组成球体。。
    感觉它比较高级。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2025-6-30 22:02 | 显示全部楼层
    能想出这种法子的就是神人
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-6-30 22:04 | 显示全部楼层
    泡沫 发表于 2025-6-30 22:01
    看到这个神奇的几何体:缓冲几何体 BufferGeometry
    这个是把球体几何体打散,得到每个点的位置重新组成球 ...

    ThreeJS 立方体、圆环、球体等等都是 buffer(缓冲)几何体(Geometry),BufferGeometry 是未定型几何体,预留着缓冲区留待使用顶点区填充。所谓顶点,指构成图像的顶点,每个顶点是 xyz 点坐标(2d的话是xy点坐标)。

    评分

    参与人数 1威望 +20 金钱 +40 经验 +20 收起 理由
    泡沫 + 20 + 40 + 20 很给力!

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-6-30 22:08 | 显示全部楼层
    泡沫 发表于 2025-6-30 22:02
    能想出这种法子的就是神人

    这个想想就可以的呀
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2025-6-30 22:39 | 显示全部楼层
    马黑黑 发表于 2025-6-30 22:04
    ThreeJS 立方体、圆环、球体等等都是 buffer(缓冲)几何体(Geometry),BufferGeometry 是未定型几何体 ...

    未定型几何体那就是可以跟水一样让它变成各种形状。。。
    几何体中的变形金刚。。给点就成型
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2025-6-30 22:40 | 显示全部楼层
    马黑黑 发表于 2025-6-30 22:08
    这个想想就可以的呀

    神脑袋想想就可以。。。我这样的笨脑袋不行滴
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2025-6-30 22:41 | 显示全部楼层
    马黑黑 发表于 2025-6-30 22:08
    这个想想就可以的呀

    晚安了,白大神。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2025-7-1 11:59 | 显示全部楼层
    马黑黑 发表于 2025-6-30 21:47
    接近于自定义顶点但又比自定义方便一点——充分利用了内置缓冲几何体的基类属性

    其实我都不知道缓冲几何体的基类属性都是些什么呢
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-7-1 20:09 | 显示全部楼层
    红影 发表于 2025-7-1 11:59
    其实我都不知道缓冲几何体的基类属性都是些什么呢

    基类就是一种类属的基本。

    比方说鸡,确切说是原鸡,是鸡的一个基类,其它所有品种的鸡出自于它。

    缓冲几何体,BufferGeometry,是一个待定型的几何体,它将因顶点的不同而创建出不同的形状。

    ThreeJS 的 BoxGeometry(立方体几何体)是通过 Buffergeometry 构造出来的预设几何体,叫做内置几何体。它来源于 Buffergeometry,给它制定好了顶点数据,开箱即用。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3049

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-7-1 20:10 | 显示全部楼层
    泡沫 发表于 2025-6-30 22:41
    晚安了,白大神。

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-12-15 17:03 , Processed in 0.088073 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表