«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему мой треугольник OpenGL не отображается в Go? Исследование проблемы с буфером вершин.

Почему мой треугольник OpenGL не отображается в Go? Исследование проблемы с буфером вершин.

Опубликовано 6 ноября 2024 г.
Просматривать:318

Why is My OpenGL Triangle Not Rendering in Go? Investigating a Vertex Buffer Issue.

Проблема с буфером вершин OpenGL в Go

При попытке отобразить треугольник с помощью OpenGL в Go пользователь столкнулся с проблемой, когда вершина буферу не удалось отобразить форму. Код Go был получен на основе руководства, но, в отличие от своего аналога на C, он не выдал никаких результатов.

Причина проблемы

Основная причина проблемы лежат в аргументах, передаваемых в vertexAttrib.AttribPointer(). В частности, пользователь неправильно указал (void*)0 в качестве смещения буфера массива. В результате приложению не удалось найти данные вершин.

Решение

Чтобы устранить проблему, пользователь переключился на рабочую ветку привязок бантара и сделал следующие изменения:

  • Аргументы AttribPointer: вызов vertexAttrib.AttribPointer() был обновлен и теперь использует nil для смещения буфера массива и gl.FLOAT для типа данных:
vertexAttrib.AttribPointer(
    3,     // size
    gl.FLOAT, //type
    false, // normalized?
    0,     // stride
    nil) // array buffer offset
  • BufferData length: длина, передаваемая в gl.BufferData(), была изменена, чтобы указать размер в байтах, а не количество элементов:
data := []float32{0, 1, 0, -1, -1, 0, 1, -1, 0}
[...]
gl.BufferData(gl.ARRAY_BUFFER, len(data)*4, data, gl.STATIC_DRAW)
[...]

Дополнительные примечания

  • Возможно, существует более эффективный способ передать правильную длину в BufferData.
  • The Вызов glGetError не вернул никаких ошибок, что указывает на то, что проблема возникла из-за неправильных значений аргументов.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3