T.M. SoftStudio

feci quod potui, faciant meliora potentes

Библиотека GLU.js


Библиотека GLU.js (https://github.com/rbeitra/GLU.js) упрощает использование программного интерфейса WebGL API, определяя объект-обертку GLU, предназначенный для инкапсуляции canvas-контекста, униформ, шейдеров, программ, буферов данных, текстур, материалов, модели и кадрового буфера.


glu = new GLU.Context();


Создается пустой GLU-объект, предназначенный для инкапсуляции canvas-контекста, униформ, шейдеров, программ, буферов, текстур, материалов, модели и кадрового буфера.




glu.initGL(canvas);


Инициализирует GLU-объект, определяя HTML-элемент canvas.




gl = glu.gl;



Возвращает canvas-контекст.




gluUniform = glu.Uniform(uniformName, type, data, positions)


Определяет униформу:

uMVMatrix = glu.Uniform('uMVMatrix', 'Matrix4fv', {matrix: mvMatrix, transpose: false}, ['transpose', 'matrix']); uPMatrix = glu.Uniform('uPMatrix', 'Matrix4fv', {matrix: pMatrix, transpose: false}, ['transpose', 'matrix']);

gluUniform.bind(program)


Связывает униформу с программой.




gluShader = glu.Shader(id, shaderString, isVertex)


Определяет шейдер:

glushaderfs = glu.Shader('shader-fs'); glushadervs = glu.Shader('shader-vs');



gluProgram = glu.Program(shaders, attributes, uniforms)


Определяет программу:

gluProgram = glu.Program( [glu.Shader('shader-fs'), glu.Shader('shader-vs')] );

gluProgram.bind()


Применяет функции gl.useProgram() и gl.enableVertexAttribArray().



gluProgram.unbind()


Применяет функцию gl.disableVertexAttribArray().


gluProgram.setupAttribute(attributeName)



Добавляет в программу вершинный атрибут.



gluProgram.setupUniform(uniformName)



Добавляет в программу униформу.





gluBuffer = glu.Buffer(mode, dataType, itemSize, drawMode)


Определяет буфер хранения данных.



gluBuffer.bind()


Для canvas-контекста определяет данный буфер с помощью функции gl.bindBuffer().



gluBuffer.unbind()


Для canvas-контекста определяет нулевой буфер с помощью функции gl.bindBuffer().



gluBuffer.setArray(array)


Определяет данные буфера на основе массива данных, используя функции gluBuffer.arrayToTypedArray(array, type) и gluBuffer.setData(data).



gluBuffer.setData(data)


Определяет данные буфера с помощью метода gl.bufferData().



gluBuffer.arrayToTypedArray(array, type)


Для указанного типа данных возвращает данные:

gl.BYTE:

data = new Int8Array(array);

gl.UNSIGNED_BYTE:

data = new Uint8Array(array);

gl.SHORT:

data = new Int16Array(array);

gl.UNSIGNED_SHORT:

data = new Uint16Array(array);

gl.INT:

data = new Int32Array(array);

gl.UNSIGNED_INT:

data = new Uint32Array(array);

gl.FLOAT (по умолчанию):

data = new Float32Array(array);



gluBuffer.checkBuffer(buffer)


Применяет метод gl.isBuffer(buffer).




gluTexture = glu.Texture()


Определяет пустой объект текстуры с помощью метода gl.createTexture().



gluTexture.bind()


Для canvas-контекста определяет данную 2D-текстуру с помощью метода gl.bindTexture().



gluTexture.unbind()


Для canvas-контекста определяет нулевую текстуру с помощью метода gl.bindTexture().



gluTexture.setImage(image, makePowerOfTwo)


Определяет изображение 2D-текстуры, используя WebGL-метод void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, ImageData? pixels). Если значение параметра makePowerOfTwo не равно false, тогда изображение оптимизируется таким образом, чтобы разрешение текстуры было степень двойки (128x128, 256x256, 512x512, 1024x1024, и т.д.).



gluTexture.setFloatData(floatArray, width, height, format)


Определяет 2D текстурное изображение из массива данных, используя WebGL-метод void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ArrayBufferView? Pixels).



gluTexture.setupRenderBuffer(width, height)


Применяет метод gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null).



gluTexture.setWrapClamp()


Определяет свойства текстуры TEXTURE_WRAP_S и TEXTURE_WRAP_T как CLAMP_TO_EDGE.



gluTexture.setWrapRepeat()


Определяет свойства текстуры TEXTURE_WRAP_S и TEXTURE_WRAP_T как REPEAT.



gluTexture.setFilterNearest()


Определяет свойства текстуры TEXTURE_MAG_FILTER и TEXTURE_MIN_FILTER как NEAREST.



gluTexture.setFilterLinear()


Определяет свойства текстуры TEXTURE_MAG_FILTER и TEXTURE_MIN_FILTER как LINEAR.



gluTexture.setFilterMipmap().


Определяет свойства текстуры TEXTURE_MAG_FILTER и TEXTURE_MIN_FILTER как LINEAR.



gluTexture.createMipmapIfNeeded()


При значении параметра TEXTURE_MIN_FILTER как LINEAR_MIPMAP_LINEAR вызывается метод gl.generateMipmap(gl.TEXTURE_2D).



gluTexture.loadImage(url, makePowerOfTwo, onComplete)


Определяет изображение 2D-текстуры, загружая изображение по URL-адресу и затем применяя метод gluTexture.setImage(image, makePowerOfTwo). Функция onComplete вызывается после вызова метода setImage.



gluTexture.createPowerOfTwoImage(image)


Изображение оптимизируется таким образом, чтобы разрешение текстуры было степень двойки (128x128, 256x256, 512x512, 1024x1024, и т.д.).



gluTexture.isPowerOfTwo(x)


Проверяет, удовлетворяет ли размер правилу двойки.



gluTexture.nextHighestPowerOfTwo(x)


Масштабирует размер до размера, удовлетворяющего правилу двойки.




gluMaterial = glu.Material(program, textures)


Определяет программу, текстуры, режим смешивания и тип примитивов модели.



gluMaterial.bind()


Применяет функции gl.useProgram() и gl.enableVertexAttribArray(), а также функцию gl.bindTexture().



gluMaterial.unbindTextures()


Применяет функцию gluTexture.unbind().



gluMaterial.getGLTextureSlot(id)


Возвращает идентификатор текстуры по ее индексу, например, gl.TEXTURE4.



gluMaterial.unbind()


Применяет функции gluMaterial.unbindTextures() и gluProgram.unbind().



gluMaterial.blendingDefault()


Вызывает функции gl.enable(gl.BLEND), gl.enable(gl.DEPTH_TEST), gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE), gl.enable(gl.CULL_FACE), gl.cullFace(gl.BACK).



gluMaterial.blendingDoubleSided()


Вызывает функции gl.enable(gl.BLEND), gl.enable(gl.DEPTH_TEST), gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE), gl.disable(gl.CULL_FACE).



gluMaterial.blendingParticles()


Вызывает функции gl.enable(gl.BLEND), gl.disable(gl.DEPTH_TEST), gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE), gl.disable(gl.CULL_FACE).



gluMaterial.blendingNone()


Вызывает функции gl.disable(gl.BLEND), gl.disable(gl.DEPTH_TEST), gl.disable(gl.CULL_FACE).



gluMaterial.setModeTriangles()



В качестве примитивов модели устанавливаются треугольники.



gluMaterial.setModeLines()


В качестве примитивов модели устанавливаются линии.



gluMaterial.setModePoints()


В качестве примитивов модели устанавливаются точки.




gluGeometry = glu.Geometry(buffers)


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



gluGeometry.makeRect(subH, subV, width, height, color, vertexName, texName, colorName, normalName)


Определяет буферы для прямоугольника:

gluGeometry = glu.Geometry(); gluGeometry.makeRect(1, 1, 2, 2, {r: 1, g: 1, b: 0, a: 1}, 'aVertexPosition', 'aColor');

gluGeometry.makeSphere(segmentsH, segmentsV, radius, color, vertexName, texName, colorName, normalName)



Определяет буферы для сферы:



gluGeometry = glu.Geometry();

gluGeometry.makeSphere(32, 16, 0.5, {r: 1, g: 0, b: 1, a: 1}, 'aVertexPosition', 'aTextureCoord', 'aColor', 'aNormal');



gluGeometry.makeCube(width, height, depth, color, vertexName, texName, colorName, normalName)


Определяет буферы для куба:

gluGeometry = glu.Geometry();

gluGeometry.makeCube(2, 2, 2, colors, 'aVertexPosition', 'aTextureCoord', 'aColor', 'aNormal');



gluGeometry.makeFromArrays(indexArray, vertexArray, vertexName, texArray, texName, colorArray, colorName, normalArray, normalName)


Определяет буферы на основе массивов данных.



gluGeometry.mergePoints(precision, indexArray, vertexArray, texArray, colorArray, normalArray)


Производит слияние точек с указанной точностью.




gluObject = glu.Object(geometry, material, uniforms)


Инкапсулирует геометрию, материалы и униформы, обеспечивая визуализацию графического объекта.



gluObject.bind()


Применяет методы gluMaterial.bind(), gluBuffer.bind(), gluUniform.bind(program) и gl.vertexAttribPointer().



gluObject.unbind()


Применяет методы gluMaterial.unbind() и gluBuffer.unbind().



gluObject.updateUniform(uniform)


Применяет метод gluUniform.bind(program).



gluObject.draw()


Визуализирует графический объект.



gluObject.drawNum(num)


Применяет функцию gl.drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset).




gluFramebuffer = glu.Framebuffer()


Создает кадровый буфер, используя методы gl.createFramebuffer(), gl.bindFramebuffer(), gl.createRenderbuffer(), gl.bindRenderbuffer(), gluFramebuffer.checkRenderbuffer(renderbuffer), gluFramebuffer.checkFramebuffer(framebuffer), gluTexture.bind(), gl.framebufferTexture2D(), gl.framebufferRenderbuffer(), gl.bindRenderbuffer() и gl.bindFramebuffer().



gluFramebuffer.bind()


Для canvas-контекста определяет данный кадровый буфер с помощью метода gl.bindFramebuffer().



gluFramebuffer.unbind()


Для canvas-контекста определяет нулевой кадровый буфер с помощью метода gl.bindFramebuffer().



gluFramebuffer.setSize(width, height)


Если размеры текстуры не совпадают с указанными, применяет метод gluTexture.setupRenderBuffer(width, height).



gluFramebuffer.checkRenderbuffer(renderbuffer)


Применяет метод gl.isRenderbuffer(renderbuffer).


gluFramebuffer.checkFramebuffer(framebuffer)


Применяет методы gl.isFramebuffer(framebuffer) и gl.checkFramebufferStatus(gl.FRAMEBUFFER).