我使用openGL绘制凹面,但第一个凹面(主体)是错误的。 it has 4 points, but display is 3 points,为什么?
#include <iostream>
#include <vector>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
struct Point2D
{
double m_x;
double m_y;
Point2D(int x, int y)
: m_x(x), m_y(y)
{
}
};
void render()
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
std::vector<Point2D> subject;
subject.push_back(Point2D(0, 100));
subject.push_back(Point2D(75, 0));
subject.push_back(Point2D(200, 50));
subject.push_back(Point2D(100, 50));
std::vector<Point2D> clip;
clip.push_back(Point2D(125, 175));
clip.push_back(Point2D(-15, 50));
clip.push_back(Point2D(70, 85));
clip.push_back(Point2D(75, 25));
std::vector<std::vector<Point2D> > vPolygon;
vPolygon.push_back(subject);
vPolygon.push_back(clip);
//
int sizei = (int)vPolygon.size();
for (int i = 0; i < sizei; ++i)
{
if (0 != i)
{
continue;
}
glLineWidth(2.0);
glBegin(GL_POLYGON);
auto polygon = vPolygon[i];
int sizej = (int)polygon.size();
for (int j = 0; j < sizej; ++j)
{
auto coordX = polygon[j].m_x;
auto coordY = polygon[j].m_y;
printf("%f\t%f\n", coordX, coordY);
//glColor3f(k & 0x04, k & 0x02, k & 0x01);
glVertex2f((float)(coordX - 100.) / 200., (float)(coordY - 120.) / 200.);
}
glEnd();
}
}
int main()
{
GLFWwindow* window;
// Initialize the library
if(!glfwInit())
{
std::cout << "Failed to initialize GLFW!\n";
return -1;
}
// Create a windowed mode window and its OpenGL context
window = glfwCreateWindow(640, 480, "base", NULL, NULL);
if(!window)
{
glfwTerminate();
std::cout << "Failed to create window using GLFW!\n";
return -1;
}
// Make the window's context current
glfwMakeContextCurrent(window);
// init glew
glewExperimental = GL_TRUE;
if(glewInit())
{
std::cout << "Failed to init GLEW!\n";
return -1;
}
// Loop until the user closes the window
while(!glfwWindowShouldClose(window))
{
// if Esc is pressed, close the window
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
{
glfwSetWindowShouldClose(window, GLFW_TRUE);
}
// render
render();
// Swap front and back buffers
glfwSwapBuffers(window);
// Poll for and process events
glfwPollEvents();
}
glfwTerminate();
exit(EXIT_SUCCESS);
return 0;
}
另外,我有一个关于while(!glfwWindowShouldClose(window))
的问题,如何终止渲染循环?
printf("%f\t%f\n", coordX, coordY);
总是运行。这是错误的。
答案 0 :(得分:0)
总结一下你的问题:
GL_STENCIL_TEST
(参见上面Rabbid76的评论)。while(!glfwWindowShouldClose(window) && glfwGetKey(window_, GLFW_KEY_ESCAPE) != GLFW_PRESS);
应该可以退出窗口。
代码建议取自Window not closing GLFW。