Witam,
Mam problem z przenikaniem się ścian sześcianów. Pod różnym widokiem widać jakby brakowało co poniektórych ścian. Utworzyłem sobie kilka prostych procedur które tworzą mi sześciany. Następnie za pomocą tablicy produkuje jakiś kształt z tych sześcianów. Zauważyłem że gdy przestawiam sobie produkcje ścian w procedurze to zmienia mi się wygląd (tak jakby tutaj mógł tkwić problem).
//RYSOWANIE LINII POMOCNICZYCH
void linie(void)
{
glLineWidth(1);
glBegin(GL_LINES);
glColor3f(0, 0, 0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(100, 0, 0);
glVertex3f(0, 0, 0);
glVertex3f(0, 100, 0);
glVertex3f(0, 0, 0);
glVertex3f(0, 0, 100);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(-100, 0, 0);
glVertex3f(0, 0, 0);
glVertex3f(0, -100, 0);
glVertex3f(0, 0, 0);
glVertex3f(0, 0, -100);
glEnd();
}
// TWORZENIE NOWEGO SZESCIANU 1X1X1
void nowySzescian() {
//front, czerwony
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_POLYGON);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glEnd();
//up, pomarancz
glColor3f(1.0f, 0.5f, 0.0f);
glBegin(GL_POLYGON);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 1.0f, 1.0f);
glEnd();
//down, fiolet
glColor3f(1.0f, 0.0f, 1.0f);
glBegin(GL_POLYGON);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 1.0f);
glEnd();
//zielony
glColor3f(0.0f, 1.0f, 0.0f);
glBegin(GL_POLYGON);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glEnd();
//niebieski
glColor3f(0.0f, 0.0f, 1.0f);
glBegin(GL_POLYGON);
glVertex3f(0.0f, 0.0f, 1.0f);
glVertex3f(1.0f, 0.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 1.0f, 1.0f);
glEnd();
//zolty
glColor3f(1.0f, 1.0f, 0.0f);
glBegin(GL_POLYGON);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 1.0f);
glEnd();
}
//TABLICA SZESCIANOW KOPCA
int tablica_kopca[10][10] = {
{ 1,2,1,2,1,2,1,2,1,2 },
{ 2,3,2,3,3,3,2,3,2,3 },
{ 1,3, 3,4,3,4,3,4, 1,2 },
{ 2,2, 5,4,5,4,5,3, 2,1 },
{ 1,3, 6,3,7,7,4,2, 1,2 },
{ 2,2, 6,5,7,6,5,3, 2,1 },
{ 1,3, 5,5,4,5,4,2, 1,2 },
{ 2,2, 3,4,2,4,2,4, 2,1 },
{ 1,3,2,3,2,3,2,3,1,2 },
{ 2,1,2,1,2,1,2,1,2,1 },
};
//FUNKCJA BUDUJ KOPIEC Z POWYZSZEJ TABLICY
void nowyKopiec() {
//rysowanie szescianow w osi Z
for (int z = 0; z < (sizeof tablica_kopca / sizeof tablica_kopca[0]) ; z++) {
//przesuniecie w osi Z
glTranslatef(0, 0, 1);
//rysowanie szescianow po osi X
glPushMatrix();
for (int x = 0; x < (sizeof tablica_kopca[0] / sizeof(int)); x++) {
glPushMatrix();
//tworzenie szescianow w osi Y
for (int y = 0; y < tablica_kopca[z][x]; y++) {
nowySzescian();
//przesuniecie w osi Y
glTranslatef(0, 1, 0);
}
glPopMatrix();
//przesuniecie w osi X
glTranslatef(1, 0, 0);
}
glPopMatrix();
}
}
// GLOWNE RYSOWANIE SCENY
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Umozliwienie obracania scena - NIEDZIALA CHYBA DOBRZE
glPushMatrix();
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
//linie pomocnicze
linie();
//budowanie kopca
glRotatef(45.0, 1.0, 1.0, 1.0);
nowyKopiec();
}
Bardzo proszę o pomoc!