如何将旧的演示升级到最新版本的three.js?
我用旧版本的Three.js(r52)运行了一个webgl演示。 我想使代码适应新版本的Three.js(r1xx)。 但在切换到新版本的Three.js库并升级一些api后,我出现了一些黑屏(例如,将属性值移动到BufferGeometry) 这是传递给ShaderMaterial的着色器代码:如何将旧的演示升级到最新版本的three.js?,three.js,Three.js,我用旧版本的Three.js(r52)运行了一个webgl演示。 我想使代码适应新版本的Three.js(r1xx)。 但在切换到新版本的Three.js库并升级一些api后,我出现了一些黑屏(例如,将属性值移动到BufferGeometry) 这是传递给ShaderMaterial的着色器代码: <script type="x-shader/x-vertex" id="vertexshader"> attribute float size; attribute vec3 c
<script type="x-shader/x-vertex" id="vertexshader">
attribute float size;
attribute vec3 customColor;
attribute float time;
uniform float globalTime;
varying vec3 vColor;
varying float fAlpha;
void main() {
vColor = customColor;
vec3 pos = position;
float animTime = min(1.4, max(1.0, globalTime - time));
vec3 animated = vec3( pos.x * animTime, pos.y * animTime, pos.z * animTime );
vec4 mvPosition = modelViewMatrix * vec4( animated, 1.0 );
fAlpha = 1.0 - (globalTime*0.5);
gl_PointSize = size * ( 300.0 / length( mvPosition.xyz ) );
gl_Position = projectionMatrix * mvPosition;
}
</script>
<script type="x-shader/x-fragment" id="fragmentshader">
uniform vec3 color;
uniform sampler2D texture;
varying vec3 vColor;
varying float fAlpha;
void main() {
// fog
float depth = gl_FragCoord.z / gl_FragCoord.w;
float near = 30.0;
float far = 290.0;
float fog = 0.0 + smoothstep( near, far, depth );
vec4 outColor = texture2D( texture, gl_PointCoord );
if ( outColor.a < 0.25 ) discard; // alpha be gone
gl_FragColor = vec4( color * vColor, fAlpha );
gl_FragColor = gl_FragColor * outColor;
gl_FragColor = mix( gl_FragColor, vec4( vec3(0.0,0.0,0.0), gl_FragColor.w ), fog );
}
</script>
属性浮动大小;
属性vec3自定义颜色;
属性浮动时间;
均匀浮球时间;
可变vec3颜色;
不同浮法;
void main(){
vColor=自定义颜色;
vec3位置=位置;
浮动时间=最小值(1.4,最大值(1.0,全局时间-时间));
vec3动画=vec3(位置x*动画时间,位置y*动画时间,位置z*动画时间);
vec4 mvPosition=modelViewMatrix*vec4(动画,1.0);
fAlpha=1.0-(全球时间*0.5);
gl_PointSize=尺寸*(300.0/长度(mvPosition.xyz));
gl_位置=投影矩阵*mvPosition;
}
vec3颜色均匀;
二维纹理均匀;
可变vec3颜色;
不同浮法;
void main(){
//雾
浮动深度=gl_FragCoord.z/gl_FragCoord.w;
浮动近=30.0;
浮动far=290.0;
浮动雾=0.0+平滑步长(近、远、深);
vec4 outColor=texture2D(纹理,gl_PointCoord);
如果(outColor.a<0.25)放弃;//α将消失
gl_FragColor=vec4(颜色*vColor,fAlpha);
gl_FragColor=gl_FragColor*outColor;
gl_FragColor=混合(gl_FragColor,vec4(vec3(0.0,0.0,0.0),gl_FragColor.w),雾);
}
ShaderMaterial似乎工作不正常
有人知道我错过了什么吗
旧的:
失败的新版本:
代码可以从chrome开发控制台中看到。
更新:着色器材质问题已解决。线条材质仍不起作用//var line=new THREE.line(lineGeometry、lineMaterial、THREE.LineSegments) var line=新的三条线段(线几何图形、线材质)
属性现在是缓冲区几何体的一部分,而不是材质的一部分。这不是一个论坛。只是把代码的链接放在异地是离题的。@prisoner849是的。我已经修改了该部分以适应新的api。但我得到了黑屏材质的着色器。如果将着色器材质替换为MeshBasicMaterial,则会显示网格。