В настоящее время я создаю некоторые пиксельные данные на своем компьютере и отправляю их в текстуру в OpenGL.Экспортированный буфер, в который я пишу, безупречен, но тот же буфер, что и текстура на квадре, странно искажен.Я исправил UV, проверил настройки текстуры, но все, кажется, в порядке.
Предварительный просмотр OpenGL находится на правой стороне.С левой стороны находится предварительный просмотр необработанных буферных данных, хранящихся в виде компонентов RGB (для предварительного просмотра я использовал rawpixels.net).Это те же данные, которые я отправляю в текстуру.
int width = 400;
int height = 300;
int main() {
glfwInit();
glewInit();
GLFWwindow* win = glfwCreateWindow(width, height, "", NULL, NULL);
glfwMakeContextCurrent(win);
glfwSetWindowAttrib(win, GLFW_RESIZABLE, 0);
unsigned int tex;
rgb* canvas = new rgb[width * height];
graphics g(width, height, canvas);
g.drawLine(vec2(0, 0), vec2(100, 300), 10, rgb(100, 100, 255));
float x1 = 255.0 / width;
float x2 = 255.0 / height;
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
g.pixel(i, j, rgb(i * x1, j * x1, 255));
}
}
g.drawLine(vec2(0, 0), vec2(100, 300), 10, rgb(255, 50, 20));
g.saveBuffer("./res/frame.raw");
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_RECTANGLE, tex);
glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, canvas);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_T, GL_CLAMP);
glEnable(GL_TEXTURE_RECTANGLE);
while (!glfwWindowShouldClose(win)) {
glfwPollEvents();
glBegin(GL_QUADS);
glTexCoord2i(0, 0);
glVertex2i(-1, 1);
glTexCoord2i(0, width);
glVertex2i(-1, -1);
glTexCoord2i(height, width);
glVertex2i(1, -1);
glTexCoord2i(height,0 );
glVertex2i(1, 1);
glEnd();
glfwSwapBuffers(win);
}
glDeleteTextures(1, &tex);
return 0;
}
rgb - это просто структура, содержащая компоненты R, G и B, которые хранятся как байты без знака.Графика - это объект класса, который я создал.Он содержит несколько методов, которые записывают данные на холст.