Я пытаюсь применить текстуру к квадрату в моем проекте, но когда я рисую указанный квадрат, он выглядит просто белым - PullRequest
1 голос
/ 29 апреля 2020
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
int width, height, channels;
unsigned char* image = stbi_load("file.jpg", &width, &height, &channels, 0);
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);

glBegin(GL_POLYGON);
glVertex2f(0,0);
glVertex2f(100, 0);
glVertex2f(100,100);
glVertex2f(0,100);
glEnd();

glBindTexture(GL_TEXTURE_2D, 0);
stbi_image_free(image);

glPopAttrib();

glfwSwapBuffers(window);

glfwPollEvents();

это правильно создает квадрат, но квадрат не имеет текстуры, только белый. файл текстуры, который я использовал.

Кроме того, вот код, который устанавливает мое окно:

static void WindowSetup()
{
    glViewport((GLint)0, (GLint)0, SCREEN_WIDTH, SCREEN_HEIGHT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, SCREEN_WIDTH, 0, SCREEN_HEIGHT, 0, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

1 Ответ

0 голосов
/ 29 апреля 2020

Вы должны установить координаты текстуры с помощью glTexCoord:

glBegin(GL_POLYGON);
glTexCoord2f(0, 1);
glVertex2f(0, 0);
glTexCoord2f(1, 1);
glVertex2f(100, 0);
glTexCoord2f(1, 0);
glVertex2f(100, 100);
glTexCoord2f(0, 0);
glVertex2f(0, 100);
glEnd();

Если координаты текстуры не установлены, то все координаты текстуры, связанные с вершинами, являются координаты по умолчанию (0, 0) и только одна точка текстуры наматывается на весь примитив.
См. также Как работают координаты текстуры opengl?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...