Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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上绘制矩形的问题_C++_Opengl_Opengl Compat - Fatal编程技术网

C++ 关于在opengl上绘制矩形的问题

C++ 关于在opengl上绘制矩形的问题,c++,opengl,opengl-compat,C++,Opengl,Opengl Compat,这个问题要求我在键盘上按“r”时画矩形。我试着写一个函数来画这个矩形。字符回调功能是正确的,它给我反馈说我已经按下了“r”。我不知道如何使三角形出现。我在函数中添加了这一行glfwSwapBuffers(窗口),但它仍然不起作用。提前谢谢你的帮助 #define GLEW_STATIC #include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> #include <vector>

这个问题要求我在键盘上按“r”时画矩形。我试着写一个函数来画这个矩形。字符回调功能是正确的,它给我反馈说我已经按下了“r”。我不知道如何使三角形出现。我在函数中添加了这一行
glfwSwapBuffers(窗口)
,但它仍然不起作用。提前谢谢你的帮助

#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
#include <vector>
#include <cmath>
#include <iostream> 

#define WINDOW_WIDTH 900
#define WINDOW_HEIGHT 600

float frameBuffer[WINDOW_HEIGHT][WINDOW_WIDTH][3];
bool mask[WINDOW_HEIGHT][WINDOW_WIDTH];
GLFWwindow *window;
void display()
{
    glColor3f(1.0, 0.0, 0.0);
    glBegin(GL_POLYGON);
    glVertex2i(50, 90);
    glVertex2i(100, 90);
    glVertex2i(100, 150);
    glVertex2i(50, 150);
    glEnd();
    glFlush();
}
void CharacterCallback(GLFWwindow* lWindow, unsigned int key)
{
    if(char(key) == 'r')
       display();
}


 void Init()
{
    glfwInit();
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "- <xx>", NULL, NULL);
    glfwMakeContextCurrent(window);
    glfwSetCharCallback(window, CharacterCallback);
    glewExperimental = GL_TRUE;
    glewInit();
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    ClearFrameBuffer();
}

int main()
{   
    Init();
    while (glfwWindowShouldClose(window) == 0)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        Display();
        glFlush();
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}
#定义GLEW#U静态
#包括
#包括
#包括
#包括
#包括
#包括
#定义窗口宽度900
#定义窗口高度600
浮动帧缓冲区[窗口高度][窗口宽度][3];
布勒遮罩[窗高][窗宽];
GLFWwindow*窗口;
无效显示()
{
GL3F(1.0,0.0,0.0);
glBegin(GL_多边形);
glVertex2i(50,90);
glVertex2i(100,90);
glVertex2i(100150);
glVertex2i(50150);
格伦德();
glFlush();
}
void CharacterCallback(GLFWwindow*lWindow,无符号整数键)
{
如果(字符(键)='r')
显示();
}
void Init()
{
glfwInit();
glfwWindowHint(GLFW_可调整大小,GL_为FALSE);
window=glfwCreateWindow(窗口宽度,窗口高度,“-”,NULL,NULL);
glfwMakeContextCurrent(窗口);
glfwSetCharCallback(窗口,CharacterCallback);
glewExperimental=GL_TRUE;
glewInit();
glClearColor(0.0f、0.0f、0.0f、1.0f);
ClearFrameBuffer();
}
int main()
{   
Init();
同时(GLFWWindowsShouldClose(窗口)==0)
{
glClear(GLU颜色缓冲位);
显示();
glFlush();
glfwSwapBuffers(窗口);
glfwPollEvents();
}
glfwTerminate();
返回0;
}

当您使用
glBegin
/
glEnd
序列绘制时,每个顶点坐标都会通过当前视图矩阵和当前投影矩阵进行变换。
绘制场景时,变换后,几何体的坐标必须分别位于剪辑空间和归一化设备空间中。规格化设备空间是一个立方体积,左下前部(-1,-1,-1)和右上前部远(1,1,1)。此立方体中的所有几何体都在视口中“可见”。此立方体之外的所有几何体都将被剪裁。
如果要使用窗口(“像素”)坐标绘制场景,则必须设置“按”。在正交投影时,视图空间坐标将线性变换为剪辑空间坐标。这意味着正交投影矩阵可用于缩放视图空间坐标。e、 g:

glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(0.0,(GLdouble)窗宽,(GLdouble)窗高,0.0,-1.0,1.0);
glMatrixMode(GLU模型视图);

您可以在
Init()的末尾执行此操作

顶点的坐标应该标准化:
(0,0)
是窗口的中心,
(-1,-1)
是左下角,
(1,1)
是右上角。@NicoSchertler谢谢!你的意思是坐标(50,90)超出边界了吗?这就是它没有出现的原因。谢谢!我正在努力理解你的答案。谢谢!我理解你的解释。它正在工作。