Implementación del algoritmo de Cyrus-Beck en C#

internal sealed class CyrusBeckClipping : IClippingAlgorithm {
private List _clipArea = new List();
private List _normals = new List();

public IEnumerable GetBoundingPolygon() {
return _clipArea;
}

public void SetBoundingRectangle(Vector2 start, Vector2 end) {
_clipArea.Clear();

_clipArea.Add(start);
_clipArea.Add(new Vector2(end.X, start.Y));
_clipArea.Add(end);
_clipArea.Add(new Vector2(start.X, end.Y));

computeNormals();
}

public void SetBoundingPolygon(IEnumerable points) {
_clipArea.Clear();
_clipArea.AddRange(points);
computeNormals();
}

private void computeNormals() {
_normals.Clear();

for (int i = 0; i < _clipArea.Count - 1; i++) {
Vector2 direction = _clipArea[i + 1] - _clipArea[i];
direction.Normalize();

_normals.Add(new Vector2(-direction.Y, direction.X));
}

{
Vector2 direction = _clipArea[0] - _clipArea[_clipArea.Count - 1];
direction.Normalize();

_normals.Add(new Vector2(-direction.Y, direction.X));
}
}

public bool ClipLine(ref Line line) {
Vector2 P = line.End - line.Start;
float tMinimum = 0, tMaximum = 1;
const float epsilon = 0.0001f;

for (int i = 0; i < _clipArea.Count; i++) {
Vector2 F = _clipArea[i];
Vector2 N = _normals[i];
Vector2 Q = line.Start - F;

float Pn = Vector2.DotProduct(P, N);
float Qn = Vector2.DotProduct(Q, N);

if (Pn <> -epsilon) {
if (Qn < 0) return false;
}
else {
float computedT = -Qn / Pn;
if (Pn < 0) {
if (computedT < tMinimum)
return false;
if (computedT < tMaximum)
tMaximum = computedT;
}
else {
if (computedT > tMaximum)
return false;
if (computedT > tMinimum)
tMinimum = computedT;
}
}
}

if (tMinimum < tMaximum) {
if (tMaximum < 1)
line.End = line.Start + tMaximum * P;

if (tMinimum > 0)
line.Start = line.Start + tMinimum * P;
}
else return false;

return true;
}

public ClippingCapabilities Capabilities {
get {
return ClippingCapabilities.ConvexWindow |
ClippingCapabilities.RectangleWindow;
}
}

public override string ToString() {
return "Cyrus-Beck algorithm";
}
}

Modelo de Luz de Lambert

En esta expo vimos que:
Se usa en superficies en donde la incide de forma de que solo se depende del angulo de incidencia y no se depende del angulo de observacion, es decir, que la luz que inciden depende unicamente del angulo en el que fue proyectada y no del angulo en la que la miramos. No se debe de emplear en superficies que absorban la uz como superficies rugosas.

Les falto un poco de entusiasmo y más a la chava.

Iluminación Local

En esta expo entendimos como:

Calcular la componente de las fuentes emisoras de luz
La caracterizacion de fuentes de luz
La descripcion de luminarias

En esta expo les falto que investigaran bien para que comprendieramos mejor las siguientes exposiciones.

Radiosidad

Se debe de calcular la radiosidad para cada polígono, ademas de segmentar la escena. Las luces se consideran polígonos emisores, calculamos la interaccion con todos los polígonos visibles para la luz, la luz que se absorbe y la que se genera. Se sigue hasta que un porcentaje de la energía luminosa ha sido absorbida.

Se rifaron aunque el primero que expuso leia las diapositivas. Los demas si sabian de lo que exposieron. Con esta expo aprendimos a darle un mejor ealismo a nuestra escena.

Trazado de rayos

En esta expo vimos que:

Se toman en cuenta los rayos que llegan al punto de vista, hay un trazado inverso de rayos, el algoritmo depende del punto de vista. Se tiene que calcular la intersección con los objetos, la visibilidad de las luces. Se tiene que calcular el rayo reflejado y el refractado, el proceso se realiza para cada rayo. Se sigue hasta que el rayo tiene poca energía o sale de la escena o choca con un objeto opaco.

Les falto algo, como que más ganas.

Iluminación Global

En esta expo vimos que:

La luz reflejada por un punto se considera, teniendo en cuenta toda la luz que llega. No solo procede de las luces, los efectos, las sombras producidas, la reflexión de un objeto en los otros, las transparencias y la realidad.

Es decir la iluminación depende del emisor y del receptor. Nos sirvio de introduccion a los demas modelos que le siguen.

Modelo de Iuminacion Local Blinn

En esta expo entendendimos el metodo de blinn y sus mejorias con respecto al de phong y las mejoras en base a recursos de la maquina y el realismo del objeto. A demás hubo más dinámica ahora en cuanto al tiempo, comprendimos que es un metodo de sombreado de uso general, en particular este metodo sirve para obtener los brillos redondeados.