Ответы пользователя по тегу OpenGL
  • OpenGL 3.0, доступен ли флаг GL_PROGRAM_BINARY_LENGTH для glGetProgramiv?

    Тыц. Внизу описание. Поповоду нулей
    When a progam's GL_LINK_STATUS is GL_FALSE, its program binary length is zero.
    Ответ написан
    9 комментариев
  • Почему "не рендится" квадрат?

    Не вижу установки world, view и projection матриц. Походу оно реально рендерится, но камера просто не туда смотрит. Плюс нужно явно указать цвет для очистки экрана, чтобы наверняка.
    Ответ написан
  • Прозрачный куб на OpenGL где "скрытые" линии являются пунктирными?

    Если вам влом самому вычислять какие грани должны быть пунктирами, а какие нет, то читаем тут и делаем следующие:
    1. Включаем GL_FRONT.
    2. Рисуем куб сплошными линиями.
    3. Включаем GL_BACK.
    4. Рисуем куб пунктирными линиями.
    5. Выводим изображение на экран.

    UPD: Тут работающий проект на C#.
    Ответ написан
    5 комментариев
  • Разработка игр на Qt - QOpenGL или QGraphicsScene? Или есть еще варианты?

    Конечно все зависит от логики вашей игры и тяжести ваших ресурсов. Если тут все просто, то отрендерить 25 фигур не составив труда. Возможно у вас проблема в самой логике рендера, где-то делаеться много лишних телодвижений. Сказать более точно сложно... С производетельностью pipeline Qt проблем не должно быть. Возможно Я конечно ошибаюсь, но на моей практике все летало шустро.
    Ответ написан
    1 комментарий
  • World Editor war3 на с++ и openGl?

    Я немного не понял вашу идею с 3 треугольниками, можно подробней?

    Моя идея следующая:
    Берем карту высот(можно просто матрицу для начала, сути не меняет). Потом для каждого пикселя(ячейки) вычесляем положение на плоскости ОХУ и взависимоти от высоты в данном пикселе ставим n кубиков друг над другом.

    Держать в памяти нужно карту высот и модель кубика, которую мы будем рисовать в нужных нам местах.

    Но все зависит от того насколько детальной должна быть карта. Рекомендую почитать в про рендеринг рельефа.

    P.S. Потом можно будет оптимизировать чтобы не рисовались невидимые кубы, но это совсем другая история..
    Ответ написан
  • Как обеспечить работу с текстурами OpenGL с очень маленькой видеопамятью?

    Дело может быть даже не в количестве видео памяти. Возможно первая видеокарта не поддерживает, какоето разширение, а вторая поддерживает, вот и рисует нормально. Я не помню как он называется, но у моего колеги такое было.

    Ну а если проблема все же в обьеме, то можно мониторить сколько памяти вы занимаете и динамически выгружать одни текстуры, которые в данный момент не нужны, загружать необходимы для рендера. Это конечно просадит FPS, но что поделаеш.
    Как вариант переделать уровни, так чтобы уменьшить количество текстур.

    Чисто для теста можно уменьшить размер всех текстур и посмотреть, что получится.

    P.S. У вас все размеры текстур кратны степени двойки?
    P.S.S. Прикол с QtCreator склоняет меня к мнению, что это проблемы с поддерживаемыми разширениями у самой видеокарты.
    Ответ написан
    2 комментария
  • Насколько сложны игры на c++ и openGL?

    Как уже говорилось Линейная Алгебра очень вам поможет. Она нужна для эффективного просчета положения объектов и их перемещения в пространстве.
    Алгоритмы по всюду одинаковые будь то декстоп, мобилки, сервера. Отличается лишь окружение в котором они выполняются.
    Если бы вы хотели, то не задавали бы глупых вопросов, "а может рано?", "может подождать...". Кого ждать? Вас ждать никто не будет. Если вас приманивают только большие деньги, то вы никогда не станете хорошим разработчиком.
    Ответ написан
    Комментировать
  • Какие алгоритмы заложены в функции opengl?

    Есть такая библиотека как glm. Она умеет все что умеет OpenGL(в плане математики) и распространяться через исходники.
    Ответ написан
  • QT OpenGL как отрисовать линию массивом?

    Копипаст это плохо(если не знаешь, что копипастиш)!
    -glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
    +glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);

    Вы рисуете линии, следовательно, нужно только 2значения из буфера, а не 4. Подозреваю, что в примере рисовали квадраты:)

    З.Ы. Тестировал в OpenTK, все заработало.

    UPD. Извиняюсь за задержку как-то долго я не заходил в linux. Возможно я опоздал, но все равно код будет полезет тем кто прийдет сюда из гугла. Тестировал я ваш код таким образом:
    #include "widget.h"
    
    Widget::Widget(QWidget *parent)
        : QOpenGLWidget(parent)
    {
    }
    GLuint VBO;
    GLfloat arr[4];
    
    void Widget::initializeGL()
    {
        glewExperimental = true;
        glewInit();
        glClearColor(0,0,0,1);
        glColor3f(1,1,1);
    
        arr[0] = -1;
        arr[1] = -1;
        arr[2] = 1;
        arr[3] = 1;
    
        glGenBuffers( 1, &VBO);
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glBufferData(GL_ARRAY_BUFFER, sizeof(arr), arr, GL_STATIC_DRAW);
        glEnableVertexAttribArray(0);
    }
    
    void Widget::paintGL()
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glLoadIdentity();
    
        glColor4f(1.0f, 0.0, 0.0, 1.0);
        glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
    
        glDrawArrays(GL_LINES, 0, sizeof(arr));
    }
    
    void Widget::resizeGL(int w, int h)
    {
        glViewport(0,0,w,h);
    }
    Ответ написан
    4 комментария
  • Микширование картинок в Qt: стоит ли использовать OpenGL?

    Выигрыш в производительности будет, это точно.
    Как вариант можно сделать так:
    1. Делаем простую квадратную плоскость(размер не главное, нужно просто правильно выставить камеру).
    2. Делаем шейдер который будет нам смешивать наши изображения(по моим предположениям он будет ну очень простой:))
    3. Рисуем нашу плоскость при помощи шейдера.
    4. Готово.

    Насколько я могу судить из вопроса, то с OpenGL вы работали мало. Для вас это может показаться очень сложным, но я советую попробовать, такой опыт дорого стоит...

    UPD. Вспомнил про QML там это дело со одной стороны немного упроститься(OpenGL + шейдер), а с другой усложниться, если вы не использовали QML раньше.
    Ответ написан
    Комментировать
  • Является ли GLUT многозадачной?

    Нет, но можно самостоятельно разделить. Там все находиться в одном цикле, сначала ввод, а потом TimerFunc. Ввод происходит быстро, вот и незаметен.

    Тестовый код
    #include<glut.h>
    
    void Keyboard(unsigned char key, int x, int y)
    {
    	while (true);
    }
    float angle = 0;
    void Draw()
    {
    	angle++;
    	glLoadIdentity();
    	glRotatef(angle, 0,0,1);
    	glClear(GL_COLOR_BUFFER_BIT);
    	glBegin(GL_LINES);
    		glVertex3f(1, 1, 0);
    		glVertex3f(-1, -1, 0);
    	glEnd();
    	glFlush();
    }
    void Time(int)
    {	
    	Draw();
    	glutTimerFunc(0,Time,50);
    }
    void Init()
    {	
    	glClearColor(1.0,1.0,1.0,0.0);  
    	glColor3f(0,0,0);
    	glOrtho(0.0,1,0.0,1, 1,-1); 
    }
    
    int main(int argv, char** argc)
    {	
    	glutInit(&argv, argc);
    	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 
    	glutInitWindowPosition(200,200);
    	glutInitWindowSize(400,400);
    	glutCreateWindow("hello");
    	Init();
    	glutKeyboardFunc(Keyboard);
    	glutDisplayFunc(Draw);
    	glutTimerFunc(0,Time,50);
    	glutMainLoop();
    }
    Ответ написан
    Комментировать