我是 three.js 的新手,我正在寻找可以实现如下效果的方法:
对于下图中的可乐罐对象(减去冷凝),我想根据用户交互更改罐子表面上的独立文本位。文本的变体相当随意,对于预烘焙的满罐纹理来说太多了。例如,我可能想要:
- 将“Euro 2012”更改为任意文本
- 更改罐头背面的营养统计数据
- 显示或隐藏单个音符之一
我确信这是可能的,只是寻找我需要采用的概念。在同一个物体上有多个纹理很难吗?或者生成任意文本并将其放置在对象上并将其包装成对象的形状?
任何指针都有帮助!
我是 three.js 的新手,我正在寻找可以实现如下效果的方法:
对于下图中的可乐罐对象(减去冷凝),我想根据用户交互更改罐子表面上的独立文本位。文本的变体相当随意,对于预烘焙的满罐纹理来说太多了。例如,我可能想要:
我确信这是可能的,只是寻找我需要采用的概念。在同一个物体上有多个纹理很难吗?或者生成任意文本并将其放置在对象上并将其包装成对象的形状?
任何指针都有帮助!
您可以将在单独的画布中创建的图像用作 Three.js 纹理。我认为最好的解决方案是在 2D 中创建动态纹理,而不是尝试在 Three.js 中混合和混合多个纹理(可能,但复杂且有限的控制),然后完全使用 Three.js到罐头。
您可以手动创建画布图像或使用您选择的画布图像处理库(一些可能性:https ://docs.google.com/spreadsheet/ccc?key=0Aqj_mVmuz3Y8dHNhUVFDYlRaaXlyX0xYSTVnalV5ZlE#gid=0 )。或者您可以将模板设为 SVG 并对其进行修改(应该很简单),将其渲染到画布上,然后将其用作纹理。
使用画布作为纹理非常简单:
var canvas = document.createElement('canvas');
canvas.width = 512;
canvas.height = 512;
var context = canvas.getContext('2d');
// drawing something here....
context.font = "Bold 20px Helvetica";
context.lineWidth = 4;
context.strokeStyle = 'rgba(255,255,255,.8)';
context.fillStyle = "rgba(0,0,0,1)";
context.strokeText("Testing", 4, 22);
context.fillText("Testing", 4, 22);
var texture = new THREE.Texture(canvas);
texture.needsUpdate = true;