Mam zrobić program rysujący trójkąt Sierpińskiego (fraktal), program zrobiłem. Problem w tym że stwierdziłem że aby było ładnie i schludnie zrobię sobie nowa klasę DrawTriangle w której będą wszystkie metody i dane potrzebne do rysowania, problem w tym że w klasie DrawTriangle mam trzy razy wywoływaną metode triangle() ale ona się nie wywołuje. Nie wiem dlaczego. Starałem się nawet przekazać referencję do obiektu na rzecz którego mają się wykonać i nic ;/
Oto kody:
MAIN:
#include "stdafx.h"
#include "DrawTriangle.h"
#include <GL/glut.h>
void Reshape(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
}
void Render()
{
glClear(GL_COLOR_BUFFER_BIT);
float a [2] = {0.0, 0.5};
float b [2] = {-0.5, -0.5};
float c [3] = {0.5f, -0.5f};
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0.0, 0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5f, -0.5f);
glEnd();
DrawTriangle tri;
tri.triangle(a, b, c, 10, tri);
glFlush();
}
int main (int argc, char *argv[])
{
int counter = 100;
//funkcja inicjalizacyjna
glutInit(&argc, argv);
//parametry okna
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutInitDisplayMode(GLUT_RGB);
//tworzenie okna
glutCreateWindow("Fractal app");
//odswiezanie okna z nowymi wymiarami
glutReshapeFunc(Reshape);
//funkcja renderujaca
glutDisplayFunc(Render);
//kolor czyszczacy
glClearColor(0, 0, 0, 0);
glutMainLoop();
return 0;
}
DrawTriangle.h
#ifndef DrawTriangle_h
#define DrawTriangle_h
class DrawTriangle
{
private:
float tmp_a[2];
float tmp_b[2];
float tmp_c[2];
int counter;
public:
float middle (float a, float b);
void triangle (float a[], float b[], float c[], int counter, DrawTriangle & triRef);
};
#endif
DrawTriangle.cpp
#include "stdafx.h"
#include "DrawTriangle.h"
#include <GL/glut.h>
float DrawTriangle::middle (float a, float b)
{
return (a+b)/2;
}
void DrawTriangle::triangle (float a[], float b[], float c[], int counter, DrawTriangle & triRef)
{
tmp_a[0] = middle(a[0], b[0]);
tmp_a[1] = middle(a[1], b[1]);
tmp_b[0] = middle(b[0], c[0]);
tmp_b[1] = middle(b[1], c[1]);
tmp_c[0] = middle(c[0], a[0]);
tmp_c[1] = middle(c[1], a[1]);
glBegin(GL_TRIANGLE_FAN);
glColor3f(0.0f, 0.0f, 0.0f);
glVertex2f(tmp_a[0], tmp_a[1]);
glVertex2f(tmp_b[0], tmp_b[1]);
glVertex2f(tmp_c[0], tmp_c[1]);
glEnd();
if(counter > 0)
{
counter--;
triRef.triangle(a, tmp_c, tmp_a, counter, triRef);
triRef.triangle(b, tmp_b, tmp_a, counter, triRef);
triRef.triangle(c, tmp_c, tmp_b, counter, triRef);
}
}