将 CanvasRenderer 转换为 WebGLRenderer [英] Converting CanvasRenderer to WebGLRenderer

查看:44
本文介绍了将 CanvasRenderer 转换为 WebGLRenderer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在这里举个例子:https://threejs.org/examples/?q=canvas#canvas_particles_waves

并通过更改将其与 WebGLRenderer 一起使用:

And use it with the WebGLRenderer, by changing:

renderer = new THREE.CanvasRenderer();

renderer = new THREE.WebGLRenderer();

这样我就可以将这种效果与另一个已经在使用 WebGL 的效果结合起来.

So that I can combine this effect with another that is already using WebGL.

但是,这样做会导致正在渲染的粒子出现错误,如下所示:

However, doing so results in errors with the particles being rendered, like so:

three.js:18501 Uncaught TypeError: 无法在渲染 (canvas_particles_waves.html) 的 WebGLRenderer.render (three.js:22287) 处读取未定义的 WebGLSpriteRenderer.render (three.js:18501) 属性偏移量":184) 在动画 (canvas_particles_waves.html:157)

有什么想法吗?

非常感谢!

推荐答案

没关系,我搞定了!

CanvasRenderer 演示使用 2D Canvas 绘图命令绘制圆形,如下所示:

The CanvasRenderer demo draws its circles using 2D Canvas drawing commands, like so:

var material = new THREE.SpriteCanvasMaterial( {颜色:0xffffff,程序:函数(上下文){
context.beginPath();context.arc( 0, 0, 0.5, 0, PI2, true );上下文填充();}});

像这样的 2D 绘图命令不会转换为 3D WebGL,所以我将其替换为:

2D drawing commands like that don't translate to 3D WebGL, so I replaced this with:

var geometry = new THREE.SphereGeometry( 5, 32, 32 );var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );

在嵌套 for 循环的正下方,第一行变为:

And directly below that in the nested for loop, the first line becomes:

particle =particles[ i ++ ] = new THREE.Mesh( geometry, material );

就是这样!其他一切照旧.

That's it! Everything else works as is.

这篇关于将 CanvasRenderer 转换为 WebGLRenderer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆