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