Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: uno en 09 de Mayo de 2003, 01:49:27 PM

Título: Duda scaling
Publicado por: uno en 09 de Mayo de 2003, 01:49:27 PM
                                Bueno, primero saludos a todos, que soy nuevo en estos foros. Ya os iré dando la brasa...
Bueno, hace relativamente poco que estoy utilizando las DirectX y de momento me ha surgido una duda:
Cuando hago el Scaling a un objeto, con D3DXMatrixScaling parece que afecta a la iluminación, esto es, cuando lo hago más pequeño se ilumina más, y cuando lo hago más grande pues se ve más oscuro.
Es esto normal? Por qué ocurre? y si pudierais decirme como solucionarlo.
Bueno, gracias de antemano.                                
Título: Duda scaling
Publicado por: BeRSeRKeR en 09 de Mayo de 2003, 02:49:30 PM
                                Si utilizas la fixed pipeline para realizar el escalado, es decir, utilizas el método SetTransform(D3DTS_WORLD, .....), las normales se te transformarán automáticamente por lo que ese no sería el problema. El problema podría ser que al hacer más grande el modelo, y suponiendo que no mueves la luz al escelarlo, ésta afecta menos al modelo ya que está más cerca de él por lo tanto, vértices que antes se veían iluminados por la luz, ahora no lo hacen. Esto ocurriría en el caso que estés utilizando una luz de tipo omni (o spot) por ejemplo ya que en el tipo direccional no habría cambios (ya que no tiene posición, sólo dirección). Para comprobarlo, prueba a alejar la luz del modelo. Por ejemplo, si has escalado el modelo x2, entonces prueba a multiplicar x2 la distancia de la luz al modelo. De esa forma, la iluminación debería ser la misma que cuando el modelo tenía el tamaño original.

Saludos                                
Título: Duda scaling
Publicado por: MChiz en 09 de Mayo de 2003, 03:26:46 PM
                                Yo pienso mas bien que al escalar los vertices, tambien se escalan las normales y, por consecuencia, las normales ya no estan normalizadas. En GL existe la opcion de normalizar las normales para que no te pase esto. Se hace con glEnable( GL_NORMALIZE ), pero es un poco costoso. Tambien puedes escalar los vertices a mano y asi D3D no tocara las normales.
Bueno, a todo esto, no se si es lo que te pasa :bbb
Un saludote y suerte!                                
Título: Duda scaling
Publicado por: uno en 09 de Mayo de 2003, 04:25:05 PM
                                Utilizo luz direccional, por lo que en teoría, como dice BeRSeRKeR, no debería afectar.
Yo creo que es lo que dice MChiz, ahora miraré para escalar los vértices a mano y dejar en paz las normales, a ver si así...
Bueno, gracias por responder.                                
Título: Duda scaling
Publicado por: MChiz en 09 de Mayo de 2003, 05:46:05 PM
                                Nada nada : )
A ver si es verdad y lo arreglas. Ya diras algo, que es bueno saber si es ese el problema o no!
Un saludote!                                
Título: Duda scaling
Publicado por: BeRSeRKeR en 09 de Mayo de 2003, 07:05:41 PM
                                La verdad es que puedo estar bastante equivocado pero para mi que si utilizas la fixed pipeline para transformar los vértices, no hay que renormalizar pero vamos, como últimamente sólo utilizo vertex shaders para estos temas pues puedo estar confundido (a parte que cuando utilizaba la fixed pipeline casi nunca me había metido con temas de iluminación)

Saludos.

PD: también me extraña porque, la verdad, tener que bloquear el vertex buffer para renormalizar me parece un poco costoso pero bueno....todo es posible :?:                                
Título: Duda scaling
Publicado por: MChiz en 09 de Mayo de 2003, 08:03:27 PM
                                Si que debe ser costoso, si. Pero tiene sentido que las transformaciones se apliquen tambien a las normales, porque si por ejemplo, rotas el objeto, las normales no se rotarian y se iluminaria mal, no?
No se, yo me fio mas de ti, Berserker, que de mi mismo :b                                
Título: Duda scaling
Publicado por: BeRSeRKeR en 09 de Mayo de 2003, 10:50:30 PM
                                No, si efectivamente, si transformas el modelo, sus normales también se tienen que transformar pero lo que digo es que si transformas un objeto con el método SetTransform, la normal ya se transforma automáticamente...la duda que tengo es si se renormaliza automáticamente o lo tiene que hacer uno mismo...

Saludos                                
Título: Duda scaling
Publicado por: MChiz en 10 de Mayo de 2003, 12:04:23 AM
                                mmm... hemos vuelto a lo que comentaba al principio.
Yo siempre hablo desde el punto de vista de GL, ya que yo, de D3D, mas bien poco...
Repito: en GL existe la funcion para... "renormalizar" las normales. Lei por algun sitio que lo has de hacer por narices, o reescalar tu el modelo a mano, para no tocar las normales.
En fin... tampoco creo que sea un problemon porque... se utiliza alguna vez el escalado? Personalmente no me he visto nunca con la necesidad. Iluminadme sobre el tema, plis :b
Saludoteees!                                
Título: Duda scaling
Publicado por: BeRSeRKeR en 10 de Mayo de 2003, 01:10:37 AM
                                Yo siempre he oído que no es conveniente utilizar el estado GL_NORMALIZE porque es más lento que si tú mismo le pasas las normales. Y con respecto a lo de que el escalado se utilice poco...bueno, pero tienes las mismas con la rotación. De todas formas yo creo que cuando transformas un vértice, se transforma su normal y además se renormaliza...a ver si puedo confirmarlo.

Saludos                                
Título: Duda scaling
Publicado por: ProD en 10 de Mayo de 2003, 01:54:10 AM
                                Um.. yo utilizo la luz de Dx, es más una luz direccional y transformo y roto objetos y la luz sigue afectandoles igual, así que es la fixed pipeline quien se encarga de transformar los vértices y las normales correctamente. Así que creo que el problema que tienes es el que al principio de todo este thread comentó berserker. Un saludo.                                
Título: Duda scaling
Publicado por: MChiz en 10 de Mayo de 2003, 09:13:25 AM
                                http://www.opengl.org/developers/code/feat...oglpitfall.html

Control + F y escribid GL_NORMALIZE. Ahi esta lo que lei.                                
Título: Duda scaling
Publicado por: Ithaqua en 10 de Mayo de 2003, 05:21:02 PM
                                En OpenGL por defecto no se normaliza, aunque yo siempre lo tengo activado para evitar problemas. Antes se decía que se evitara activarlo porque era bastante costoso aunque hoy en día sale prácticamente gratis y se recomienda su uso.                                
Título: Duda scaling
Publicado por: MChiz en 10 de Mayo de 2003, 09:32:31 PM
                                Es bueno saberlo. Gracias : )