- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我正在用 C++ 开发一个 OpenGL 项目,我遇到了一个奇怪的问题,在创建 GLFWwindow 并绘制到它之后,我正在绘制的区域只包含屏幕的左下四分之一.例如,如果屏幕尺寸为 640x480,我在 (600, 440) 处绘制了一个 40x40 的正方形,它会显示在这里,而不是像我期望的那样显示在右上角:
如果我将正方形移动到不在 640x480 参数范围内的区域,它会被截断,如下所示:
我将从下面的 main.cpp 中发布我的代码:
#define FRAME_CAP 5000.0;
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include "InputHandler.h"
#include "Game.h"
using namespace std;
void gameLoop(GLFWwindow *window){
InputHandler input = InputHandler(window);
Game game = Game(input);
//double frameTime = 1.0 / FRAME_CAP;
while(!glfwWindowShouldClose(window)){
GLint windowWidth, windowHeight;
glfwGetWindowSize(window, &windowWidth, &windowHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, windowWidth, 0.0, windowHeight, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0, 0, windowWidth, windowHeight);
game.render();
game.handleInput();
game.update();
glfwSwapBuffers(window);
glfwPollEvents();
}
}
int main(int argc, const char * argv[]){
GLFWwindow *window;
if(!glfwInit()){
return -1;
}
window = glfwCreateWindow(640.0, 480.0, "OpenGL Base Project", NULL, NULL);
if(!window){
glfwTerminate();
exit(EXIT_FAILURE);
}
glewInit();
glfwMakeContextCurrent(window);
gameLoop(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
我不确定为什么会这样,但是如果您有任何想法请告诉我,谢谢!
最佳答案
对于像我一样遇到这个问题的人,您需要将帧缓冲区大小传递给 glViewport 调用,如下所示:
GLFWwindow * window = Application::getInstance().currentWindow;
glfwGetFramebufferSize(window, &frameBufferWidth, &frameBufferHeight);
glViewport(0, 0, frameBufferWidth, frameBufferHeight);
在某些设备(主要是 Apple Retina 显示屏)中,像素尺寸不一定与视口(viewport)尺寸 1:1 匹配。检查here用于 GLFW 文档。
关于c++ - OpenGL 渲染限制在屏幕的左下四分之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31303291/
线性渐变适用于图像,但文本不会出现在图像前景上。此外,渐变不应该出现在文本上。我哪里做错了? 任何帮助都感激不尽。 .glimage { display: flex; justify-cont
我正在使用 LWJGL 和 Slick2d 制作 boulderdash 重制版,并且遇到了一些我安装的另一个 boulderdash 重制版中不存在的问题(废弃软件 Digging Jim - 很酷
我正在构建一个网站,当用户将鼠标悬停在产品上时,我想为该图像设置左上角、右上角、左下角和右下角的边框。由于 CSS 属性 border-top-left-image 在多年前就被弃用了,唯一的其他解决
给定:2 个数组,每个包含 4 个点的坐标: point_array_a = [point_a_1_x, point_a_1_y, point_a_2_x, ..., point_a_4_y] poi
我是一名优秀的程序员,十分优秀!