Как разрешить прозрачный оверлей в WebGL? [Дубликат]

Идентификатор ресурса TextView, который ему нужен, предназначен для файла макета TextView, поэтому он не будет находиться в одном и том же действии.

Вы можете создать его, выбрав File> New> XML> XML Layout File и введите тип виджета, который является «TextView» в поле корневого тега.

Источник: https://www.kompulsa.com/the-simplest-way-to-implement-an-android-listview/

12
задан Jack Sean 5 September 2012 в 03:47
поделиться

2 ответа

WebGL по умолчанию поддерживает альфа-прозрачность, но вы должны использовать его. В основном, убедитесь, что вы установили прозрачный цвет прозрачным, gl.clearColor(0, 0, 0, 0), перед вашей операцией gl.clear.

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

9
ответ дан Kevin Reid 18 August 2018 в 20:14
поделиться

WebGL по умолчанию является прозрачным. Вот пример

const gl = document.getElementById("c").getContext("webgl");
gl.clearColor(0.5, 0, 0, 0.5);
gl.clear(gl.COLOR_BUFFER_BIT);
pre {
    padding-left: 50px;
    font-family: sans-serif;
    font-size: 20px;
    font-weight: bold;
}

canvas {
    z-index: 2;
    position: absolute;
    top: 0px;
    border: 1px solid black;
}
<pre>
Some 
text
under
the
canvas
</pre>
<canvas id="c"></canvas>

Обратите внимание, что браузер предполагает, что пиксели на холсте представляют значения PRE-MULTIPLIED-ALPHA , Это означает, например, если вы изменили прозрачный цвет на (1, 0, 0, 0,5), вы получили бы что-то, чего вы больше не видите в HTML.

Что я имею в виду, умноженная альфа означает, что части RGB таковы, что они уже были умножены на альфа-значение. Итак, если вы начали 1,0,0 для RGB, а ваша альфа - 0,5. Затем, если вы умножаете RGB на альфа, вы получите 0,5, 0, 0 для RGB. Это то, что браузер ожидает по умолчанию.

Если пиксели в WebGL равны 1,0,0,0,5, что не имеет смысла для браузера, и вы получите странные эффекты.

См., например,

const gl = document.getElementById("c").getContext("webgl");
gl.clearColor(1, 0, 0, 0.5);
gl.clear(gl.COLOR_BUFFER_BIT);
pre {
    padding-left: 50px;
    font-family: sans-serif;
    font-size: 20px;
    font-weight: bold;
}

canvas {
    z-index: 2;
    position: absolute;
    top: 0px;
    border: 1px solid black;
}
<pre>
Some 
text
under
the
canvas
</pre>
<canvas id="c"></canvas>

Обратите внимание, что черный текст стал красным, даже если вы 'd думаю, что альфа 0,5 = 50% черного текста и 50% красного холста WebGL. Это потому, что красный не был предварительно умножен.

Вы можете решить эту проблему, убедившись, что значения, которые вы создаете в WebGL, представляют собой предварительно умноженные значения. Или вы можете сообщить браузеру, что ваши пиксели WebGL не являются предварительно умноженное при создании контекста webgl с помощью

const gl = canvas.getContext("webgl", { premultipliedAlpha: false });

Теперь снова работают 1,0,0,0,5 пикселя. Пример:

const gl = document.getElementById("c").getContext("webgl", {
  premultipliedAlpha: false,
});
gl.clearColor(1, 0, 0, 0.5);
gl.clear(gl.COLOR_BUFFER_BIT);
pre {
    padding-left: 50px;
    font-family: sans-serif;
    font-size: 20px;
    font-weight: bold;
}

canvas {
    z-index: 2;
    position: absolute;
    top: 0px;
    border: 1px solid black;
}
<pre>
Some 
text
under
the
canvas
</pre>
<canvas id="c"></canvas>

Как вы это делаете, зависит ваше приложение. Многие программы GL ожидают, что непремультиплексная альфа, поскольку все остальные части HTML5 ожидают премультиплексированную альфу, поэтому WebGL дает вам оба варианта.

12
ответ дан gman 18 August 2018 в 20:14
поделиться
  • 1
    Спасибо за ваше объяснение, это помогло мне больше понять основы WebGL. – Jack Sean 8 September 2012 в 18:33
  • 2
    Что вы подразумеваете под & quot ;, где, поскольку все остальные части HTML5 ожидают премультиплексированной альфа, поэтому WebGL предоставляет вам оба варианта & quot ;? Мне кажется, что когда мы устанавливаем premultipliedAlpha в false, мы получаем ту же непрозрачность, что и с непрозрачностью CSS, которая, кажется, противоположна тому, что вы там говорили. Я думаю, что «все остальные части HTML5» означает все, что использует непрозрачность CSS, и в этом случае я помню, что мы используем rgba() в непремультиплексированном формате. Например, в CSS rgba(1,1,1,0) прозрачен на 100% независимо от значений RGB (без предварительного умножения). – trusktr 2 November 2017 в 02:15
  • 3
    По всем другим частям HTML я имею в виду нормальные образы, 2d холст, видео. CSS не HTML :) – gman 6 November 2017 в 19:18
Другие вопросы по тегам:

Похожие вопросы: