forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   JavaScript / HTML (http://forum.boolean.name/forumdisplay.php?f=136)
-   -   WebGL глюк с полигональной сетью (http://forum.boolean.name/showthread.php?t=16901)

ІГРОГРАЙКО 13.06.2012 12:28

WebGL глюк с полигональной сетью
 
Вложений: 2
Привет.
Проблема: Не получается построить полигональную сетку размерностью 32*32*32 квада.

Вот мой код:
Код:

        function fillQuad(xn,yn,zn) {
        var vertices = new Array();                                                                        //Масив вершин
        var sc_x = xn / 2;
        var sc_y = yn / 2;
        var sc_z = zn / 2;
        var iz,iy,ix;
                for (iz = -sc_z; iz < sc_z; iz++)
                {
                        for (iy = -sc_y; iy < sc_y; iy++)
                        {
                                for (ix = -sc_x; ix < sc_x; ix++)
                                {
                                        vertices.push(ix, iy+1, iz);                                //додавання кординати вершини до масиву
                                        vertices.push(ix+1, iy+1, iz);
                                        vertices.push(ix+1, iy, iz);
                                        vertices.push(ix, iy, iz);
                                }
                        }
                }
        return vertices;
        }

        function fillBuffer(length) {
        var indecises = new Array();       
        alert(length);
                for (var n = 0; n < length ; n = n + 4)
                {
                        indecises.push(n, n+1, n+2);
                        indecises.push(n, n+2, n+3);
                        bar.value = n / length * 1000;
                }
        return indecises;
        }

            function initBuffers() {
                QuadVertexPositionBuffer = gl.createBuffer();
                gl.bindBuffer(gl.ARRAY_BUFFER, QuadVertexPositionBuffer);                //Тип заповнення буферу
                var tWidth = 16;                        //розмірність по осі X
                var tHeight = 16;                        //розмірність по осі Y
                var tDepth = 16;                        //розмірність по осі Z
                var QuadMass = new Array();
                QuadMass = fillQuad(tWidth,tHeight,tDepth);        //Вершини фронтальних полігонів
                gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(QuadMass), gl.STATIC_DRAW);
               
                //Запис індексів вершин мешу
                QuadIndecises = gl.createBuffer();
                gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, QuadIndecises);
                var Indecises = new Array();
                Indecises = fillBuffer(tWidth * tHeight * tDepth * 6);
                gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(Indecises), gl.STATIC_DRAW);
                QuadIndecises.numItems = tWidth * tHeight * tDepth;
            }

        function drawScene() {
        gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

                //Перспектива
        mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 1000.0, pMatrix);
        mat4.identity(mvMatrix);

                //Переміщення
                animate();
        mat4.translate(mvMatrix, [0.0, 0.0, -80.0]);
                mat4.rotate(mvMatrix, camR, [1, 1, 1]);
               
                //Надсилання обєктів на обробку в шейдерну програму
                //Масив вершин
        gl.bindBuffer(gl.ARRAY_BUFFER, QuadVertexPositionBuffer);
        gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);
                //Індекси вершин
                gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, QuadIndecises);
                //Обробка трансформацій матриць
        setMatrixUniforms();
               
                //Вивід
        gl.drawElements(gl.TRIANGLES, QuadIndecises.numItems * 6, gl.UNSIGNED_SHORT, 0);
    }

Вложение 17033

Но если:

Код:

            function initBuffers() {
                QuadVertexPositionBuffer = gl.createBuffer();
                gl.bindBuffer(gl.ARRAY_BUFFER, QuadVertexPositionBuffer);                //Тип заповнення буферу
                var tWidth = 32;                        //розмірність по осі X
                var tHeight = 32;                        //розмірність по осі Y
                var tDepth = 32;                        //розмірність по осі Z

                var QuadMass = new Array();
                QuadMass = fillQuad(tWidth,tHeight,tDepth);        //Вершини фронтальних полігонів
                gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(QuadMass), gl.STATIC_DRAW);
               
                //Запис індексів вершин мешу
                QuadIndecises = gl.createBuffer();
                gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, QuadIndecises);
                var Indecises = new Array();
                Indecises = fillBuffer(tWidth * tHeight * tDepth * 6);
                gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(Indecises), gl.STATIC_DRAW);
                QuadIndecises.numItems = tWidth * tHeight * tDepth;
            }

то:
Вложение 17032

Я не знаю в чем ошибка. Помогите пожалуйста.

ІГРОГРАЙКО 15.06.2012 02:08

Ответ: WebGL глюк с полигональной сетью
 
...мда видимо никто с этим ране не сталкивался...

moka 15.06.2012 14:31

Ответ: WebGL глюк с полигональной сетью
 
Не писал на WGL, но убедись что ты создал буффер нужного размера (размер указывается в битах, или в количестве переменных на вершину и т.п.)
Также буффер для индексов.
Затем когда указываешь какой буффер и сколько данных из него рендерить, убедись что и там указал правельные данные.
Т.к. можно пихать то что не лезет, и рендерить часть буффера, при этом WGL на это ничего не возразит.

ІГРОГРАЙКО 18.06.2012 03:22

Ответ: WebGL глюк с полигональной сетью
 
Вложений: 1
Все проверил - перепроверил по 10 раз. Результат не изменился.
Я залью свой проджект, чтобы вы смогли его попробовать у себя:
WEBRENDER
Вложение 17043
Пожалуйста дайте мне знать если у вас оно будет отображаться по другому.

ABTOMAT 18.06.2012 04:10

Ответ: WebGL глюк с полигональной сетью
 
Отображается как на скрине.

moka 18.06.2012 14:18

Ответ: WebGL глюк с полигональной сетью
 
Русский текст на странице не распознаётся, добавь соответствующий хтмл сверху.


Часовой пояс GMT +4, время: 10:11.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot