Я пытаюсь отобразить vbo с 7 компонентами (переплетение справа?). Первые 4 представляют собой x, y, z, w (w - коэффициент масштабирования), а остальные 3 должны использоваться для регулировки яркости в шейдере фрагмента.Точечный рендеринг, чередующийся VBO
Это, как я создать VBO:
std::vector<float> pointCloudData;
while(endOfFile != true){
... // a lot of textfile handling/reading before, total of 100361 coordinates read.
for (int i = 0; i < 4; i++){
pointCloudData.push_back(xyzFromFile[i]); //store the read x y z w coordinate
}
// store extra data
// right now im setting everything to 1.f just to see results in fragment shader!
pointCloudData.push_back(1.f);
pointCloudData.push_back(1.f);
pointCloudData.push_back(1.f);
}
v_size = pointCloudData.size();
// create vbo
glGenVertexArrays(1, &_vaoID);
glGenBuffers(1, &_vboID);
glBindVertexArray(_vaoID);
glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glBufferData(GL_ARRAY_BUFFER, v_size*sizeof(GLfloat), &pointCloudData[0], GL_DYNAMIC_DRAW);
glBindVertexArray(0);
В методе визуализации:
glBindVertexArray(_vaoID);
glBindBuffer(GL_ARRAY_BUFFER, _vboID);
glEnableVertexAttribArray(positionAttrib);
GLsizei stride = sizeof(GLfloat) * 7;
glVertexAttribPointer(positionAttrib, 4, GL_FLOAT, GL_FALSE, stride, (void*)0); // x y z
glVertexAttribPointer(brightnessDataAttrib, 3, GL_FLOAT, GL_FALSE, stride, (void*)(4 * sizeof(GLfloat))); // remaining data
glDrawArrays(GL_POINTS, 0, vertsToDraw);
glDisableVertexAttribArray(positionAttrib);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
Vertex Shader:
layout(location = 0) in vec4 in_position;
layout(location = 2) in vec3 in_brightness;
out vec3 vs_brightness;
void main()
{
vs_brightness = in_brightness;
gl_Position = ViewProjection * vs_position;
}
Фрагмент шейдеры:
in vec3 vs_brightness;
void main(void)
{
diffuse = vec4(vs_brightness[1],0,0,1); // at this point i just want SOMETHING to show up
}
Если это плохой способ, как я могу сделать это по-другому? Как отправить оставшиеся 3 скаляра в шейдер фрагмента? (в общей сложности 3 * 100361 скаляров).
Мне непонятно, каков ваш вопрос. Работает ли опубликованный код, и вы ищете обратную связь? Или у вас проблемы с этим? Если да, какова конкретная проблема? –
Моя особая проблема в том, что vs_brightness (см. Frag) имеет нулевые значения, переданные ей. Таким образом, в моем проекте есть что-то очень неудачное. Что это, я понятия не имею, я подозреваю, что это может быть параметр «stride» ... но действительно im clueless ... – mike