|
JavaScript / HTML Создание динамической разметки страниц |
13.06.2012, 12:28
|
#1
|
ПроЭктировщик
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений (для 24 пользователей)
|
WebGL глюк с полигональной сетью
Привет.
Проблема: Не получается построить полигональную сетку размерностью 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);
}
Но если:
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;
}
то:
Я не знаю в чем ошибка. Помогите пожалуйста.
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
|
(Offline)
|
|
15.06.2012, 02:08
|
#2
|
ПроЭктировщик
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений (для 24 пользователей)
|
Ответ: WebGL глюк с полигональной сетью
...мда видимо никто с этим ране не сталкивался...
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
|
(Offline)
|
|
15.06.2012, 14:31
|
#3
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: WebGL глюк с полигональной сетью
Не писал на WGL, но убедись что ты создал буффер нужного размера (размер указывается в битах, или в количестве переменных на вершину и т.п.)
Также буффер для индексов.
Затем когда указываешь какой буффер и сколько данных из него рендерить, убедись что и там указал правельные данные.
Т.к. можно пихать то что не лезет, и рендерить часть буффера, при этом WGL на это ничего не возразит.
|
(Offline)
|
|
18.06.2012, 03:22
|
#4
|
ПроЭктировщик
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений (для 24 пользователей)
|
Ответ: WebGL глюк с полигональной сетью
Все проверил - перепроверил по 10 раз. Результат не изменился.
Я залью свой проджект, чтобы вы смогли его попробовать у себя:
WEBRENDER
Пожалуйста дайте мне знать если у вас оно будет отображаться по другому.
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
|
(Offline)
|
|
18.06.2012, 04:10
|
#5
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: WebGL глюк с полигональной сетью
Отображается как на скрине.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
18.06.2012, 14:18
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: WebGL глюк с полигональной сетью
Русский текст на странице не распознаётся, добавь соответствующий хтмл сверху.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:52.
|