normalne w opengl

0

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?

0

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;
0
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

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0