dibujar en 3D

Iniciado por s_azazel, 22 Diciembre 2018, 22:19 PM

0 Miembros y 1 Visitante están viendo este tema.

s_azazel

Estoy haciendo una app para controlar una cnc router y necesito generar una imagen en 3D a partir de un archivo gcode...

Es posible en Vb.net dibujar lineas en 3D indicando las coordenadas x y z de la misma forma que se hace con el system.drawing2D??

Gracias!!!!!

Serapis

En primer lugar este es el espacio para  visual basic 6 y anteriores. el foro de visual Basic NET es otro...

En segundo lugar, claro que se puede. Ahora mismo no recuerdo si hay un espacio de nombres reservado para ello...
...pero a las duras, simplemente necesitas una función para convertir las cordenadas 3D en 2D y luego usar Drawing2D para dibujarlas.

Desde luego mucho mejor crear una clase que empaquete todo, así puedas tener medidas del mundo3d, factor de escala, y cordenadas de rotación.

Si vas a dibujar más de un objeto 3D y cada uno con sus repectivas cualidades, entonces además necesitarás una clase que actúe de colección y reciba todos los objetos contenidos en él... vamos un pequeño motor 3d...

...si saco tiempo hoy o mañana, a ver si te pongo una función de proyeccción (que es  el nombre que recibe la conversión de cordenadas 3D en cordenadas 2D, que son las que se dibujan en la pantalla).

s_azazel

#2
Muchas gracias por la respuesta NEBIRE

Si algun moderador puede que mueva el post no me di cuenta sorry :(

Usando una funcion de proyeccion no podre girar la imagen con el raton no???

He estado indagando por internet y he visto la opcion de usar los directX aun que parece complicada la cosa....:(

Serapis

#3
Cita de: s_azazel en 25 Diciembre 2018, 12:00 PM
Muchas gracias por la respuesta NEBIRE

Si algun moderador puede que mueva el post no me di cuenta sorry :(

Usando una funcion de proyeccion no podre girar la imagen con el raton no???

He estado indagando por internet y he visto la opcion de usar los directX aun que parece complicada la cosa....:(

Con directX, se puede hacer de todo, pero en efecto, se requiere empolvarse en DirectX... es toda una tecnología por sí misma, que reqiere su propia curva de aprendizaje... lo mismo que utilizar cualquier otro motor 3D...

La cuestión es... ¿qué necesitas hacer?.
A - Si es tan solo lo que que dices al abrir el tema,(importar de un fichero datos 3D para dibujarlos) posicionar unas líneas dadas sus cordenadas 3D, te basta esa función que te digo. Esto te lo puedo poner más tarde, quizás mañana porque hoy tengo el día completo.

B - Si precisas además (de dibujar) poner rotación, desplazamiento y escala necesitas además otras funciones que roten, desplacen y escalen las cordenadas 3D. Esto implica (por razones de eficiencia) multiplicación de matrices, con lo que se añade un puñado de pequeñas funciones adicionales... Esto da más pereza, pero igualmente te miraría de ponerlo mañana o con más tiempo.

C - Si precisas tener control de muchos objetos, y ya no te basta con líneas, quieres cortar las líneas que queden tapadas por otras, ó meter texturas, tratar luz, colisiones, etc... entonces esto escapa de la ayuda de un foro, pero sobretodo el tiempo que uno está dispuestos a dedicar a ayudar... directamente es mejor que busques como usar un motor 3D, ya hecho. DirectX y OpenGL, serían tu punto de mira inicial, aunque los hay más específicos para según que tareas...

En fin declara cual de los 3 sería tu caso... para orientarte en la dirección que precisas.

Y sí, el ratón puede usarse para girar, tratando los eventos de ratón y decidiendo claramente que ejes se mueven con que eje del ratón (el eje Z, puede simularse con movimientos en diagonal, en tanto que los ejes X e Y con movimientos en X e Y del ratón)... (para esto estaríamos hablando como mínimo del caso "B").

Basicamente con cada moviento del ratón recalculas los ángulos de vista, se borra la imagen y se recrea de nuevo. Para que funciones en tiempo real, el cálculo debe ser fluído, lo que depende directamente d ela cantidad de objetos a dibujar y calcular y de la eficiencia del cálculo. Piensa que un cálculo como el que te sugiero, es apto sólo para unas pocas miles de líneas, si es más pesado, el cálculo puede demorarse y no será fluído en tiempo real... en tal caso hay que recurrir a usar motores cuyo cálculo se realiza directamente con la GPU, en vez de con la unidad flotante de la CPU...

s_azazel

Muchisimas gracias!!!! Mi caso sobraria con el la opcion B :)

Serapis

Ok... Mañana miro de sacar un tiempito y te pongo un sencillo ejemplo que puedas explorar, entender, completar y ampliar...