Я создаю средство рендеринга 2D-плиток. Я сделал это очень эффективным, но не могу понять, как наносить текстуры на плитки. Каждая плитка должна иметь текстуру. На данный момент я просто устанавливаю одну текстуру, определенную как «sexyminion.jpg». По сути, я хотел, чтобы это было множество миньонов в мозаичном рендеринге. В программе вы увидите что-то похожее, за исключением того, что на каждой плитке будет отображаться только верхний правый пиксель текстуры, а не вся текстура. Таким образом, в основном каждое изображение представляет собой один цвет. Я проверил через каркас. Это проблема с текстурой.
Вот мой код
#version 330 core
out vec4 fragColor;
uniform sampler2D texture_sampler;
in vec2 outTP;
void main() {
fragColor = texture(texture_sampler, outTP);
}
Я убедился, что координаты текстуры передаются. Я убедился, что сэмплер текстур установлен. Я убедился, что все было связано. Я думаю, проблема может быть связана с координатами моей текстуры.
Я создаю средство рендеринга 2D-плиток. Я сделал это очень эффективным, но не могу понять, как наносить текстуры на плитки. Каждая плитка должна иметь текстуру. На данный момент я просто устанавливаю одну текстуру, определенную как «sexyminion.jpg». По сути, я хотел, чтобы это было множество миньонов в мозаичном рендеринге. В программе вы увидите что-то похожее, за исключением того, что на каждой плитке будет отображаться только верхний правый пиксель текстуры, а не вся текстура. Таким образом, в основном каждое изображение представляет собой один цвет. Я проверил через каркас. Это проблема с текстурой. Вот мой код [code]package gfx;
public class TileMap { private final int mapWidth, mapHeight; private float tileSize = 0.1f; private final int vaoId; private final int iboId; public float camX = 0.0f, camY = 0.0f; public float scale = 1.0f;
private int usboId; Texture tt;
ShaderProgram shaderProgram;
private final float[] vertices; private final int[] indices = new int[]{ 0, 1, 3, 3, 1, 2, };
private final FloatBuffer offsetBuffer; private final FloatBuffer tpBuffer;
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);
Texture t = new Texture(textureId, width, height);
// Store the texture ID in the map loadedTextures.put(path, t);
return t; } catch (Exception e) { e.printStackTrace(); return new Texture(0, 0, 0); // Return a default texture ID on failure } }
public Texture(int id, int width, int height) { this.id = id; this.width = width; this.height = height; }
public int getId() { return id; } public int getWidth() { return width; } public int getHeight() { return height; } } [/code] Вершинный шейдер [code]#version 460
void main() { fragColor = texture(texture_sampler, outTP); } [/code] Я убедился, что координаты текстуры передаются. Я убедился, что сэмплер текстур установлен. Я убедился, что все было связано. Я думаю, проблема может быть связана с координатами моей текстуры.
Во-первых, я задаю этот вопрос уже второй раз. В первый раз мне дали много разных советов, которые я применил при ответе на этот новый вопрос.
В настоящее время я работаю над средством рендеринга 2D-плиток. Я обнаружил, что переключение VAO слишком...
Я использую MediaQuery для создания адаптивного макета веб-сайта, как вы увидите ниже, все работает нормально, за исключением одной неприятной проблемы!
core.css применяется к site по умолчанию и является таблицей стилей для настольной версии. Но,...
Я использую MediaQuery для создания адаптивного макета веб-сайта, как вы увидите ниже, все работает нормально, за исключением одной неприятной проблемы!
core.css применяется к site по умолчанию и является таблицей стилей для настольной версии. Но,...
Я использую MediaQuery для создания адаптивного макета веб-сайта, как вы увидите ниже, все работает нормально, за исключением одной неприятной проблемы!
core.css применяется к site по умолчанию и является таблицей стилей для настольной версии. Но,...
Я просматриваю руководство по 2D-играм на Java от ryisnow на YouTube. ugzxCcpoSdE
Мне удалось отобразить каждую плитку отдельно, но я не знаю, почему .txt не работает
вот пакет map01.txt
1001111111111111
1000000000000001
1000000000000001...