Во-первых, я задаю этот вопрос уже второй раз. В первый раз мне дали много разных советов, которые я применил при ответе на этот новый вопрос.
В настоящее время я работаю над средством рендеринга 2D-плиток. Я обнаружил, что переключение VAO слишком снижает производительность. Поэтому я решил упаковать плитку партиями. Мне удалось визуализировать каждую плитку в сетке определенного размера. Я решил, что буду использовать один текстурный атлас, и чтобы задать каждую текстуру, я просто изменю их текстурные координаты. Я решил, что сделаю это с помощью SSBO и что внутри шейдера я буду использовать gl_InstanceId, чтобы определить, какой набор вершин или координат текстуры использовать. На данный момент я просто применил ко всем из них одни и те же координаты текстуры, а позже изменю это.
Однако проблема в том, что текстура не применяется к каждой плитке. , отображается только один тексел, в результате чего получается один сплошной цвет.
Вот результат
Некаркасная визуализация
Вот это каркасный вариант
каркасный рендер
наконец, вот мой минимальный воспроизводимый пример; (обратите внимание, что единственный внешний код предназначен для класса текстуры. Я тестировал этот класс раньше, и он работал. Я вырезал его, потому что нашел код слишком длинным. Если вы хотите, чтобы я его добавил, дайте мне знать.)
Я знаю, что это долго, но это весь код, и мне удалось отследить проблему (может быть?)
Я думаю, что это может быть как-то связано с координатами текстуры. Хотя я не знаю, как это исправить или даже в чем проблема.
Во-первых, я задаю этот вопрос уже второй раз. В первый раз мне дали много разных советов, которые я применил при ответе на этот новый вопрос. В настоящее время я работаю над средством рендеринга 2D-плиток. Я обнаружил, что переключение VAO слишком снижает производительность. Поэтому я решил упаковать плитку партиями. Мне удалось визуализировать каждую плитку в сетке определенного размера. Я решил, что буду использовать один текстурный атлас, и чтобы задать каждую текстуру, я просто изменю их текстурные координаты. Я решил, что сделаю это с помощью SSBO и что внутри шейдера я буду использовать gl_InstanceId, чтобы определить, какой набор вершин или координат текстуры использовать. На данный момент я просто применил ко всем из них одни и те же координаты текстуры, а позже изменю это. Однако проблема в том, что текстура не применяется к каждой плитке. , отображается только один тексел, в результате чего получается один сплошной цвет. Вот результат Некаркасная визуализация Вот это каркасный вариант каркасный рендер наконец, вот мой минимальный воспроизводимый пример; (обратите внимание, что единственный внешний код предназначен для класса текстуры. Я тестировал этот класс раньше, и он работал. Я вырезал его, потому что нашел код слишком длинным. Если вы хотите, чтобы я его добавил, дайте мне знать.) Я знаю, что это долго, но это весь код, и мне удалось отследить проблему (может быть?) Я думаю, что это может быть как-то связано с координатами текстуры. Хотя я не знаю, как это исправить или даже в чем проблема. [code]package test;
float[] test = new float[]{ 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f };
int index = 0; for (int x = 0; x < mapWidth; x++) { for (int y = 0; y < mapHeight; y++) { float xPos = (float) x * tileSize; float yPos = (float) y * tileSize; offsets[index++] = xPos; offsets[index++] = yPos; } } index = 0; for(int i = 0; i < mapWidth * mapHeight * 8; i++) { texPos[i] = test[index];
// Store vertex data off-heap FloatBuffer vertexData = MemoryUtil.memAllocFloat(vertices.length); vertexData.put(vertices).flip();
// Create and bind VBO for vertices int vboId = glGenBuffers(); glBindBuffer(GL_ARRAY_BUFFER, vboId); glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0); glEnableVertexAttribArray(0); memFree(vertexData);
// Store index data off-heap IntBuffer indexData = MemoryUtil.memAllocInt(indices.length); indexData.put(indices).flip();
// Create and bind IBO for indices iboId = glGenBuffers(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iboId); glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexData, GL_STATIC_DRAW); memFree(indexData);
// Create and bind the SSBO for offsets int ssboId = glGenBuffers(); glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssboId); glBufferData(GL_SHADER_STORAGE_BUFFER, offsetBuffer, GL_STATIC_DRAW); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, ssboId);
// Create and bind the SSBO for texture coordinates usboId = glGenBuffers(); glBindBuffer(GL_SHADER_STORAGE_BUFFER, usboId); glBufferData(GL_SHADER_STORAGE_BUFFER, tpBuffer, GL_STATIC_DRAW); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, usboId);
// Unbind VAO glBindVertexArray(0);
glfwSetKeyCallback(windowId, new GLFWKeyCallback() { @Override public void invoke(long l, int i, int i1, int i2, int i3) { if(i == GLFW_KEY_F1) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glDisable(GL_TEXTURE_2D); } if(i == GLFW_KEY_F2) { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_TEXTURE_2D); } } });
Я создаю средство рендеринга 2D-плиток. Я сделал это очень эффективным, но не могу понять, как наносить текстуры на плитки. Каждая плитка должна иметь текстуру. На данный момент я просто устанавливаю одну текстуру, определенную как «sexyminion.jpg»....
Итак, я пытаюсь создать систему очередей для клона Omegle. Здесь есть пустой словарь «очереди». Всякий раз, когда поступает запрос на публикацию, то есть кто-то нажимает кнопку ЧАТ, может произойти одно из двух.
Я искал везде, но не смог найти тот, который использовал бы DSA (прямой доступ к состоянию). Мне нужен SSBO с динамическим размером, чтобы я мог обновлять свои экземпляры БЕЗ ограничения, например MAX_INSTANCE_COUNT.
На данный момент я делаю...
Я искал везде, но не смог найти тот, который использовал бы DSA (прямой доступ к состоянию). Мне нужен SSBO с динамическим размером, чтобы я мог обновлять свои экземпляры БЕЗ ограничения, например MAX_INSTANCE_COUNT.
На данный момент я делаю...