Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda scaling

Iniciado por uno, 09 de Mayo de 2003, 01:49:27 PM

« anterior - próximo »

uno

                                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.                                

BeRSeRKeR

                                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                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

MChiz

                                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!                                

uno

                                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.                                

MChiz

                                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!                                

BeRSeRKeR

                                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 :?:                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

MChiz

                                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                                

BeRSeRKeR

                                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                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

MChiz

                                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!                                

BeRSeRKeR

                                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                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

ProD

                                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.                                
as ideas son capitales que sólo ganan intereses entre las manos del talento

MChiz

                                http://www.opengl.org/developers/code/feat...oglpitfall.html

Control + F y escribid GL_NORMALIZE. Ahi esta lo que lei.                                

Ithaqua

                                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.                                
thaqua^Stravaganza
http://ithaqua.stravaganza.org

MChiz

                                Es bueno saberlo. Gracias : )                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.