Cómo simular 2D similar a 3D (recostarse)

Si tengo una cuadrícula de texto e imagen, como la vista de calendario. Si quiero que toda la cuadrícula se coloque a 45 grados y aún pueda responder al clic/desplazamiento con el dedo, ¿cómo hacerlo? ¡Muchas gracias!

preguntado el 12 de junio de 12 a las 19:06

2 Respuestas

Hay una solución realmente simple para esto. Si abre el proyecto usando Expression Blend, una vez que haya seleccionado la cuadrícula, vaya a la pestaña de propiedades, desplácese hacia abajo hasta 'Transformar', debería haber una propiedad llamada 'Rotación', simplemente cambie los valores X: Y: Z: hasta que la cuadrícula se gire a la forma en que desea que se vea. Actúa exactamente como cabría esperar.

Aquí está el código XAML:

<Grid.Projection>
    <PlaneProjection RotationX="-43"/>
</Grid.Projection>

Respondido el 13 de junio de 12 a las 22:06

Pensé que escribí "XNA" en el tema, pero de alguna manera desapareció. Tuve problemas para usar XNA o Silverlight. Pero me siento más cómodo usando XNA porque es sencillo. ¿Puede Silverlight agregar control dentro de la cuadrícula dinámicamente? ¿Dibujar texto e imagen dentro del control de la cuadrícula? ¿Puede la rotación cambiar dinámicamente? ¿Puede manejar el evento de clic con un control recién agregado dentro de la cuadrícula? ¡Por favor avise! ¡Muchas gracias! - esto

No estoy seguro sobre la creación de controles porque no lo he hecho yo mismo, pero sí para dibujar texto e imagen, sí para cambiar la rotación dinámicamente, no estoy seguro sobre el manejo de eventos para el control recién creado. ¿Has probado el artículo de MSDN sobre los controles de Silverlight? - jonny lin

Ok, si estás haciendo esto en XNA, querrás usar Billboarding. Me temo que todavía no he tenido necesidad de vallas publicitarias, así que no puedo darte detalles, pero como de costumbre, hay una Tutorial de Riemers para eso. Ahora, específicamente desea tener una cartelera interactiva con controles. Esto será complicado si nunca antes ha tenido experiencia en 3D. Esto es lo que querrás hacer:

  1. Dibuje sus controles/texto como lo haría normalmente con SpriteBatch, pero establezca el RenderTarget del GraphicsDevice en un nuevo RenderTarget de antemano, que guardará. Mirar aquí para obtener documentación sobre cómo cambiar el rendertarget. Recuerde volver a configurarlo después de haber dibujado sus controles.
  2. Ahora convierta RenderTarget en Texture2D usando una conversión explícita: Texture2D myTex = (Texture2D)myRenderTarget;
  3. Dibuja esta textura en la cartelera.
  4. Ahora viene la parte difícil: debe usar una técnica llamada "Picking" para determinar en qué lugar del espacio 3D ha hecho clic el usuario. App Hub tiene algunos tutoriales de selección, pero están orientados a modelos complejos. Dado que la valla publicitaria solo usa un plano con 2 triángulos, no funcionarán con precisión en este caso, que es lo que necesita. En cambio, recomiendo usando Viewport.UnProject para elegir en el plano.

Esencialmente, querrá tener un buen sistema para realizar un seguimiento de dónde están las cosas en las que se puede hacer clic en su cartelera en el espacio 3D. Puedes usar ecuaciones planas para esto, si las conoces (creo que las aprendí en Cálculo III). Si solo necesita una funcionalidad básica, puede usar estas ecuaciones para realizar un seguimiento del centro de sus botones y luego hacer una prueba de radio para hacer clic, aunque esto no es del todo exacto a menos que sus botones sean círculos.

Si no puede decirlo, las cosas se complican rápidamente cuando intenta aplicar conceptos 2D en un mundo 3D.

Respondido el 13 de junio de 12 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.