1
일단 응용 프로그램을 실행하면 두 개의 렌더 사이에서 응용 프로그램의 뷰포트가 깜박입니다. 프론트 버퍼와 백 버퍼가 바뀌고 있다고 가정합니다.깜박임 (백 버퍼?)
어떻게 방지 할 수 있습니까? 모든 삼각형이 항상 화면에 머물러 있기를 바랍니다.
나는 Sierpinski 가스켓을 연구하고있다. (나는 아직 끝나지 않았지만, 알아 내고 싶지 않다!). 나는 일반 코드 정리에 관심이있다. 나는 어떤 제안이라도 열려있다!
#include SFML/Graphics.hpp
#include GL/glew.h
using namespace sf;
struct point
{
float x, y; // z is always 0 ... for now. MWUAHAHAA
};
point points[3] = {{0.f, 1.f}, // top
{-1.f, -1.f}, // left
{ 1.f, -1.f}}; // right
point temp = {points[0].x, points[0].y};
void renderFirstTriangle()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1.f, 1.f, 1.f);
glVertex3f(points[0].x, points[0].y, 0.f);
glColor3f(1.f, 1.f, 1.f);
glVertex3f(points[1].x, points[1].y, 0.f);
glColor3f(1.f, 1.f, 1.f);
glVertex3f(points[2].x, points[2].y, 0.f);
glEnd();
}
int main()
{
Window window(VideoMode(800, 600), "Fractal", Style::Default, ContextSettings(32));
window.setVerticalSyncEnabled(true);
renderFirstTriangle();
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (event.type == Event::Resized)
glViewport(0, 0, event.size.width, event.size.height);
else if (event.type == Event::Closed)
window.close();
}
for (int i = 0; i < 2; i++)
{
// calculate new vertex positions
temp.x = points[0].x;
temp.y = points[0].y;
glBegin(GL_TRIANGLES);
if(i % 2)
glColor3f(0.1f, 0.1f, 0.1f);
glVertex3f((points[0].x + points[1].x)/2, (points[0].y + points[1].y)/2, 0.0f);
glVertex3f((points[1].x + points[2].x)/2, (points[1].y + points[2].y)/2, 0.0f);
glVertex3f((points[2].x + temp.x)/2, (points[2].y + temp.y)/2, 0.0f);
glEnd();
}
window.display();
}
}
안녕하세요. 귀하의 회신에 감사드립니다. 나는 이것을 시도했지만 화면에 루프의 데이터 플롯 만 표시했다. 그래서,이 경우에, 단일 삼각형의 무리가 그 지점까지 모든 삼각형이 아닙니다. 이것이 SFML의 문제 일 수 있습니까? –