Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: 8Observer8 от Декабрь 12, 2014, 19:55



Название: [Решено] Текстуру на треугольник
Отправлено: 8Observer8 от Декабрь 12, 2014, 19:55
Привет!

Нарисовал треугольник. Пытаюсь наложить текстуру. Вывод:
Цитировать
QOpenGLShader::compile(Fragment): 0(12) : error C1105: cannot call a non-function

*** Problematic Fragment shader source code ***
#version 330 core
#define lowp
#define mediump
#define highp

in vec2 texture;
out vec4 color;
uniform sampler2D textureUniform;

void main()
{
    color = texture( textureUniform, texture );
}

***

Откройте, пожалуйста, проект в Creator'е. Может вы увидите, что я сделал не так: https://github.com/8Observer8/TexturedTriangle


Название: Re: Текстуру на треугольник
Отправлено: kambala от Декабрь 12, 2014, 21:21
название функции и переменной совпадают судя по коду


Название: Re: Текстуру на треугольник
Отправлено: 8Observer8 от Декабрь 12, 2014, 22:11
Спасибо! Исправил и обновил код на github'е. Теперь выводится треугольник, но без текстуры


Название: Re: Текстуру на треугольник
Отправлено: __Heaven__ от Декабрь 15, 2014, 10:14
Смотрите пример (http://www.prog.org.ru/index.php?topic=27475.msg200581#msg200581).
У вас судя по всему не заданы координаты текстуры.


Название: Re: [Решено] Текстуру на треугольник
Отправлено: 8Observer8 от Декабрь 15, 2014, 18:25
У меня получилось! Мой пример здесь (http://www.cyberforum.ru/opengl/thread1316232-page3.html#post6991000)


Название: Re: [Решено] Текстуру на треугольник
Отправлено: deMax от Май 19, 2015, 09:29
У меня получилось! Мой пример здесь (http://www.cyberforum.ru/opengl/thread1316232-page3.html#post6991000)
Если на текстуре нарисовать цифру, то видно что она перевернута. Почему?
У меня в программе такая же ерунда, начало текстурных координат идет с верхнего левого угла, а не с нижнего левого:

Код:
 //Конструктор
    QImage *imgButton = new QImage(500, 100, QImage::Format_RGBA8888);
    imgButton->fill(Qt::transparent);
    QPainter p(imgButton);
    p.setPen(Qt::red);
    p.setFont(QFont("Arial", 20));
    p.drawText(10,20,"Привет, мир !");

    glGenTextures(1, &imgTexture);
    glBindTexture(GL_TEXTURE_2D, imgTexture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imgButton->width(), imgButton->height(), 0,
                 GL_RGBA, GL_UNSIGNED_BYTE, imgButton->bits());

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    float color[] = { 1.0f, 0.0f, 0.0f, 0.0f };
    glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, color);


void GlGui::draw()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glOrtho(0.0, width, 0.0, height, -1.0, 1.0 );

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    gl_funcs->glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, imgTexture);

    glBegin(GL_QUADS);
    glTexCoord2f(0.f, 1.f);    glVertex2f( 10, 50);
    glTexCoord2f(1.f, 1.f);    glVertex2f(510, 50);
    glTexCoord2f(1.f, 0.f);    glVertex2f(510,150);
    glTexCoord2f(0.f, 0.f);    glVertex2f( 10,150);
    glEnd();
}
Рисует "нормально", так как glTexCoord2f координата y перевернута.