当我在键盘上按“ r”时,该问题要求绘制矩形。我尝试编写一个函数来绘制此矩形。字符回调功能是正确的,它给了我已经按“ r”的反馈。我不知道如何使三角形出现。我在函数中添加了这一行 glfwSwapBuffers(window)
,但仍然无法正常工作。预先感谢您的帮助。
#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;
}
答案 0 :(得分:1)
当您按glBegin
/ glEnd
序列进行绘制时,每个顶点坐标将由当前视图矩阵和当前投影矩阵进行变换。
绘制场景时,在进行转换之后,几何的坐标必须位于剪辑空间或归一化的设备空间中。规范化的设备空间为立方体积,其左下前(-1,-1,-1)和右上前远(1、1、1)。此多维数据集中的所有几何图形在视口上都是“可见的”。裁剪出该立方体中的所有几何图形。
如果要使用窗口(“像素”)坐标绘制场景,则必须通过orthographic projection设置glOrtho
。在正交投影中,视图空间坐标被线性转换为剪辑空间坐标。这意味着可以使用正交投影矩阵来缩放视图空间坐标。例如:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, (GLdouble)WINDOW_WIDTH, (GLdouble)WINDOW_HEIGHT, 0.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
您可以在Init()
的末尾执行此操作。