Я использую OpenGL 1.1 Glteximage2d для загрузки жесткодированного массива значений интенсивности (который представляет изображение буквы) в текстуру. />
Я не знаю, как сделать это по -другому < /li>
Он должен быть в состоянии работать на любом компьютере Windows (без установки библиотеки, такой как GLFW). < /li>
< /ul>
, к сожалению, с помощью API win32, мой пример кода очень долго. DisplayErrors < /code> нужно проверить. < /P>
используется для создания окна, инициализации контекста рендеринга OpenGL, ресурсов очистки в конце программы и вызовов LoadTextureImage для определения изображения текстуры.
#include
#include
#include //system
#include //printf, puts
bool DisplayErrors(){
bool ErrorOccured = false;
while (true){
switch(glGetError()){
#define OTGCASE(C) case C: puts("ERROR: "#C); ErrorOccured = true; break;
case GL_NO_ERROR: return ErrorOccured;
OTGCASE(GL_INVALID_ENUM)
OTGCASE(GL_INVALID_VALUE)
OTGCASE(GL_INVALID_OPERATION)
OTGCASE(GL_STACK_OVERFLOW)
OTGCASE(GL_STACK_UNDERFLOW)
OTGCASE(GL_OUT_OF_MEMORY)
default: puts("ERROR: Unknown"); ErrorOccured = true; break;
#undef OTGCASE
}
}
}
void LoadTextureImage(){
GLuint TextureName;
const GLfloat BorderColor[] = {0, 0, 0, 1};
//replacing the following line with `const GLint Border = 0;` allows the code
//to run successfully to produce the expected output
const GLint Border = 1;
const GLsizei Width = 8 + 2 * Border;
const GLsizei Height = 16 + 2 * Border;
GLubyte Letter[] = {
0, 10, 100, 100, 100, 100, 10, 0,
0, 10, 100, 200, 200, 100, 10, 0,
0, 10, 100, 200, 200, 100, 10, 0,
0, 10, 100, 200, 200, 100, 10, 0,
0, 10, 100, 200, 200, 100, 10, 0,
0, 10, 100, 200, 200, 100, 10, 0,
0, 10, 100, 200, 200, 100, 10, 0,
0, 10, 100, 200, 200, 100, 10, 0,
0, 10, 100, 200, 200, 100, 10, 0,
10, 10, 100, 200, 200, 100, 10, 10,
100, 100, 100, 200, 200, 100, 100, 100,
200, 200, 200, 200, 200, 200, 200, 200,
200, 200, 200, 200, 200, 200, 200, 200,
200, 200, 200, 200, 200, 200, 200, 200,
200, 200, 200, 200, 200, 200, 200, 200,
100, 100, 100, 100, 100, 100, 100, 100,
};
glGenTextures(1, &TextureName);
if (DisplayErrors()){
puts("Failed To Generate Texture Name\n");
return;
}
glBindTexture(GL_TEXTURE_2D, TextureName);
if (DisplayErrors()){
puts("Failed To Bind Texture\n");
return;
}
glTexImage2D(
GL_TEXTURE_2D,
0,
GL_LUMINANCE8,
Width,
Height,
Border,
GL_LUMINANCE,
GL_UNSIGNED_BYTE,
Letter
);
if (DisplayErrors()){
puts("Failed To Define Texture Image\n");
return;
}
puts("Successfully Defined Texure Image");
}
int wWinMain(HINSTANCE Instance, HINSTANCE, PWSTR, int CmdShow){
HWND Window;
HDC DeviceContext;
HGLRC RenderingContext;
WNDCLASSW WindowClass = {0};
//Register Window Class
WindowClass.lpfnWndProc = DefWindowProcW;
WindowClass.hInstance = Instance;
WindowClass.lpszClassName = L"OTG";
{
ATOM WindowClassAtom;
WindowClassAtom = RegisterClassW(&WindowClass);
if (!WindowClassAtom){
printf("Failed To Register Class %lu", GetLastError());
return -1;
}
SetLastError(NO_ERROR);
}
//Create Window
Window = CreateWindowExW(
0,
WindowClass.lpszClassName,
L"firstwindow",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
Instance,
NULL
);
if (!Window){
printf("Failed To Create Window %lu", GetLastError());
goto unregisterclass;
}
SetLastError(NO_ERROR);
ShowWindow(Window, CmdShow);
//Get Device Context
DeviceContext = GetDC(Window);
if (!DeviceContext){
printf("Failed To Retrieve Device Context %lu", GetLastError());
goto destroywindow;
}
SetLastError(NO_ERROR);
{
//Find A Suitable Pixel Format, Manually
PIXELFORMATDESCRIPTOR PixelFormatDescriptor = {0};
int PixelFormat;
PixelFormat = 1;
for (;;++PixelFormat){
int NumPixelFormats;
printf("Checking Pixel Format %d\n", PixelFormat);
NumPixelFormats = DescribePixelFormat(
DeviceContext,
PixelFormat,
sizeof(PixelFormatDescriptor),
&PixelFormatDescriptor
);
if (!NumPixelFormats){
printf("Failed To Describe PixelFormat %lu", GetLastError());
goto releasedevicecontext;
}
SetLastError(NO_ERROR);
if (
PixelFormatDescriptor.dwFlags & PFD_SUPPORT_OPENGL
&& PixelFormatDescriptor.dwFlags & PFD_DOUBLEBUFFER
&& PixelFormatDescriptor.cDepthBits > 1
)
break;
if (PixelFormat == NumPixelFormats){
puts("All Formats Checked - Cannot Find A Suitable OpenGL Pixel Format");
goto releasedevicecontext;
}
}
puts("Format Is Suitable");
//Set Pixel Format
if (!SetPixelFormat(DeviceContext, PixelFormat, &PixelFormatDescriptor)){
printf("Failed To Set Pixel Format %lu", GetLastError());
goto releasedevicecontext;
}
SetLastError(NO_ERROR);
}
//Create OpenGl Rendering Context
RenderingContext = wglCreateContext(DeviceContext);
if (!RenderingContext){
printf("Failed To Create OpenGL Rendering Context %lu", GetLastError());
goto releasedevicecontext;
}
SetLastError(NO_ERROR);
//Make OpenGl Rendering Context Current
if (!wglMakeCurrent(DeviceContext, RenderingContext)){
printf("Failed To Make OpenGL Rending Context Current %lu", GetLastError());
goto deleterenderingcontext;
}
puts("Initialized OpenGL Rendering Context");
LoadTextureImage();
//Make OpenGl Rendering Context Not Current
if(!wglMakeCurrent(NULL, NULL))
printf("\nFailed To Make OpenGL Rendering Context Not Current %lu", GetLastError());
deleterenderingcontext:
SetLastError(NO_ERROR);
if (!wglDeleteContext(RenderingContext))
printf("\nFailed To Delete OpenGL Rendering Context %lu", GetLastError());
releasedevicecontext:
SetLastError(NO_ERROR);
if (!ReleaseDC(Window, DeviceContext))
printf("\nFailed To Release Device Context %lu", GetLastError());
destroywindow:
SetLastError(NO_ERROR);
if (!DestroyWindow(Window))
printf("\nFailed To Destroy Window %lu", GetLastError());
unregisterclass:
SetLastError(NO_ERROR);
if (!UnregisterClassW(WindowClass.lpszClassName, Instance))
printf("\nFailed To Unregister Class %lu", GetLastError());
return 0;
}
< /code>
Ожидаемый результат, который я желаю, который указывает, что изображение текстуры определяется успешно, это: < /p>
Checking Pixel Format 1
Checking Pixel Format 2
Checking Pixel Format 3
Checking Pixel Format 4
Checking Pixel Format 5
Format Is Suitable
Initialized OpenGL Rendering Context
Successfully Defined Texure Image
< /code>
Однако вывод, который я получаю от выполнения моего кода, который указывает, что я не смог определить изображение текстуры: < /p>
Checking Pixel Format 1
Checking Pixel Format 2
Checking Pixel Format 3
Checking Pixel Format 4
Checking Pixel Format 5
Format Is Suitable
Initialized OpenGL Rendering Context
ERROR: GL_INVALID_VALUE
Failed To Define Texture Image
локальная переменная граница в loadtextureImage передается в параметр границы в вызове glteximage2d и используется для расчета ширины и высоты , передаваемого в Glteximage2d . Border в загрузке текста, как Const Glint Border = 1; . Если я заменяю это определение на альтернативное определение const grint border = 0; , я получаю ожидаемый выход.
Я был бы очень благодарен, если кто -то может объяснить, почему призыв к Glteximage2d в моем примере не удастся с GL_INVALID_VALUE , когда погранично подходит к 1. Пограничный Параметр теперь должен всегда быть нулевым, но я запутался, почему этот код не работает в OpenGL 1.1
Я использую OpenGL 1.1 Glteximage2d для загрузки жесткодированного массива значений интенсивности (который представляет изображение буквы) в текстуру. /> [list] [*] Я не знаю, как сделать это по -другому < /li> Он должен быть в состоянии работать на любом компьютере Windows (без установки библиотеки, такой как GLFW). < /li> < /ul> , к сожалению, с помощью API win32, мой пример кода очень долго. DisplayErrors < /code> нужно проверить. < /P>
[code]DisplayErrors[/code] выводит все флаги ошибок, которые установлены, и возвращает true, если есть хотя бы одна ошибка, и в противном случае.
[*] [code]LoadTextureImage[/code] пытается загрузить массив значений пикселей в текстуру, вызывая glteximage2d и вызывает Displayerrors несколько раз для проверки любых ошибок.
[*] [code]wWinMain[/code] используется для создания окна, инициализации контекста рендеринга OpenGL, ресурсов очистки в конце программы и вызовов LoadTextureImage для определения изображения текстуры.
//replacing the following line with `const GLint Border = 0;` allows the code //to run successfully to produce the expected output const GLint Border = 1;
//Get Device Context DeviceContext = GetDC(Window); if (!DeviceContext){ printf("Failed To Retrieve Device Context %lu", GetLastError()); goto destroywindow; } SetLastError(NO_ERROR);
{ //Find A Suitable Pixel Format, Manually PIXELFORMATDESCRIPTOR PixelFormatDescriptor = {0}; int PixelFormat; PixelFormat = 1; for (;;++PixelFormat){ int NumPixelFormats; printf("Checking Pixel Format %d\n", PixelFormat); NumPixelFormats = DescribePixelFormat( DeviceContext, PixelFormat, sizeof(PixelFormatDescriptor), &PixelFormatDescriptor ); if (!NumPixelFormats){ printf("Failed To Describe PixelFormat %lu", GetLastError()); goto releasedevicecontext; } SetLastError(NO_ERROR); if ( PixelFormatDescriptor.dwFlags & PFD_SUPPORT_OPENGL && PixelFormatDescriptor.dwFlags & PFD_DOUBLEBUFFER && PixelFormatDescriptor.cDepthBits > 1 ) break; if (PixelFormat == NumPixelFormats){ puts("All Formats Checked - Cannot Find A Suitable OpenGL Pixel Format"); goto releasedevicecontext; } } puts("Format Is Suitable");
//Set Pixel Format if (!SetPixelFormat(DeviceContext, PixelFormat, &PixelFormatDescriptor)){ printf("Failed To Set Pixel Format %lu", GetLastError()); goto releasedevicecontext; } SetLastError(NO_ERROR); }
//Make OpenGl Rendering Context Current if (!wglMakeCurrent(DeviceContext, RenderingContext)){ printf("Failed To Make OpenGL Rending Context Current %lu", GetLastError()); goto deleterenderingcontext; } puts("Initialized OpenGL Rendering Context");
LoadTextureImage();
//Make OpenGl Rendering Context Not Current if(!wglMakeCurrent(NULL, NULL)) printf("\nFailed To Make OpenGL Rendering Context Not Current %lu", GetLastError());
deleterenderingcontext: SetLastError(NO_ERROR); if (!wglDeleteContext(RenderingContext)) printf("\nFailed To Delete OpenGL Rendering Context %lu", GetLastError());
releasedevicecontext: SetLastError(NO_ERROR); if (!ReleaseDC(Window, DeviceContext)) printf("\nFailed To Release Device Context %lu", GetLastError());
destroywindow: SetLastError(NO_ERROR); if (!DestroyWindow(Window)) printf("\nFailed To Destroy Window %lu", GetLastError());
unregisterclass: SetLastError(NO_ERROR); if (!UnregisterClassW(WindowClass.lpszClassName, Instance)) printf("\nFailed To Unregister Class %lu", GetLastError()); return 0; } < /code> Ожидаемый результат, который я желаю, который указывает, что изображение текстуры определяется успешно, это: < /p> Checking Pixel Format 1 Checking Pixel Format 2 Checking Pixel Format 3 Checking Pixel Format 4 Checking Pixel Format 5 Format Is Suitable Initialized OpenGL Rendering Context Successfully Defined Texure Image < /code> Однако вывод, который я получаю от выполнения моего кода, который указывает, что я не смог определить изображение текстуры: < /p> Checking Pixel Format 1 Checking Pixel Format 2 Checking Pixel Format 3 Checking Pixel Format 4 Checking Pixel Format 5 Format Is Suitable Initialized OpenGL Rendering Context ERROR: GL_INVALID_VALUE Failed To Define Texture Image [/code] локальная переменная граница в loadtextureImage передается в параметр границы в вызове glteximage2d и используется для расчета ширины и высоты , передаваемого в Glteximage2d . Border в загрузке текста, как Const Glint Border = 1; . Если я заменяю это определение на альтернативное определение const grint border = 0; , я получаю ожидаемый выход. Я был бы очень благодарен, если кто -то может объяснить, почему призыв к Glteximage2d в моем примере не удастся с GL_INVALID_VALUE , когда погранично подходит к 1. Пограничный Параметр теперь должен всегда быть нулевым, но я запутался, почему этот код не работает в OpenGL 1.1
Я использую OpenGL 1.1 Glteximage2d для загрузки жесткодированного массива значений интенсивности (который представляет изображение буквы) в текстуру. />
Я не знаю, как сделать это по -другому
Он должен быть в состоянии работать на любом...
Я использую OpenGL 1.1 Glteximage2d для загрузки жесткодированного массива значений интенсивности (который представляет изображение буквы) в текстуру. />
Я не знаю, как сделать это по -другому
Он должен быть в состоянии работать на любом...
Я использую следующий код
const Ort::Value &img_file_to_tensor(std::string input_img_path) {
// Load the image using OpenCV
cv::Mat input_mat = cv::imread(input_img_path);
// Convert to float
cv::cvtColor(input_mat, input_mat, cv::COLOR_BGR2RGB);...
У меня иногда возникает такая проблема. Но это всегда решаемо. На этот раз невозможно найти решение. Есть много сообщений по одной и той же теме, но в моем случае нет решения.
Я пытаюсь получить данные из своего API. Иногда это работает (с данными...
Я пытаюсь использовать функцию df.dropna и хочу вложить ее несколько раз, используя и знак ',' и/или знак '|' в соответствии с документацией.
В своем коде я конвертирую CSV-файл в панды, а затем корректирую данные в столбцах
df = df[ ]
##print(df)...