Hola!
Estoy haciendo mi proyecto final de carrera sobre la simulacion en 3d de una planta industrial y utilizo para ello direct3d. no tengo mucha idea. el caso es que se trata de un robot que traslada piezas a distintas maquinas y estas las mecanizan. cuando ya estan mecanizadas las voy poniendo en una rampa y quiero que una vez alli desaparezcan. ya se que debe de ser algo muy basico, pero no se hacerlo. Gracias ya por adelantado
un saludo
Te recomiendo que ven vez de usar una API 3D directamente, uses un motor 3D como por ejemplo Irrlicht (google it), que ya te permite cargar modelos 3d, rotarlos, girarlos, todo bien mascadito y orientado a objetos.
Suerte
Muchas gracias, pero resulta que ya tengo mucho hecho: la pieza y el robot y las maquinas, ya rotan, se desplazan, etc. el rollo es que tengo dos problemas:
no se como crear varias piezas iguales. bueno, crearlas si que se, pero no se como hacer para que cada vez que el sitio de abastecimiento se quede vacio aparezca una. pense en hacer un array de frames de piezas. no se si se puede. y asi con las mismas rutinas referirme a cualquiera de ellas. la que este en el sitio indicado.
el otro problema, el de que el frame de la pieza desaparezca, pense en poner directamente framepieza:=nil pero me da problemas. ¿se os ocurre alguna otra idea?
digamos q de momento todo me funciona correctamente con una sola pieza, pero no se como eliminarla, ni como hacer que la cosa funcione con muchas, como poder aprovechar todo el codigo.
soy nueva en esto. agradezco cualquier opinion por evidente que resulte. seguramente para mi no lo sea. muchas gracias.
no se si influye pero estoy programando en borland delphi.
Tienes que tener dos tipos de objetos distintos: uno representa las piezas y otra su representacion gráfica que sería su malla de triángulos.
Si tienes 6 piezas iguales tendrias 6 objetos pieza pero sólo 1 objeto malla que sería compartido por todas las piezas con la misma apariencia. Cada pieza tendria un puntero al mismo objeto malla triangular que estaría centrado siempre en la posición (0,0,0).
A la hora de dibujar creas las matrices de transformación usando la posición y orientación del objeto pieza y a continuació miras su puntero a la malla y dibujas la malla tal cual sin transformaciones. Las matrices que has asignado a direct3d se encargarán de colocar los triángulos en la posición correcta de la pieza.
Para hacer que aparezcan y desaparezcan oues creas y destruyes los objetos pieza y los pones o sacas de la lista/array donde los tengas almacenados.
muchas gracias. me parece coherente, pero como he dicho no tengo mucha idea, por no decir ninguna. me podrias decir donde puedo aprender a crear objetos maya para mis piezas?
es que como supondras, lo unico que hice hasta ahora ha sido importar los archivos desde el 3ds max->.X como mesh builder y relacionarlos con un frame. no se si te refieres a eso. un unico mesh y varios frames.
Malla = mesh traducido al español, vamos, un conjunto de triángulos que forman una figura, lo que cargas de un fichero .X o .3ds etc....
Yo de delphi, cero patatero. Seguro que hay páginas y foros de delphi por la red con información sobre 3D, al menos en inglés.
El proceso es el mismo en delphi que en C++ u otro lenguaje: una sola copia en memoria de los triangulos y te limitas a cambiar las matrices de transformación antes de pintar. Si de esa transformación se encarga en delphi un objeto llamado frame, pues prueba eso. Tiene que ser el objeto al que le puedes asignar posición , orientación y malla.
A la malla no la toques, no le apliques transformaciones que lo que harias sería modificar los vértices originales, su geometría, y afectaría a todas las piezas que pintases usando esa malla.
muchas gracias por tu aclaracion. como hasta ahora nunca habia utilizado obtejos repetidos, lo estaba haciendo bien, pero pensaba q hacia falta una mesh y un frame por cada objeto. me has aclarado conceptos. muchas gracias otra vez :)
pese a toda tu gran explicacion, sigo sin saber hacer desaparecer las piezas, es decir, como eliminar un frame mientras se está ejecutando el programa. quiero que al llegar a un sitio la pieza desaparezca, me serviría moverla a una posición que no se vea en pantalla, pero me parece un poco chapucero. preferiría eliminarlo, por eso de no tener mogollon de piezas en sitios q no se ven. si alguien sabe, pido ayuda. yo pense q sabia. debe de ser solo una frase o algo.gracias