Передача целого числа в шейдер для определения длины массива (ThreeJS) - PullRequest
0 голосов
/ 02 мая 2019

Я хочу передать целочисленное значение шейдеру, чтобы определить длину массива.Я передаю его так:

uniforms:{
    num_parcels: { value: ap_props.parcels }
}

ap_props.parcels = 24. Я получаю его в шейдер и пытаюсь применить его так:

uniform int num_parcels;
uniform vec3 air_parcel_position[ num_parcels ];

Я вижу эту ошибку вконсоль браузера:

THREE.WebGLShader: gl.getShaderInfoLog () фрагмент ОШИБКА: 0: 123: '': требуется постоянное выражение ОШИБКА: 0: 123: '': размер массива должен быть константным целочисленным выражением

Я пытался преобразовать num_parcels в константу, но это, похоже, недопустимо.

В любом случае я могу передать целое число в шейдер и использовать его для определения длинымассив?

1 Ответ

0 голосов
/ 02 мая 2019

Я прошу прощения.Я понял, как это сделать.Вот как передать целочисленное значение в шейдер, чтобы определить длину массива:

var velocityShader = new THREE.ShaderMaterial( {
    uniforms:{
        time: { type: 'f', value: 0 },
        bounce: { type: 'f', value: .5 },
        friction: { type: 'f', value: .99 },
        gravity: { type: 'f', value: .1 }
    },
    vertexShader: document.getElementById( 'ortho-vs' ).textContent,
    fragmentShader: "#define NUM_PARCELS " + ap_props.parcels + "\n" + document.getElementById( 'velocity-fs' ).textContent,
    depthTest: false,
    depthWrite: false
} );

Строка, которая начинается с fragShader, является ответом.

...