0

以下のコードでthree.jsパーティクルシステムを作成しようとしています。LinuxホストにインストールされたChromeでは、これは完全に正常に機能しますが、Windows Chromeポータブルで実行しようとすると、最初のレンダリング呼び出しで次のWegGLエラーが発生します。

WebGL:INVALID_OPERATION:vertexAttribPointer:バインドされていないARRAY_BUFFER WebGL:INVALID_OPERATION:drawArrays:属性が正しく設定されていません

...シェーダー構成からのスニペット:..。

    'particle' : {
        uniforms: {
            now: {
                    type: 'f',
                    value: 0
            },
            hitstart: {
                    type: 'f',
                    value: RADIUS
            },
            hitend: {
                    type: 'f',
                    value: RADIUS / 10
            },
            texture: { 
                type: "t", 
                value: 0, 
                texture: THREE.ImageUtils.loadTexture( "img/particle.png" ) 
            },
            color: {
                type: 'v4',
                value: particleColorToVector(this.particleColor,this.particleIntensity)

            }
        },
        attributes: {
            longitude: {
                    type: 'f',
                    value: []
            },
            latitude: {
                    type: 'f',
                    value: []
            },
            longitude_d: {
                    type: 'f',
                    value: []
            },
            latitude_d: {
                    type: 'f',
                    value: []
            },
            created: {
                    type: 'f',
                    value: []
            },
            lifetime: {
                    type: 'f',
                    value: []
            },
            size: {
                type: 'f',
                value: []
            }
        }, vertexShader: [
            'uniform float now;',
            'uniform float hitstart;',
            'uniform float hitend;',

            'attribute float created;',
            'attribute float lifetime;',

            'attribute float longitude;',
            'attribute float latitude;',

            'attribute float longitude_d;',
            'attribute float latitude_d;',

            'attribute float size;',

            'attribute float height;',
            'varying vec3 vNormal;',
            'varying float age;',

...パーティクルシステムの作成...。

function buildParticles() {

    var shader = shaders['particle'];
    var longs = shader.attributes.longitude.value;
    var lats = shader.attributes.latitude.value;
    var destx = shader.attributes.longitude_d.value;
    var desty = shader.attributes.latitude_d.value;
    var lifetimes = shader.attributes.lifetime.value;
    var created = shader.attributes.created.value;
    var sizes = shader.attributes.size.value;

    particles = new THREE.Geometry();
    for (var i = 0; i < particle_count;i++) {

        particles.vertices.push( new THREE.Vector3(0,0,0));
        longs.push(degree_to_radius_longitude(0));
        lats.push(degree_to_radius_latitude(0));
        created.push(tic);
        destx.push(degree_to_radius_longitude(0));
        desty.push(degree_to_radius_latitude(0));
        lifetimes.push(0);
        sizes.push(0);
    }

    var material = new THREE.ShaderMaterial ( {
            uniforms: shader.uniforms,
            attributes: shader.attributes,
            vertexShader: shader.vertexShader,
            fragmentShader: shader.fragmentShader,
            transparent: true,
            blending: THREE.AdditiveBlending,
            depthTest: true
    });

    particleSystem = new THREE.ParticleSystem(
        particles,
        material
    );
    scene.add(particleSystem);
}

VBOがバインドされていない、またはバインドできない理由がわかりません。このトピックに関連して私がこれまでに見つけた問題:

  1. https://github.com/mrdoob/three.js/issues/1985
  2. https://github.com/mrdoob/three.js/issues/2073

しかし、私の場合、どちらも当てはまらないようです。

どんな助けでも大歓迎です;)

4

1 に答える 1

2

記録のために:

頂点シェーダーとフラグメント シェーダーの両方から「さまざまな vec3 vNormal」が使用されていないため削除され、問題が修正されました。ただし、さまざまなプラットフォームで動作が非常に異なる理由が知りたいです。

于 2012-07-09T16:35:30.987 に答える