Загрузите текстуру с помощью glTexImage2D в C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Загрузите текстуру с помощью glTexImage2D в C#

Сообщение Anonymous »

Я пытаюсь понять, как загрузить текстуру из файла на C# с помощью OpenGL (с использованием GLFW). Я перепробовал кучу вещей, но так и не смог этого добиться. В этом состоянии мой код не жалуется на неправильные типы, но все равно завершается с ошибкой

Код: Выделить всё

The program '[2260] Rendering.exe' has exited with code 3221225477 (0xc0000005) 'Access violation'.
Думаю, это потому, что я использую Bitmap.GetHbitmap(), что, вероятно, не то, что ожидает glTexImage2D (хотя он возвращает IntPtr) код>). Я недостаточно знаю об IntPtr и изображениях, чтобы понять, что я делаю неправильно. Я нашел примеры, которые вместо этого используют byte[], но при попытке этого он просто жалуется, что ожидает IntPtr (нет перегрузки glTexImage2D, которая ожидает byte[]). Может быть, кто-нибудь здесь может указать мне правильное направление или подсказать альтернативный способ сделать это (т. е. стоит ли мне вообще использовать растровое изображение)? Я следую инструкциям на сайте Learnopengl.com, чтобы понять, чего они стоят. Вот мой код

Код: Выделить всё

Bitmap bitmap = new Bitmap("../../../images/container.jpg");

var texture = glGenTexture();
glBindTexture(GL_TEXTURE_2D, texture);
// At this point the code dies with the above mentioned error
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmap.Width, bitmap.Height, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmap.GetHbitmap());
Я пробовал следовать этим ответам, но безуспешно:

C# .NET Core ImageConverter

Преобразуйте растровое изображение в байтовый массив

glTexImage2D + byte[]
Я также попробовал загрузить изображение следующим образом (непосредственно в память, поскольку функция, похоже, требует этого, поскольку упоминалось «Указывает указатель на данные изображения в памяти»), но это приводит к той же ошибке:

Код: Выделить всё

byte[] openFile = File.ReadAllBytes("../../../images/container.jpg");
fixed (byte* p = openFile)
{
IntPtr img = (IntPtr)p;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, img);
}
Дополнительная информация
Текстура представляет собой файл JPG размером 512x512, который можно найти здесь: https://learnopengl.com /img/textures/container.jpg

Я использую оболочку, если я правильно понимаю, glfw-net: https://github.com/ForeverZer0/glfw-net

Подробнее здесь: https://stackoverflow.com/questions/789 ... in-c-sharp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Загрузите текстуру с помощью glTexImage2D в C#
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Загрузите текстуру с помощью glTexImage2D в C#
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Прохождение границы = 1 к Glteximage2D заставляет Glteximage2d поднять gl_invalid_value
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Прохождение границы = 1 к Glteximage2D заставляет Glteximage2d поднять gl_invalid_value
    Anonymous » » в форуме C++
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Прохождение границы = 1 к Glteximage2D заставляет Glteximage2d поднять gl_invalid_value
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»