ПроЭктировщик
Регистрация: 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
|