Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Visual Basic > OpenGL

Ответ
 
Опции темы
Старый 31.05.2011, 21:12   #1
ІГРОГРАЙКО
ПроЭктировщик
 
Аватар для ІГРОГРАЙКО
 
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений
(для 24 пользователей)
Хорошо Вершинный буфер, создание и опирации с ним (WebGL)

Добрый день!

Я недавно начал познавать WebGL и у меня накопилось несколько вопросов.
Есть стандартная процедура заполнения веринного буфера на WebGL:
var squareVertexPositionBuffer;      //JavaScript объект для буффера
    
function initBuffers() {
        
squareVertexPositionBuffer gl.createBuffer();   //создание буффера
        
gl.bindBuffer(gl.ARRAY_BUFFERsquareVertexPositionBuffer);

        
//создание массива вершын
        
vertices = [
             
1.0,  1.0,  0.0,
            -
1.0,  1.0,  0.0,
             
1.0, -1.0,  0.0,
            -
1.0, -1.0,  0.0
        
];
        
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);    //Заполнение буффера
        //Дополнитильные переменные объекта
        
squareVertexPositionBuffer.itemSize 3;
        
squareVertexPositionBuffer.numItems 4;
    } 
Ета функция создает квадрат и вносит его в память...
Дале отрисовка етого же квадратика:
function drawScene() {
        
gl.viewport(00gl.viewportWidthgl.viewportHeight);
        
gl.clear(gl.COLOR_BUFFER_BIT gl.DEPTH_BUFFER_BIT);

        
mat4.perspective(45gl.viewportWidth gl.viewportHeight0.1100.0pMatrix);    //Установка перспективы обзора
        
mat4.identity(mvMatrix);   //Чёто делают с model view матрицей

        
gl.bindBuffer(gl.ARRAY_BUFFERsquareVertexPositionBuffer);
        
//Загрузка вершынного буфера в шейдерную програму
        
gl.vertexAttribPointer(shaderProgram.vertexPositionAttributesquareVertexPositionBuffer.itemSizegl.FLOATfalse00);
        
setMatrixUniforms();   //Обновления всех матриц
        
gl.drawArrays(gl.TRIANGLE_STRIP0squareVertexPositionBuffer.numItems);     //Рисование нашего вершынного буфера
    

Постановка задачи:
Требуетса создать оч большое количество квадратиков не связаных между собой (квад) с возможностю трансформировать, а точнее вращать каждый квадратик относительно положения камеры (то есть спрайты)...
А вот вопросы будут состоять в следующем:
  1. Возможно ли создать все ето большое количество квадов в одном вершинном буфере?
  2. Будит ли потом возможнось вращать отдельный квад относительно камеры?
  3. Сильна ли будет разница в быстроте отрисовки большого количества квадов между однобуферной и многобуферной реализацией?
Пока что ето все...

P.S. Вопросиы мои возможно немного тупые, но ответ на них может дать только хорошый спец по графике...
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
(Offline)
 
Ответить с цитированием
Старый 01.06.2011, 13:08   #2
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Вершинный буфер, создание и опирации с ним (WebGL)

Сообщение от ІГРОГРАЙКО Посмотреть сообщение
Требуетса создать оч большое количество квадратиков не связаных между собой (квад) с возможностю трансформировать, а точнее вращать каждый квадратик относительно положения камеры (то есть спрайты)...
А вот вопросы будут состоять в следующем:
  1. Возможно ли создать все ето большое количество квадов в одном вершинном буфере?
  2. Будит ли потом возможнось вращать отдельный квад относительно камеры?
  3. Сильна ли будет разница в быстроте отрисовки большого количества квадов между однобуферной и многобуферной реализацией?
опыта с WebGL нету, но на С++, Unity и Blitz3d такой подход срабатывал.
ответы:
1. да, один вершинный буфер предпочтительней. техника называется batching.
2. да, если заполнять вершинный буфер каждый кадр заново. это не так дорого, как кажется на первый взгляд.
3. разница должна быть очень большой. современные видеокарты и драйвера для них расчитаны на отрисовку нескольких тысяч треугольников за один draw call. рисовать по два треугольника за дип - это пустая трата электроэнергии.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо ffinder за это полезное сообщение:
Dream (01.06.2011), pax (02.06.2011), ІГРОГРАЙКО (02.06.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com