Sprite在视野中保持大小不变

本文介绍了在Three.js的最新版本99中,如何利用SpriteMaterial的sizeAttenuation属性,确保Sprite在透视相机视图中保持大小不变。通过设置sizeAttenuation为true,可以避免Sprite因相机深度变化而缩放。关键代码位于sprite_vert.glsl着色器中,涉及两行核心逻辑。示例代码展示了具体实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当前threejs版本为:99
threejs的SpriteMaterial新增属性sizeAttenuation,文档上的解释是Whether the size of the sprite is attenuated by the camera depth. (Perspective camera only.) Default is true.,呈现的效果就是,无论鼠标放大还是缩小,sprite在视野中的大小不变,shader中的核心代码如下(sprite_vert.glsl):

uniform float rotation;
uniform vec2 center;

#include <common>
#include <uv_pars_vertex>
#include <fog_pars_vertex>
#include <logdepthbuf_pars_vertex>
#include <clipping_planes_pars_vertex>

void main() {

	#include <uv_vertex>

	vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); //获取camera的深度

	vec2 scale;
	scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
	scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );

	#ifndef USE_SIZEATTENUATION

		bool isPerspective = ( projectionMatrix[ 2 ][ 3 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值