2

我是 ThreeJS 的新手。我想为场景设置 BG 图像,当我运行以下代码时,我只有空白(黑色)屏幕。

谁能告诉我以下代码中的问题是什么?

$().ready(function(){

    var width= window.innerWidth;
    var height = window.innerHeight;

    var renderer = new THREE.WebGLRenderer({antialias: true});
    renderer.setSize( width, height );
    document.body.appendChild(renderer.domElement);
    renderer.setClearColorHex(0xffffff, 1.0);
    // renderer.clear(); 


    /*SEttingup BG*/
    var bg = new THREE.Mesh(
      new THREE.PlaneGeometry(2, 2, 0,0),
      new THREE.MeshBasicMaterial({map: new THREE.ImageUtils.loadTexture("2/bharatpriyankaweddingphotography (6).jpg")})
    );

    // The bg plane shouldn't care about the z-buffer.
    bg.materials[0].depthTest = false;
    bg.materials[0].depthWrite = false;
    console.log(bg);
    var bgScene = new THREE.Scene();
    var bgCam = new THREE.Camera();
    bgScene.add(bgCam);
    bgScene.add(bg);

    // renderer.autoClear = false;
    renderer.clear();
    renderer.render(bgScene, bgCam);
    // renderer.render(scene, cam);

    });

提前致谢。

4

3 回答 3

2

听上去,我相信您想使用着色器将飞机投影到屏幕上并将其用作背景。这并不像看起来那么简单,据我所知,three.js 将需要一个自定义着色器,(除非您想在 three.js 中处理投影矩阵)。

着色器本身很简单,我最近在 webgl facebook 组上回答了一个类似的问题,粘贴了答案:

var yourPlaneGeometry = new THREE.PlaneGeometry(2,2,1,1);

着色器

varying vec2 vUv;

void main() {
vUv = uv;
vec4 transformedPos = vec4( position.xy, 0.01, 1.0 );
gl_Position = transformedPos;
}

这会将标准 three.js 平面呈现为全屏四边形

//read the uv value from the vertex shader
varying vec2 vUv;
uniform sampler2D yourTexture; 
void main(){
vec3 tex = texture2d(yourTexture,vUv).xyz;
gl_FragColor = vec4(tex, 1.0);
}

您需要使用这两个作为顶点和片段着色器创建一个 shaderMaterial,并且您可能希望将深度测试设置为 false

于 2014-01-29T03:20:58.563 回答
1

如果你的画布要用完整个窗口,那么你也可以通过 CSS 设置背景。例如:

<style type="text/css">
body{
  margin: 0px;
  overflow: hidden;
  background-image:url('foo.jpg');
  background-color:blue;  
}
</style>
于 2013-03-06T21:03:12.173 回答
0

您的相机没有位置或目标。

于 2013-03-05T17:42:59.230 回答