Например, во Flash (Actionscript) я мог избавиться от двойных кавычек и плюсов на строку кода шейдера (AGAL), просто используя CDATA с единственным требованием выровнять код по левому краю следующим образом:

// VERTEX SHADER CODE
var vertexShader:String = <![CDATA[
// varying registers: v1, v2, v3
// temp reg: vt0

m44 vt0, va0, vc0                       // transform vertices in world space with model matrix --> vt0  
sub v3, vc16, vt0                       // interpolate direction to light --> v3

m44 op, vt0, vc8                        // append the tranformed vertices to view-projection matrix in order to transform to clip space and output position
m44 v1, va1, vc4                        // transform normals with transposed & inverted modelmatrix and interpolate --> v1
mov v2, va2                             // interpolate uvs --> v2

]]>;

Можно ли аналогичным образом избавиться от двух кавычек и запятой в строке в three.js (Javascript)?

var fspass1 = [ 
"varying vec2 vUv;",
"uniform float time;",

"void main() {",

"float r = vUv.x;",
"if( vUv.y < 0.5 ) r = 0.0;",
"float g = vUv.y;",
"if( vUv.x < 0.5 ) g = 0.0;",

"gl_FragColor = vec4( r, g, time, 1.0 );",

"}"
].join("\n")

Я пробовал следующее, но это НЕ работает:

var fspass1 = "<![CDATA[

varying vec2 vUv;
uniform float time;

void main() {

float r = vUv.x;
if( vUv.y < 0.5 ) r = 0.0;
float g = vUv.y;
if( vUv.x < 0.5 ) g = 0.0;

gl_FragColor = vec4( r, g, time, 1.0 );

}
]]>";

Я делаю что-то неправильно? Есть решение? Это действительно отвлекает, отнимает много времени, удобен для пользователя и в наши дни неловко использовать глупые двойные кавычки, запятые и т. Д. в строке кода , чтобы быть ... понятным рамкой. Это должно быть умнее, программы должны делать нашу жизнь проще, а не труднее!

0
user5515 26 Фев 2018 в 17:34

1 ответ

Лучший ответ

Отсутствие примеров в файлах JS вместо внутренних тегов сценария в файлах HTML и сходство обратной кавычки с одинарной кавычкой было причиной моего замешательства, и я уверен, что больше людей, которые все еще используют кавычки, запятые или плюсы, в том числе во многих Примеры three.js.

Итак, решение заключалось в использовании «шаблонных литералов», то есть в том, чтобы просто заключить весь многострочный код шейдера обратными кавычками , как показано ниже! Это серьезное повышение эффективности, спасение жизни! :)

Следующий код работает, без кавычек в каждой строке и без запятых!

var fspass1 =
    `varying vec2 vUv;

    uniform float time;

    void main() {

        float r = vUv.x;

        if( vUv.y < 0.5 ) r = 0.0;
        float g = vUv.y;

        if( vUv.x < 0.5 ) g = 0.0;
        gl_FragColor = vec4( r, g, time, 1.0 );

    }`;

За 24 года до сих пор я ни разу не использовал обратную кавычку, поэтому для ее ввода просто нажмите кнопку слева от числа «1».

1
user5515 1 Мар 2018 в 21:22