2011-02-03 18 views
11

¿Cómo puedo voltear, un espejo arriba/izquierda de la imagen OBJETO, no la pantalla en el método onDraw?OpenGL voltear o duplicar el objeto de dibujo

me trataron escala (1, -1, 1) que no funcionó

mi código:

opengl.selectVertex(vertexname) 
           .translate(x-1, y, -9); 

           if (opengl.getPathModifier(vertexname).getAngle()>-180 && 
            opengl.getPathModifier(vertexname).getAngle()<0) { 
            opengl.selectVertex(vertexname).scale(-scale,scale,1); 
           } else { 
            opengl.selectVertex(vertexname).scale(scale,scale,1); 
           } 

opengl.rotate(opengl.getPathModifier(vertexname).getAngle()+90, 0, 0, 1); 
+1

¿Desea voltear la dirección x, la dirección y o ambas? –

+0

Por favor, aclare qué tipo de cambio desea. –

+2

¿Ha habilitado la eliminación selectiva? Si es así, la transformación a través de la escala (1, -1, 1) dará como resultado que todos sus triángulos se dibujen en el orden opuesto. Necesitarás invertir/desactivar temporalmente tu cuerda cuando dibujes el reflejo. – TheBuzzSaw

Respuesta

14

No estoy 100% seguro de lo que está preguntando aquí, pero creo que lo que quiere hacer es transformar la matriz de proyección. Si quiere voltear para que las cosas de la izquierda aparezcan a la derecha, entonces necesita Escalar la matriz de proyección en (-1, 1, 1). Si desea que las cosas en la parte superior aparezcan en la parte inferior, necesita escalar (1, -1, 1) y si quiere ambas puede escalar (-1, -1, 1).

Editar basado en información adicional: si todo lo que quiere hacer es mostrar el objeto exactamente igual, pero con textura volteada, debe cambiar las coordenadas de textura de los vértices en los objetos - voltear las coordenadas de textura reemplazando el vieja textura de u coordina con 1-u.

+0

estoy en glPerspective, entonces no en orto, si uso scale (-1,1,1) entonces no puedo ver mi objeto, ¿por qué? – lacas

+0

¿Puede incluir algún código? –

+0

código incluido ... – lacas

3

Si está utilizando glFrustum(l,r,b,t,n,f) luego cambiarlo yo glFrustum(l,r,t,b,n,f), en caso de que quieren una vertical del tirón . Esto se aplica también a la función glOrtho.