Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL将ClipCoord转换为ScreenCoord_C++_Opengl_Glm Math - Fatal编程技术网

C++ OpenGL将ClipCoord转换为ScreenCoord

C++ OpenGL将ClipCoord转换为ScreenCoord,c++,opengl,glm-math,C++,Opengl,Glm Math,我想将ClipCoord转换为ScreenCoord,但我不知道获得画布宽度和高度的正确方法是什么。 (画布=图像平面中的可绘制区域) 在OpenGL中,画布是透视投影中的近平面 所以我现在有了答案。所以你需要一个函数,它取一个点glm::vec2(使用相机矩阵中的矩阵乘法将其转换为glm::vec2),然后通过值映射将其显示到屏幕上 一个有用的链接可能是,这取决于用于创建具有OpenGL上下文的窗口的库。例如,如果您使用GLFW(一个用于窗口创建的强大库,顺便说一句),您可以通过glfwGe

我想将ClipCoord转换为ScreenCoord,但我不知道获得画布宽度和高度的正确方法是什么。 (画布=图像平面中的可绘制区域)

在OpenGL中,画布是透视投影中的近平面


所以我现在有了答案。

所以你需要一个函数,它取一个点glm::vec2(使用相机矩阵中的
矩阵乘法将其转换为
glm::vec2
),然后通过值映射将其显示到屏幕上


一个有用的链接可能是

,这取决于用于创建具有OpenGL上下文的窗口的库。例如,如果您使用GLFW(一个用于窗口创建的强大库,顺便说一句),您可以通过
glfwGetFramebufferSize(GLFWwindow*window,int*width,int*height)
获得帧缓冲区大小,如下所示:

int width;
int height;
glfwGetFramebufferSize(window, &width, &height);
但这只是帧缓冲区的大小,如果您想获得视口,它是从OpenGL写入帧缓冲区的像素数,
glGetIntegerv(GLenum pname,GLint*data
是您要寻找的:

GLint* viewport = new GLint[4];
glGetIntegerv(GL_VIEWPORT, viewport);
int x =      viewport[0];
int y =      viewport[1];
int width =  viewport[2];
int height = viewport[3];
delete[] viewport;
GLint* viewport = new GLint[4];
glGetIntegerv(GL_VIEWPORT, viewport);
int x =      viewport[0];
int y =      viewport[1];
int width =  viewport[2];
int height = viewport[3];
delete[] viewport;