レンダリング画像のコードをOpenGL
と書いています。私はGLUT
を使用してウィンドウとコールバックを作成しましたが、win32
ウィンドウに画像をレンダリングしたいのですが、基本的にCreateWindowEx()
というAPIを持っていて、win32
のウィンドウを作成するAPIとHWND
HDC
しかし、私はGLUT
でこのようなものを見つけられませんでした。GLUT
にハンドルを送信することは可能ですか?または他のアプローチ?win32ウィンドウでOpenGLを使用して画像をレンダリングする
私のコードは、画面上のレンダリングイメージが正常に表示されます。
int main()
{
__try{
int argc = 1;
char *argv[1] = { (char*)"GLUTwindow" };
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(1024, 768);
glutInitWindowPosition(0, 0);
glutCreateWindow("GLUTwindow");
GLenum err = glewInit(); if (GLEW_OK != err) __debugbreak();
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMotionFunc(motion);
glutMainLoop();
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
}
return 0;
}
void init()
{
// compile and link the shaders into a program, make it active
vShader = compileShader(vertexShader, GL_VERTEX_SHADER);
fShader = compileShader(fragmentShader, GL_FRAGMENT_SHADER);
std::list<GLuint> tempList;
tempList.clear();
tempList.insert(tempList.end(), (GLuint)vShader);
tempList.insert(tempList.end(), (GLuint)fShader);
program = createProgram(tempList);
offset = glGetUniformLocation(program, "offset"); GLCHK;
texUnit = glGetUniformLocation(program, "texUnit"); GLCHK;
glUseProgram(program); GLCHK;
// configure texture unit
glActiveTexture(GL_TEXTURE0); GLCHK;
glUniform1i(texUnit, 0); GLCHK;
// create and configure the textures
glGenTextures(1, &texture); GLCHK;
// "Bind" the newly created texture : all future texture functions will modify this texture
glBindTexture(GL_TEXTURE_2D, texture); GLCHK;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); GLCHK;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); GLCHK;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); GLCHK;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); GLCHK;
}
void display()
{
GLuint w, h; std::vector<GLubyte> img; if (lodepng::decode(img, w, h, "test2.png")) __debugbreak();
glBindTexture(GL_TEXTURE_2D, texture); GLCHK;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,w,h, 0, GL_RGBA, GL_UNSIGNED_BYTE, &img[0]); GLCHK;
glClear(GL_COLOR_BUFFER_BIT); GLCHK;
glBindTexture(GL_TEXTURE_2D, texture); GLCHK;
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); GLCHK;
glutSwapBuffers();
glutPostRedisplay();
}
glutはwin32ウィンドウを使用します。独自のウィンドウを作成したいという場合は、glutを使用することはできません。 [こちら](https://www.khronos.org/opengl/wiki/Creating_an_OpenGL_Context_(WGL))と[this](http://www.mbsoftworks.sk/index.php?page=tutorials&series=1&tutorial=2)良い出発点です。 – BDL
'wglCreateContext'は必要な関数の名前です。また、あなたとOpenGLの間にGLUTがあることを理解する必要があります。その仲介者がいなくなると、しばしば当然のことと思われる多くの機能の助けを借りなければ、同じことを達成するためにより多くの努力が必要になります。おそらく、あなたはここで解決策#2でいくつかの使用を見つけるでしょう:https://www.codeproject。com/questions/672673/how-to-save-opengl-images-to-the-bmp-file – enhzflep
@BDL私は既にwin32ウィンドウを持っていますが、メニュー項目もありますが、ウィンドウを作成し、正常に今私は私のレンダリングウィンドウをwin32ウィンドウに置き換えたいだけです。私たちはHWNDハンドルをglutに渡すことはできますか? – Krish