-
1. Data: 2009-04-07 05:49:57
Temat: OpenGL - problem z normalnymi
Od: "Wojciech \"Spook\" Sura" <w...@s...medi.com.pl>
Witam!
Coś robię wybitnie nie tak z normalnymi do trójkątów... czy ktoś może
powiedzieć mi, dlaczego jeden trójkąt nie jest oświetlony mimo podania
poprawnej normalnej i włączenia dwustronnego oświetlenia?
procedure TForm2.Timer1Timer(Sender: TObject);
var LightPos : array[0..2] of GLfloat;
LightCol : array[0..3] of GLfloat;
begin
glClearColor(0.0,0.0,0.0,1.0);
SwapBuffers(wglGetCurrentDC);
glViewport(0, 0, self.width, self.height);
// Projekcja
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1,1,-1,1,1,20);
glTranslatef(0.0,0.0,-10.0);
// Światło
LightPos[0]:=0.0;
LightPos[1]:=0.0;
LightPos[2]:=0.0;
LightCol[0]:=1.0;
LightCol[1]:=1.0;
LightCol[2]:=1.0;
LightCol[3]:=1.0;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.0,-10);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1);
glLightfv(GL_LIGHT0, GL_POSITION, @LightPos);
glLightfv(GL_LIGHT0, GL_DIFFUSE, @LightCol);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, 0.0);
glBegin(GL_TRIANGLES);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 2.0, 0.0);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(2.0, 2.0, 0.0);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(2.0, 0.0, 0.0);
glEnd();
glBegin(GL_TRIANGLES);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 2.0, 0.0);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(-2.0, 2.0, 0.0);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(-2.0, 0.0, 0.0);
glEnd();
end;
-
2. Data: 2009-04-07 18:01:41
Temat: Re: OpenGL - problem z normalnymi
Od: arti <t...@p...onet.pl>
On 7 Kwi, 07:49, "Wojciech \"Spook\" Sura" <wojciech.sura...@spam-
poczta.medi.com.pl> wrote:
> Coś robię wybitnie nie tak z normalnymi do trójkątów... czy ktoś może
> powiedzieć mi, dlaczego jeden trójkąt nie jest oświetlony mimo podania
> poprawnej normalnej i włączenia dwustronnego oświetlenia?
Prawdopodobnie sa roznie zorientowane (jeden "przodem", drugi
"tylem"), a normalne w obu przypadkach takie same.
-
3. Data: 2009-04-07 18:59:31
Temat: Re: OpenGL - problem z normalnymi
Od: Michoo <m...@v...pl>
Wojciech "Spook" Sura pisze:
> Witam!
>
> Coś robię wybitnie nie tak z normalnymi do trójkątów... czy ktoś może
> powiedzieć mi, dlaczego jeden trójkąt nie jest oświetlony mimo podania
> poprawnej normalnej i włączenia dwustronnego oświetlenia?
Strzelam, że dlatego, że jeden trójkąt podajesz zorientowany przodem do
obserwatora, a drugi tyłem, a normalne są te same. "Kolejność
wierzchołków" powinna być zgodna z ruchem wskazówek zegara jeżeli
patrzysz na przód, a przeciwna, jeżeli na tył.
I nie musisz za każdym razem ładować na nowo macierzy - starczy raz,
przy starcie a potem push/pop matrix na początku/końcu rysowania.
--
Pozdrawiam
Michoo
-
4. Data: 2009-04-10 12:15:37
Temat: Re: OpenGL - problem z normalnymi
Od: Wojciech Waga <a...@o...pl>
Michoo napisał(a):
> Wojciech "Spook" Sura pisze:
>> Witam!
>>
>> Coś robię wybitnie nie tak z normalnymi do trójkątów... czy ktoś może
>> powiedzieć mi, dlaczego jeden trójkąt nie jest oświetlony mimo podania
>> poprawnej normalnej i włączenia dwustronnego oświetlenia?
> Strzelam, że dlatego, że jeden trójkąt podajesz zorientowany przodem do
> obserwatora, a drugi tyłem, a normalne są te same. "Kolejność
> wierzchołków" powinna być zgodna z ruchem wskazówek zegara jeżeli
> patrzysz na przód, a przeciwna, jeżeli na tył.
Domyślnie jest odwrotnie,
CW - tył, CCW - przód
pozdr.
w.