Chciałbym żeby podczas zwiększania instancecount
w glDrawArrayInstanced
kwadraty pojawiały się w około pierwszego, tzn. z taki kolisty wzór, zamiast po prostu leciały w od pierwszego w jedną stronę,
tutaj pokazuje o co chodzi. Na filmiku kwadraty dodają się w górę i w prawo, a ja chciałbym żeby dodawały się jeszcze w "drugą" górę i lewo.
Próbowałem to zrobić w ten sposób, że po prostu gdy dodaje następne kwadraty, przesuwam wszystkie o ich ilość * rozmiar jednego kwadratu, ale albo były one przesuwane źle, tzn. gdzieś daleko poza kamerę uciekały, albo wychodziły dziwne kształty (te dziwne kształty to wychodziły jak próbowałem dziwnych dodawań, mnożeń, odejmowań, więc się nie dziwie :D, ale ważne, że coś próbowałem zdziałać).
Pseudo kod:
struct Instances
{
int instanceX = 10;
int instanceY = 10;
};
Instances instance;
void Draw()
{
UploadInstancesUniforms(&instance);
BindUniforms();
glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, instance.instanceX * instance.instanceY);
}
shader:
#version 460 core
layout(location = 0) out vec2 v_uv;
layout(std140, binding = 0) uniform Camera
{
mat4 mvp_matrix;
mat4 mv_matrix;
mat4 proj_matrix;
};
layout(std140, binding = 1) uniform Instances
{
int instanceX;
int instanceY;
};
void main()
{
const vec4 vertices[] = vec4[](vec4(-0.5, 0.0, -0.5, 1.0),
vec4( 0.5, 0.0, -0.5, 1.0),
vec4(-0.5, 0.0, 0.5, 1.0),
vec4( 0.5, 0.0, 0.5, 1.0));
int x = gl_InstanceIndex / instanceX;
int y = gl_InstanceIndex % instanceY;
gl_Position = mvp_matrix * (vertices[gl_VertexIndex] + vec4(float(x), 0.0, float(y), 0.0));
}
W jaki sposób zmodyfikować ten shader żeby kwadraty dodawały się po każdej stronie?