OpenGL не рендеринг с текстурами - PullRequest
0 голосов
/ 01 июня 2018

Мой код не рендерит текстуры на треугольники, которые рисует.Треугольники рисуются правильно, а код загрузки изображений и текстурирования работал, когда я использовал его в других проектах.

unsigned char* gen_tex(std::string filename, int *texWidth, int *texHeight, int *texChannels)
{
    unsigned char* image = SOIL_load_image(("Data/"+filename).c_str(), &*texWidth, &*texHeight, &*texChannels, SOIL_LOAD_AUTO);
    return image;
}

void clean_tex(unsigned char* image)
{
    SOIL_free_image_data(image);
}

^ Функции загрузки и очистки изображений, похоже, работают без проблем.

Это единственная область кода, которая относится к текстурам и выполняется каждый кадр.Сами треугольники отображаются на экране правильно, но просто нарисованы с использованием набора glColor

int texWidth;
int texHeight;
int texChannels;

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

GLuint tex;
glGenTextures(1, &tex);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

unsigned char* image = gen_tex(std::string("white.png"),&texWidth,&texHeight,&texChannels);

if(texChannels == 4)
{
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
}
else
{
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texWidth, texHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
}

clean_tex(image);

for(int i=0; i<tNum; i++)
{
    glBegin(GL_TRIANGLES);

    glTexCoord2f(  0,  0); glVertex3f(triangles[i].A.x, triangles[i].A.y, triangles[i].A.z);
    glTexCoord2f(0.5,0.5); glVertex3f(triangles[i].B.x, triangles[i].B.y, triangles[i].B.z);
    glTexCoord2f(  0,  1); glVertex3f(triangles[i].C.x, triangles[i].C.y, triangles[i].C.z);

    glEnd();
}

glBindTexture(GL_TEXTURE_2D, 0);

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Ладно, это настоящий момент ладони лица.Мне удалось случайно удалить вызов glColor (), и поэтому он рисовал все это в этом оттенке.Видя, что я был дураком и использовал текстуру простого цвета, он отображал неправильный цвет, и я продолжал думать, что ничего не появляется.Я забываю, как иногда я глуп.В любом случае, спасибо, проблема теперь решена.

0 голосов
/ 01 июня 2018

Вам необходимо связать текстуру следующим образом:

GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);

Не имеет прямого отношения к вашей проблеме:

  • Не следует загружать текстуру каждый кадр, что очень неэффективно,Загрузите его только один раз и используйте повторно между кадрами.
  • Не используйте API непосредственного режима.Это наследие и вредно для вашего здоровья.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...