2014-10-24 4 views
3

Я пишу некоторый код WebGL и должен визуализировать текстуру с плавающей точкой.
С расширениями gl.getExtension('OES_texture_float'); и gl.getExtension('OES_texture_float_linear'); Теперь я могу создать и нарисовать эту текстуру и использовать линейный фильтр.
Но это просто не кажется правильно рассчитанным.Отображение WebGL для текстуры с плавающей точкой

В основном значения должны получить суммироваться поэтому я использую

gl.blendEquation(gl.FUNC_ADD); 
    gl.blendFunc(gl.SRC_ALPHA, gl.ONE); 
    gl.enable(gl.BLEND); 
    gl.disable(gl.DEPTH_TEST); 

при визуализации в текстуру. Также может произойти добавление отрицательных значений.

Теперь после нескольких часов прибегая к помощи я наткнулся на это: WEBGL_color_buffer_float extension

До сих пор я использовал команду

gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, rttFramebuffer.width, rttFramebuffer.height, 0, gl.RGBA, gl.FLOAT, null); 

, но я думаю, что нужно использовать вместо RGBA32F. Возможно ли это, и если да, то как я могу использовать формат расширения?


РЕШЕНИЕ: Как было предложено, ошибок в используемом формате не было. Я назначил некоторые неправильные значения шейдерной форме и использовал очень неблагоприятный цвет фона, который приводит к неправильной визуализации.

ответ

8

gl.getExtension('OES_texture_float_linear'); не дает вам текстуры с плавающей точкой. Это дает вам возможность использовать фильтрацию LINEAR для текстур с плавающей запятой. gl.getExtension('OES_texture_float'); дает вам возможность создавать текстуры с плавающей запятой.

Что касается этого

gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, rttFramebuffer.width, rttFramebuffer.height, 
       0, gl.RGBA, gl.FLOAT, null); 

Это правильно. В WebGL нет RGBA32F. Выводить по: gl.RGBA, gl.FLOAT

Да, это глупо. Этот надзор был зафиксирован в OpenGL ES 3.0 и будет исправлен в WebGL 2.0, но в текущем WebGL, так вы создаете текстуру с плавающей точкой.

+0

О да, я просто скопировал неправильное расширение из своего кода. Спасибо за точку на RGBA32F. У вас есть идеи, почему он не будет правильно рисовать текстуру? Похоже, что смешение не работает при записи float в текстуру. – phen

Смежные вопросы