Wiem ze mozna podac normalne dla wierzcholkow, i gl interpoluje normalne dla pkt. nalezacych do trojkata. Ale czy da sie w opengl zdefiniowac normalne dla kazdego pkt, albo choc podac wzor na te normalne?
gl interpoluje normalne dla pkt. nalezacych do trojkata. Ale czy da sie w opengl zdefiniowac normalne dla kazdego pkt, albo choc podac wzor na te normalne?
I o co ci chodzi czlowieku :0
A skad ty to wiesz? Podstawy: gltexcoord2f(); glcolor3f(); glnormal3f(); i dopiero wtedy glvertex3f();
function Normal(point1, point2, point3 : t3dpoint; NormalizeNormal : boolean) : t3dpoint;
var
v1, v2 : t3dpoint;
vn : t3dpoint;
begin
vn.x := 0.0;
vn.y := 0.0;
vn.z := 0.0;
Result := vn;
v1 := Vector(point2, point1);
v2 := Vector(point3, point1);
vn := vectorcross(v1,v2);
if NormalizeNormal = true then vn := Normalize(vn);
Result := vn;
end;
function Vector( vPoint1, vPoint2 : T3dPoint) : T3dPoint;
var
vVector : T3dPoint;
begin
vVector.X := 0.0; vVector.Y := 0.0; vVector.Z := 0.0; // Initialize our variable to zero
// In order to get a vector from 2 points (a direction) we need to
// subtract the second point from the first point.
vVector.x := vPoint2.x - vPoint1.x; // Get the X value of our new vector
vVector.y := vPoint2.y - vPoint1.y; // Get the Y value of our new vector
vVector.z := vPoint2.z - vPoint1.z; // Get the Z value of our new vector
result := vVector; // Return our new vector
end;
function vectorcross(v1, v2 : t3dpoint) : t3dpoint;
var
crossproduct : t3dpoint;
begin
crossproduct.x := (v1.y*v2.z)-(v1.z*v2.y);
crossproduct.y := (v1.x*v2.z)-(v1.x*v2.z);
crossproduct.z := (v1.x*v2.y)-(v1.y*v2.x);
Result := crossproduct;
end;
gosc napisał(a)
Wiem ze mozna podac normalne dla wierzcholkow, i gl interpoluje normalne dla pkt. nalezacych do trojkata. Ale czy da sie w opengl zdefiniowac normalne dla kazdego pkt, albo choc podac wzor na te normalne?
Da sie podac wektory normalne dla kazdego punktu a raczej teksla jednak nie robi sie tego dla oswietlenia wierzcholkowego (per-vertex).
Wektor normalny jest wektorem prostopadlym do plaszczyzny (np do trojkata), aby uzyskac wektor prostopadly do jakies plaszczyzny liczy sie iloczyn wektorowy dwoch wektorow lezacych na tej plaszczyznie w wyniku czego dostaje sie wektor do niej prostopadly. Nalezy jednak ustalic kolejnosc mnozenia wektorowego poniewasz od niego zalezy zwrot wynikowego wektora a w OpenGL zwrot ten bedzie istotny. Wektor normalny powinien byc tez znormalizowany - powinien miec dlugosc rowna jeden.
W kodzie, ktory wkleil moj przedmowca znajduje sie miedzy innymi funkcja wykonujaca iloczyn wektorowy.
Pozdr. skalniak