【发布时间】:2017-03-17 16:00:09
【问题描述】:
我正在学习three.js,尝试转换图像。
我真的很喜欢here.显示的效果
我需要遵循哪些步骤才能转换类似的图像?
到目前为止我有:
// instantiate a loader
var loader = new THREE.TextureLoader();
// load a resource
loader.load(
// resource URL
'clouds.jpg',
// Function when resource is loaded
function (texture) {
init(new THREE.MeshBasicMaterial({
map: texture
}));
},
// Function called when download progresses
function (xhr) {
console.log((xhr.loaded / xhr.total * 100) + '% loaded');
},
// Function called when download errors
function (xhr) {
console.log('An error happened');
}
);
var init = function(material) {
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
var rectLength = window.innerHeight;
var rectWidth = window.innerWidth;
var rectShape = new THREE.Shape();
rectShape.moveTo(0,0);
rectShape.lineTo(0, rectWidth);
rectShape.lineTo(rectLength, rectWidth);
rectShape.lineTo(rectLength, 0);
rectShape.lineTo(0, 0);
var geometry = new THREE.ShapeGeometry(rectShape);
var cube = new THREE.Mesh(geometry, material);
scene.add(cube);
camera.position.z = 1;
var render = function () {
requestAnimationFrame(render);
renderer.render(scene, camera);
};
render();
}
这会将我的图像呈现为平面 2D 形状,但我不知道如何将效果应用于图像。猜测这需要在 render 内部发生,但不确定如何。
或者我最好在普通的 WebGL 中执行此操作?
非常感谢任何提示/建议/教程!
【问题讨论】:
-
您正在使用THREE.MeshBasicMaterial。查看THREE.ShaderMaterial。这种环绕效果可以通过修改着色器中的 uv 坐标来完成(为了使其响应,您可以将当前鼠标坐标/时间作为统一传递)
标签: javascript three.js webgl