Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Aporte] Final de Técnicas De Gráficos Por Computadoras - 07/12/2017
Autor Mensaje
Degue1297 Sin conexión
Empleado del buffet
XD
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3
Agradecimientos dados: 2
Agradecimientos: 6 en 2 posts
Registro en: Mar 2016
Mensaje: #1
[Aporte] Final de Técnicas De Gráficos Por Computadoras - 07/12/2017 Finales Técnicas de Gráficos por Computadoras
Hola. Vengo a aportarles el final de TGC que se tomó la primer fecha de finales. Es igual que el que se tomó en Julio de este año por lo que me dijo el profe, pero las próximas fechas el final va a ser distinto. Así que practiquen esos Shaders.

Final
Spoiler: Mostrar

Respuestas
Spoiler: Mostrar
NOTA: Me explayo mucho acá para que se entienda. En el final haganlo más resumido. Y no elijan las respuestas por descarte buscando errores (Corte, A y B están mal por X e Y, por lo que la correcta es la C). Contesté así porque me cuesta explicar por qué están bien las cosas, y al profe no le gustó mucho, pero me perdonó XD)

1) La respuesta correcta es la 2: el avión se rota y luego se traslada como debe ser (Las transformaciones se realizan multiplicando matrices de Escalado, Rotado y luego Traslación, en ese orden), la hélice también se traslada y se rota correctamente, y en la última multiplicación de matrices, se transforma la hélice en función de la transformación del avión y queda como en la imagen. Noten que la 1 no puede ser porque en la última línea rota sólo en función de la traslación del avión, y la 3 no puede ser porque en la traslación suma ángulos, nada que ver.

2) Copio el código y marco los errores:

NOTA: El error C está en azul porque en realidad está bien y no sé por qué. Me olvidé de preguntarle al profe y sigo creyendo que es un error DX

VS_OUTPUT vs_corte_transversal(VS_INPUT Input)
{
VS_OUTPUT Ouput;
Output.worldPosition = mul(Input.Position, matWorld);
Output.Texcoord = Input.Texcoord;
return Output;
}
// Pixel Shader
float4 ps_corte_transversal(VS_OUTPUT input) : COLOR0
{
float4 plane = float4(A, B, C, D);
float distancia = dot(plane, float4(input.worldPosition, 1));
float epsilon = 0.3;
if (A. distancia == -epsilon) return B. float4(0, 0, 0, 0);
else if (C. distancia > epsilon) return float4(1, 0, 0, 1);
else return tex2D(diffuseMap, D. input.Position);
}

Error A: Esta condición causa que sólo se borre lo que hay en la recta donde el producto escalar da -0.3, no todo lo que hay detrás de ese plano. La condición debería ser distancia < -epsilon.
Error B: No se descarta el pixel en cuestión, sino que se pone uno invisible. Habría que usar discard.
Error C: Está en azul porque no es un error según la corrección. Para mi está mal porque pinta de rojo los píxeles que están del lado correcto del plano y fuera del límite, cuando debería colorear con el texel. Ahí debería haber un menor a distancia < epsilon, o algo. Pero bueno. Sepan que está mal y no sé donde está el error que falta.
Error D: Ahí debería ir Input.Texcoord, que es la coordenada de textura del pixel, no la posición en pantalla del pixel.

3) La respuesta correcta es la 3. Fijense que hace variar las coordenadas X y Z en función de la altura del punto, por lo que se mueve menos abajo que arriba. Noten que la 1 no puede ser porque mueve las Coordenadas X y Z sin importar su altura, por lo cual el tronco se mece igual tanto arriba como abajo, mientras que la 2 tampoco puede ser porque únicamente afecta a la coordenada Y, no a las demás, por lo que da la impresión que el árbol se agranda o se achica dependiendo del tiempo.

4)

A) La respuesta correcta es la 2. Recordando un poco de Álgebra, el producto escalar, o producto punto (dot product) se define:
\[a \cdot b = |a| |b| cos \alpha\]
Entonces, si tomo el producto escalar de dos vectores normalizados me quedaría:
\[\widehat{a} \cdot \widehat{b} = cos \alpha \]
Porque el módulo de un vector normalizado, es decir, un versor, es 1.
Entonces, si tomo el producto escalar entre el versor de dirección del cono de luz y el versor del vector formado por el punto del mundo que pruebo y la posicion de la luz (En el modelo 3D claro está), con esto sé el coseno del ángulo entre el cono y el punto que estoy probando. Luego, lo comparo con el ángulo de apertura de la luz (SpotLightAngleOfView) - Tengo mis dudas en esto, porque debería ser un coseno también - y si es menor, entonces está adentro del cono. Si no, pongo el color negro.
La 1 no puede ser porque no hace el producto escalar para determinar que esté adentro del cono y la 3 tampoco porque considera el punto de la pantalla 2D y no del modelo 3D (Recuerden que si queremos hacer cálculos así en los PS tenemos que sobrecargar los inputs con información del espacio 3D en los VS)

B) No hay efectos de sombra puesto que para ello es necesario un shader de post-procesado que genere un lightmap de todos los píxeles del frame en su conjunto para realizar el efecto de sombras (No me pregunten por qué está bien esto... Me salvó que diga shader de post-procesado en el título del punto 4...)


Espero que les sirva. Si hay algo raro en las respuestas me avisan.

Nota al pie, TGC es una electiva muy copada. Si les gusta programar y siempre quisieron hacer un juego en 3D, se las recomiendo mucho. Y si no, también. Lo que más me gustó, desde mi punto de vista, es que integra casi todas las materias que cursas en la carrera, al menos de los primeros tres años de carrera. Hay mucha aplicación directa de conceptos de Matemática y Física que se usan para optimizar y crear efectos gráficos. También se ven aplicaciones de algoritmos que se ven en Gestión de Datos para poder comprimir imágenes, optimizar procesamiento, etc. Por último, el tema más copado de la materia es Shaders, que es lo que se usa para crear efectos gráficos copados. Aunque es cierto que es bastante pesada y es bueno hacerla con tiempo.
En resumen, como toda electiva, te da una base, pero los contenidos son interesantes y muy integradores.
Si no saben que electiva elegir, tirense a TGC. Van a aprender un montón.
(Este mensaje fue modificado por última vez en: 09-12-2017 16:30 por Degue1297.)
09-12-2017 16:29
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Sharkan Sin conexión
Profesor del Modulo A
Sin estado :(
*****

Ing. en Sistemas
Facultad Regional General Pacheco

Mensajes: 219
Agradecimientos dados: 141
Agradecimientos: 36 en 29 posts
Registro en: Nov 2014
Mensaje: #2
RE: [Aporte] Final de Técnicas De Gráficos Por Computadoras - 07/12/2017
Lo voy a tener en cuenta... Aunque me falta.... jajaja... Gracias por el aporte!

wave" Quedate con quien te siga la corriente y no con quien te aumenta la tension ":wave:
09-12-2017 22:51
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.