Проблема с рисованием нескольких текстур в WebGL - PullRequest
0 голосов
/ 08 мая 2020

Я разрабатываю небольшое упражнение в WebGL, чтобы начать обучение, которое состоит в загрузке простой геометрии с текстурами. Однако у меня возникла небольшая проблема с рендерингом мешей с текстурами.

Дело в том, что у меня есть основной код, который загружает 2 треугольника и 2 квадрата и генерирует текстуру для одного. треугольников, и все это отображается идеально.

One Texture Rendering

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

like this.

Я не уверен, что делаю не так, поскольку он работает немного иначе, чем OpenGL. Я снова посмотрел на код и не понял. Код для рендеринга каждого объекта - это следующий шаг (немного жестко запрограммированный, но предназначен только для изучения WebGL), который просто связывает буфер с атрибутами Position и TextureCoordinates, отправляет некоторые униформы и dr aws:

        gl.bindBuffer(gl.ARRAY_BUFFER, mesh.getID());
        gl.vertexAttribPointer(shader_bound.vPosAttr, 3, gl.FLOAT, false, 20, 0);        
        gl.vertexAttribPointer(shader_bound.vTCoordAttr, 2, gl.FLOAT, false, 20, 12);

        shader_bound.SetUniformMat4f("u_ModelMatrix", mesh.getModelMatrix());
        shader_bound.SetUniformVec4f("u_Color", mesh.getMeshColor());   
        shader_bound.SetUniform1i("u_UseTextures", 0);

        if(mesh.getMeshTexture() != null)
        {
            gl.activeTexture(gl.TEXTURE0);
            gl.bindTexture(gl.TEXTURE_2D, mesh.getMeshTexture().getTexture());
            shader_bound.SetUniform1i("u_AlbedoTexture", 0);
            shader_bound.SetUniform1i("u_UseTextures", 1);
        }

        gl.drawArrays(gl.TRIANGLES, 0, mesh.getVertexNumber());
        gl.bindBuffer(gl.ARRAY_BUFFER, null);
        gl.bindTexture(gl.TEXTURE_2D, null);

Шейдер очень базовый c, единственное, что он делает, это определяет, есть ли у него текстура или нет (с униформой «u_UseTextures»), и на основе этого рисует меня sh с цветом или с текстурой * цвет.

Кто-нибудь видит, где ошибка? Спасибо!

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

Console Logs

...