- Opengl, почему не работает этот шейдер?
- Решение
- Проблема с шейдером OpenGL (ничего не отображается)
- Проблема с шейдером OpenGL (ничего не отображается)
- Проблемы OpenGL в Windows 10 [БЫСТРЫЕ РЕШЕНИЯ]
- 4 решения для устранения проблем OpenGL в Windows 10
- Как я могу исправить ошибки OpenGL в Windows 10?
- Решение 1. Удалите драйверы дисплея и переустановите последнюю версию
- Решение 2. Установите последние драйверы дисплея в режиме совместимости
- Решение 3 – Запустите SFC
- Решение 4 – Настройте свой ПК для лучшей производительности
- OpenGL Shader не работает правильно на машине AMD
- Решение
Opengl, почему не работает этот шейдер?
Я пытался создать класс для рисования квадрата, этот класс создавался один раз, и каждый раз, когда я хотел нарисовать квадрат, я просто … Square :: draw (float posx, float posy, float sizex, float SizeY).
То, как я это сделал, заключалось в том, чтобы на шейдере был установлен unifor vec4, где я передавал бы pos и размер.
И на vbo: GLint _vertID [4] = <0,1,2,3>идентификация, чтобы я знал, с какой вершиной работал шейдер, чтобы я мог поставить правильную позицию
Проблема в том, что он не рисует квадрат, а рисует случайным образом, некоторые треугольники (что-то не так).
Я хотел бы знать, является ли моя логика неправильной или неправильной реализацией.
и VertexShader:
posSh — это vec4, где я прохожу позицию каждый раз, когда я хочу нарисовать квадрат, а vertID — это vbo, который дает мне знать, какой vert обрабатывается
Решение
Я бы предпочел удалить эти _vertID индексы.
Мне кажется, вы пытаетесь сэкономить память, используя один vec4 для рендеринга 4 вершин вместо 4x vec2 (или vec3, если требуется). vertID , uvs а также posSh все атрибуты, это означает, что они должны иметь одинаковое количество элементов. Например:
Если я прав, это не так posSh ,
Это то, что я вижу в вашей настройке & код шейдера:
Итак, если это так, мы исправим это сейчас.
- + Изменить vbo[0] от GL_ARRAY_BUFFER в GL_ELEMENT_ARRAY_BUFFER , Буфер массива элементов содержит индексы каждого элемента (посмотрите на приведенные выше разделы кода, числа — это индексы, которые вы можете указать) буфера массива, который вы привязываете. (Имейте в виду, что vbo[0] будет оставаться связанным, пока не будет связан другой GL_ELEMENT_ARRAY_BUFFER)
- Удалите glVertexAttribPointer и glEnableVertexAttribArray из GL_ELEMENT_ARRAY_BUFFER, потому что он просто должен быть связан, и он уже есть.
- Создайте 3-й VBO в вашем vbo[] массив, который будет содержать все позиции вашего четырехугольника. Это заменит posSh , Вы должны настроить его как буфер массива для _uvs (Это будет позиция vec2)
- Используйте glVertexAttribPointer и glEnableVertexAttribArray на 3-й виртуальной машине.
Вот как ты это делаешь.
Попробуйте этот код (я еще не проверял):
Ваш код для рисования:
Я надеюсь, что это поможет вам немного. Попробуйте код, я не знаю, есть ли какие-либо опечатки, я написал это в блокноте ++.
Вот учебное пособие по правильной визуализации VBO: Урок 9: Индексирование VBO
Источник
Проблема с шейдером OpenGL (ничего не отображается)
Я новичок в OpenGL, и я следовал этому руководству по шейдерам https://learnopengl.com/Getting-started/Textures. Я не могу заставить мою работать, потому что экран в конечном итоге просто черный. Этот код использует glew и glut вместо glfw, как в учебнике.
Что здесь происходит?
- У меня есть список вершин, который я затем храню в VBO, и атрибуты связываются с VAO Установка атрибутов вершин в порядке 3 вершины + 3 цвета + 2 текс-координаты glEnable(GL_TEXTURE_2D); убедитесь, что GL_TEXTURE0 активен, поэтому следующий вызов glBindTexture(GL_TEXTURE_2D, texture) ссылается на этот текстурный блок. Я загружаю текстуру с функцией stbi_load Загрузите текстуру с помощью glTexImage2D с параметрами ( width , height , texture_data ), которые были переданы stbi_load заранее как указатели, чтобы он stbi_load их. Создание вершинного шейдера, присоединение источника (в VertexShaders.h), компиляция шейдера, печать ошибок шейдера (не отображаются) Создание шейдера фрагмента, присоединение источника (в FragmentShaders.h), шейдер компиляции, ошибки печати шейдера (не отображаются) Создайте шейдерную программу ( ourShader ), присоедините вершинный шейдер и фрагментный шейдер. Ссылка «ourShader» программа, и снова печатать ошибки (ни одна не отображается).
- Проекция выполняется с помощью gluPerspective , вблизи плоскости отсечения 0,1 и дальнего 1000 (поскольку, глядя вниз, -z не должно обрезать объект, я также перевожу объект как glTranslatef(0, 0, -10) ) Текстура загружается (файл существует, он генерирует байтовые данные, когда я загружаю его, а текстурное изображение именно это (512×512) https://github.com/JoeyDeVries/LearnOpenGL/blob/master/resources/textures/container.jpg
Это обратный вызов myDisplay:
ОБНОВЛЕНИЕ ЖУРНАЛА — РЕШЕНО
- Не нужно glEnable (GL_TEXTURE_2D) при реализации шейдера
Проецирование, просмотр и преобразование модели идут внутри шейдера, используйте
Включить атрибуты (цвет, текстура) перед рендерингом
Поддержка Freeglut для OpenGL API (> = 3.2)
glutInitContextVersion(3, 3); glutInitContextProfile(GLUT_CORE_PROFILE);
Источник
Проблема с шейдером OpenGL (ничего не отображается)
Я довольно новичок в OpenGL, и я следовал этому руководству по шейдерам https://learnopengl.com/Getting-started/Textures .
Я не могу заставить мою работать, потому что экран в конечном итоге просто черный. Этот код использует glew и glut вместо glfw, как в учебнике.
Что здесь происходит?
- У меня есть список вершин, который я затем храню в VBO, и его атрибуты связываются с помощью VAO.
- Установка атрибутов вершин в порядке 3 вершины + 3 цвета + 2 текс-координаты
- glEnable(GL_TEXTURE_2D);
- сделал обязательно GL_TEXTURE0 активный, поэтому следующий вызов
- glBindTexture(GL_TEXTURE_2D, texture) ссылается на этот текстурный блок.
- Я загружаю текстуру с stbi_load функция
- Загрузите текстуру с glTexImage2D с параметрами ( width , height , texture_data ) который был передан stbi_load заранее как указатели так грузит их.
- Создание вершинного шейдера, присоединение источника (в VertexShaders.h), компиляция шейдера, печать ошибок шейдера (ни один не отображается)
- Создание шейдера фрагмента, присоединение источника (в FragmentShaders.h), шейдер компиляции, ошибки печати шейдера (не отображаются)
- Создать шейдерную программу ( ourShader ), прикрепите вершинный шейдер и фрагментный шейдер. Ссылка «ourShader» программа, и снова печатать ошибки (ни одна не отображается).
- Проекция сделана с gluPerspective около плоскости отсечения 0.1 и до 1000 (поскольку она смотрит вниз -z не следует обрезать объект, я также перевожу объект следующим образом glTranslatef(0, 0, -10) )
- Текстура загружается (файл существует, он генерирует байтовые данные, когда я загружаю его, что касается изображения текстуры, то это оно (512×512) https://github.com/JoeyDeVries/LearnOpenGL/blob/master/resources/textures/container.jpg
Это обратный вызов myDisplay:
ОБНОВЛЕНИЕ ЖУРНАЛА — РЕШЕНО
- Не нужно glEnable (GL_TEXTURE_2D) при реализации шейдера
Проекция, вид & Модель трансформации зайди внутрь шейдера, используй
Включить атрибуты (цвет, текстура) перед рендерингом
glutInitContextVersion(3, 3);
glutInitContextProfile(GLUT_CORE_PROFILE);
Источник
Проблемы OpenGL в Windows 10 [БЫСТРЫЕ РЕШЕНИЯ]
4 решения для устранения проблем OpenGL в Windows 10
- Удалите драйверы дисплея и переустановите последнюю версию
- Установите последние версии драйверов дисплея в режиме совместимости .
- Запустите SFC
- Настройте свой компьютер на лучшую производительность
Windows 10 – отличная операционная система, и, несмотря на все основные улучшения, она все еще имеет некоторые проблемы и ошибки.
Пользователи сообщают о проблемах OpenGL, задержке FPS и графических картах. Однако есть несколько вещей, которые вы можете сделать, чтобы исправить эти проблемы. Эти проблемы вызваны в большинстве случаев отсутствием оптимизации драйверов для Windows 10.
Это означает, что если вы гладко запускали свои любимые игры в предыдущих версиях Windows, у вас могут возникнуть проблемы с графическими картами в Windows 10. Итак, как вы можете это исправить?
Как я могу исправить ошибки OpenGL в Windows 10?
Решение 1. Удалите драйверы дисплея и переустановите последнюю версию
- Для удаления драйверов дисплея перейдите в диспетчер устройств.
- Найдите адаптеры дисплея и щелкните их, чтобы открыть список установленных драйверов.
- Теперь вам нужно найти драйвер видеокарты из списка, в большинстве случаев это будет единственный элемент в списке, щелкните его правой кнопкой мыши и нажмите Удалить.
- После завершения процесса удаления необходимо перезагрузить компьютер.
- Обратитесь к производителю графической карты и найдите последние версии драйверов для вашей модели графической карты.
- Установите драйверы и посмотрите, сохраняется ли проблема.
Если Windows не может автоматически найти и загрузить новые драйверы, ознакомьтесь с этим руководством, чтобы быстро решить проблему.
Хотите последние версии драйверов для графических процессоров? Добавьте эту страницу в закладки и всегда оставайтесь в курсе последних и самых лучших.
Обновление драйверов вручную подвергает ваш компьютер риску, поэтому мы рекомендуем вам загрузить Средство обновления драйверов Tweakbit (одобрено Microsoft и Norton), чтобы сделать это автоматически.
Таким образом, вы защитите свою систему от повреждений, загрузив и установив неправильные версии драйверов.
Отказ от ответственности : некоторые функции этого инструмента не являются бесплатными
Решение 2. Установите последние драйверы дисплея в режиме совместимости
- Найдите название модели вашей графической карты и загрузите последние версии драйверов с сайта производителя.
- По завершении загрузки найдите файл установки драйвера.
- Щелкните правой кнопкой мыши файл установки и выберите «Свойства» в меню.
- Перейдите на вкладку «Совместимость».
- Находясь на вкладке «Совместимость», найдите и выберите «Запустить эту программу в режиме совместимости» и выберите нужную операционную систему в раскрывающемся списке.
- Нажмите OK и запустите установочный файл.
Знаете ли вы, что большинство пользователей Windows 10 имеют устаревшие драйверы? Будьте на шаг впереди, используя это руководство.
Решение 3 – Запустите SFC
Если некоторые системные файлы, используемые в вашей игре, отсутствуют или повреждены, у вас возникнет немало проблем и ошибок, в том числе ошибок OpenGL.
Вы можете быстро решить эту проблему с помощью средства проверки системных файлов. Для этого откройте командную строку от имени администратора и введите команду sfc/scannnow .
Нажмите Enter и подождите, пока ваша система не завершит процесс сканирования. Перезагрузите компьютер и проверьте, сохраняется ли проблема OpenGL.
Если у вас возникли проблемы с доступом к командной строке от имени администратора, то вам лучше ознакомиться с этим руководством.
Команда сканирования теперь остановлена до завершения процесса? Не волнуйтесь, у нас есть простое решение для вас.
Решение 4 – Настройте свой ПК для лучшей производительности
Если на вашем компьютере недостаточно ресурсов для игры, у вас могут возникнуть проблемы с OpenGL и другие проблемы. Поэтому убедитесь, что ваши настройки настроены на максимально возможную производительность игры.
- Зайдите в Настройки> выберите Информация о ПК
- Перейти к расширенным настройкам системы
- Выберите вкладку «Дополнительно»> «Производительность»> нажмите «Настройки».
- Установите флажок Настроить для лучшей производительности.
Вы не можете найти режим высокой производительности на ПК с Windows 10? Ознакомьтесь с этим руководством и решите проблему раз и навсегда!
Если у вас возникли проблемы с открытием приложения Настройка, обратитесь к этой статье, чтобы решить эту проблему.
Как вы можете видеть, большинство ошибок FPS, графических карт и OpenGL в Windows 10 вызваны несовместимостью драйверов с Windows 10.
Для получения дополнительной информации о предмете и других потенциальных исправлениях вы также можете проверить это специальное руководство.
Если эти решения не устранили ваши проблемы, вам придется подождать, пока производители оборудования выпустят новые наборы драйверов, оптимизированные для Windows 10.
Если у вас есть какие-либо другие проблемы, связанные с Windows 10, вы можете найти решение в разделе исправлений Windows 10.
Для получения дополнительных предложений или вопросов, обратитесь к разделу комментариев ниже.
Источник
OpenGL Shader не работает правильно на машине AMD
У меня есть тот же код OpenGL, который отлично работает на одной машине и только частично на другой машине.
Трудно отладить, потому что проблема возникает только на машине, которую мне нужно развернуть. В этой машине нет сбоев, предупреждений, ошибок … ничего.
Что я пробовал до сих пор:
В моей машине я установил тот же O.S. и те же библиотеки (и той же версии) точно так же, как на втором компьютере. Тем не менее, код отлично работает на моей машине, а не на машине, мне нужно развернуть приложение. Кстати, у моей машины есть карта NVidia, а другая использует AMD.
Я проверяю ошибки в OpenGL везде (используя glGetError) и ничего не нашел.
Мое приложение состоит из 2 частей, одна из которых визуализируется с использованием фиксированного конвейера, а другая — с использованием шейдеров. Визуализация шейдеров — это та часть, которая отсутствует в одном из них. Шейдеры успешно компилируются на обеих машинах, и их журнал ничего не показывает (используя glGetShaderInfoLog).
У меня нет других машин (кроме этих 2), чтобы провести дальнейшее тестирование, чтобы увидеть, действительно ли проблема в аппаратном обеспечении.
Моя машина: NVidia Quadro 600 — (Версия драйвера: 319.17)
Развернуть машину: AMD FirePro W8000
- Я проверю это нить , но для моего приложения шейдеры правильно компилируются на машине AMD.
Я использую GLFW / GLEW.
GLFW и GLEW init
Основной цикл: Render вызывает сначала рендеринг с использованием Fixed Pipeline, а затем тот, который использует Shader.
Получение единообразных обработчиков
Любая идея, советы, все, что может помочь мне проследить, где проблема, приветствуется.
Редактировать 0
Добавлена дополнительная информация о видеокартах.
Редактировать 1
Я просто комментирую строку #version 120 из вершинного шейдера и я получил несколько предупреждений для строки:
0(10) : warning C7011: implicit cast from «int» to «float»
Просто изменил строку на следующую. Предупреждения исчезли, но проблема остается той же.
vec3 w = vec3((vertex.x-bb.x)/bb.z*2.0-1.0, (vertex.y-bb.y)/bb.w*2.0-1.0, vertex.z);\n
Решение
Мне пришлось сделать 2 вещи, чтобы решить проблему.
Во-первых, чтобы она работала с картой AMD, я должен был получить и использовать AttribLocation.
Это не показывало данные, потому что размер / вершина / цвет смешивались;
После этого перестал работать на моей карте Nvidia. Не получил ошибку при компиляции шейдеров. Хотя я получал ошибку (используя glGetError) каждый раз, когда пытался использовать шейдеры.
Я вернулся и понял, что мне пришлось удалить все неиспользуемые переменные из шейдеров.
Источник