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

Однако, если я попытаюсь загрузить больше текстур, все текстурированные объекты, кроме объекта с последней загруженной текстурой, не будут визуализировано.
.
Я не уверен, что делаю не так, поскольку он работает немного иначе, чем 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 с цветом или с текстурой * цвет.
Кто-нибудь видит, где ошибка? Спасибо!
Изменить: Я добавил журнал сразу после активации и привязки текстуры в показанном мной коде. В журнале просто отображается имя ограничиваемой текстуры, и оно кажется правильным:
