Hej
Mam taki problem. Musiałem w przestrzeni 3D wyświetlić wykres danej funkcji f(x,y).
Nie było z tym problemów, wyznaczyłem sobie punkty, następnie połączyłem je odpowiednio tak że wyszła siatka. Napisałem to w Jave 3D.
Ale zacząłem kombinować i pomyślałem sobie że fajnie jakby punkty były połączone nie liniami, a były wierzchołkami poligonów tak że cały wykres jest płaszczyzną.
Obkminiłem jak to zrobić, narysował mi program płaszczyznę.
Tutaj pojawia się problem.
Nie wiem jak to wytłumaczyć ale po obróceniu mojego wykresu jest on niewidoczny.
Tzn tak jakby z jednej strony pojedynczy poligon jest widoczny a gdy zajrzy się na niego od drugiej strony (od tyłu, np po obrocie w osi X) jest niewidoczny.
Nie mam ustawionego żadnego oświetlenia, ponieważ jeszcze nad tym będę pracował.
Być może ktoś kto korzysta z OpenGL będzie wiedzieć co jest grane, o czym ja zapomniałem albo co ja głupio zrobiłem.
Oto kawałek kodu:
private QuadArray drawQuadArray(ArrayList points)
{
QuadArray quadArray = new QuadArray (1000000, QuadArray.COORDINATES);
Point3d[] pointsArray = points.get(0);
int dimension = pointsArray.length; //Pobieram jaka jest długość wymiaru X
int i=0;
for(int j=1 ; j {
for(int k=1 ; k {
Point3d a = points.get(k)[j];
Point3d b = points.get(k-1)[j];
Point3d c = points.get(k)[j-1];
Point3d d = points.get(k-1)[j-1];
quadArray.setCoordinate (i++, a);
quadArray.setCoordinate (i++, b);
quadArray.setCoordinate (i++, d);
quadArray.setCoordinate (i++, c);
//System.out.println(a + " " + b + " " + c + " " +d);
}
}
return quadArray;
}
Kod oczywiście jest poglądowy :P
W ArrayList points trzymam punkty które chcę połączyć.
Wdzięczny byłbym za każdą wskazówkę. Może jak dodam materiał z jakiego jest obiekt wykonany i oświetlenie to coś to zmieni ??
Pozdrawiam :)
Uprzedzam ze styczność z OpenGL miałem tylko w C, wiec to co napisze musisz jeszcze zinterpretować tak aby działało u Ciebie.
Gdy chcesz narysować jakiś prymityw dajmy na to kwadrat poszczególne wierzchołki podajesz w pewnej, nieprzypadkowej kolejności np tak(przykład w C):
glColor3f (1.0,0.0,0.0);
glBegin (GL_POLYGON);
glVertex3f (0.0, 0.0, 0.0);
glVertex3f (0.0, 1.0, 0.0);
glVertex3f (1.0, 1.0, 0.0);
glVertex3f (1.0, 0.0, 0.0);
glEnd ();
kolejność ta decyduje o tym z której strony i które powierzchnie mają być widoczne, a które nie. Oczywiście można to zmienić tak aby rysowane były obie trony, zwykle jednak np. w grach takie coś jest niepożądane- dlatego domyślnie tak to ustalono- jak np zrobiłbyś lustro weneckie?
aby lepiej zapoznać się z zagadnieniem przeczytaj artykuł: http://kursy.ddt.pl/?LessonId=205