Использование gl_FragCoord для создания отверстия в квад - PullRequest
2 голосов
/ 24 марта 2011

Я изучаю WebGL и хотел бы сделать следующее:

Создайте трехмерный четырехугольник с квадратным отверстием в нем, используя фрагментный шейдер.

Похоже, мне нужно установить gl_FragColor на основе gl_FragCoord соответственно.

Так я должен:

a) Преобразовать gl_FragCoord из координат окна в координаты модели, выполнить соответствующую проверку геометрии и установить цвет.

OR

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

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

Мой опыт - старый таймер OpenGL, который не поспевал за новой парадигмой языка шейдинга и теперь пытается наверстать упущенное ...

Редактировать (27.03.2011):

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

Квадраты с отверстиями - пример

Quads with holes - example

1 Ответ

4 голосов
/ 24 марта 2011

Самый простой способ - с помощью текстурных координат. Просто предоставьте corrds в качестве массива дополнительных атрибутов, а затем перейдите к фрагментному шейдеру, используя переменную. Шейдеры должны содержать что-то вроде:

вершина:

attribute vec3 aPosition;
attribute vec2 aTexCoord;

varying vec2 vTexCoord;

void main(){
     vTexCoord=aTexCoord;
     .......
}

фрагмент:

varying vec2 vTexCoord;

void main(){
     if(vTexCoord.x>{lower x limit} && vTexCoord.x<{upper x limit} && vTexCoord.y>{lower y limit} && vTexCoord.y<{upper y limit}){
discard; //this tell GFX to discard this fragment entirly
}
.....
}
...