Jump to content

Natalie

Explorador
  • Contenido

    118
  • Ingreso

  • Última visita

Todo lo publicado por Natalie

  1. De buena fuente se que pronto se solicitaran beta testing, para aquellos que tengan un poco de experiencia con el dxtre3d y tambien experiencia con programas de modelado como metaseq y tambien animacion.
  2. Si te entiendo tienes 2 cuartos, el 17 y el 18. El 17 tiene que ser el cuarto normal y el 18 el cuarto alterno. En en las propiedades de cuarto 17 y 18 donde dice "Grupo" deves poner el mismo numero para ambos cuartos, por ejemplo dejalo en 0; ahora en el cuarto 17 donde dice "alterno" pones el numero 18, porque 18? simplemente porque el cuarto numero 18 es la version alterna del cuarto 17. Eso es todo, automaticamente si te fijas en el cuarto 18 ya el editor le puso el valor 17, ahora solo deves de poner los triggger con el alternate On y alternate Off para cambiar entre las 2 versiones.
  3. Cuando un dxf es importado en strpix3 el programa pregunta si el mesh es para ser usado en un movable (animado) o en un static, dependiendo de la respuesta de esa manera sera como la lusz dinamica afecte el objeto o no.
  4. Presiona el boton que esta etiquetado como 0101 1011 para ver la lista de comandos que tiene asignado tu animacion. el que te interesa es el que dice "set position", mas informacion en ingles aqui: http://www.trsearch.org/Tutorial.php?action=gettut&id=40 Si no encuentras ese comando agregado entonces intenta poner en zero los campos speed y accel, creo que eso hace tambien mover tu animacion. suerte
  5. En el wadmerger, cada frame de la animacion puede tener asignado lo que se le llama animcommands; si copiastes la animacion de alguna existente para modificar y crear una nueva a tu gusto entonces pudo suceder que existan animcommands de la animacion original inadvertidamente. Hay un animcommand que se utiliza precisamente para mover el objeto; especificando incrementes en las coordenadas X,Y,Z. Revisa que no tienes incluido ese comando en ninguno de tus frames. suerte
  6. Si las plantas son mesh staticos entonces utiliza strpix3, creo que solo hay que poner el valor 1 (si mal no recuerdo) en el campo que dice FLAG cuando editas las propiedades del mesh statico. tambien puedes editar bounding box para quitar por completo, creo que solo tienes que escribir zeros en los datos del bounding box tamnto visual como colisional. Si son objetos incluidos en la lista de movables, entonces con el wadmerger mueve tus plantas a los slots etuiquetados Animating13-animating17, si mal no recuerdo en ese grupo los objetos no tienen collision en el motor del tomb raider 4.
  7. Creo que ese problema se resuelve regresando al metaseq y triangulando las hojas, es decir envez de usar un rectangulo utiliza 2 triangulos. Otra cosa, estas arreglando el bounding box tanto visual como colisional de tus staticos despues de importarlos verdad? suerte
  8. No hay opcion en el editor oficial ni tampoco en el NGLE para crear muros diagonales apartir de la geometria de los sectores en el cuarto. La unica alternativa que tienes es usar mesh staticos, se modela secciones de un muro de un alto y ancho fijo y despues se ponen en el editor y se rotan al gusto. suerte
  9. Hola natalie, muchas gracias por ayudarme ayer en lo de las luces. Recuerdas? Bueno compañera un beso y cuidate mucho. Hasta luego.

  10. La textura de los rayos de luz se aplican al mesh con el atributo semi-transparent, es similar a con las texturas de agua, los colores oscuros son casi invisibles y los colores claros se ven mas opacos, las textura de ejemplo del amigo angel estan muy bien. si en el juego se ven muy brillantes entonces: El objeto seguramente lo agregastes en un mesh statico, utiliza la herramienta de pixstr2 donde dice "static mesh light", - seleciona el static mesh -haz click en enable lighs - Ajusta la barra de "white light intensity", este te da un valor entre 0 a 31, 31 is maxima oscuridad, cuando importantes el dxf automaticamente le puso valor 16, subele el valor para que no se vea muy brilante, ajusta a tu gusto - presiona el boton "change all" para aplicar el valor a todo el mesh. Si mal no recuerdo, para importar un DXF en un objeto "movable" con el pixstr2 se tiene que selecionar el movable, y despues selecionar el mesh deseado del movable, y utilizar la "opcion import dxf" suerte
  11. Hola mi compañera como estas? Yo muy bien, un beso y suerte. Angie

  12. Claro que podras hacer lo mismo y mas pronto de lo que piensas, ya veras que apareceran por el foro novicios que tienen deseos de hacer niveles y se toparan con la mismos problemas que te has topado tu; de verdad que esto de hacer niveles tiene su maña, ya tendras tu la oportunidad de sacar del apuro a mas de alguna pobre alma que aveces se siente frustrada cuando estos programas/herramientas/editores tercamente se reusan a hacer lo que una quiere. Esta fantastica esas puertas!, si esque hasta un brillo le veo en el vidrio, te quedó de lujo!. la verdad que ya manejas esos topicos tan avanzados; no se como haces para que las texturas te queden tan bien. Ya veras como seras las inspriracion de mas de alguno. suerte con tu nivel, y no te olvides de respaldar siempre tu trabajo.
  13. Pues, si, logré meterlo en juego: - Abre tu DXF en metaseq - seleciona todos los polygonos, bajo el menu "Selected" utiliza la opcion "triangulate selected faces", esta opcion convertira tu objeto a ser dibujado a puros triangulos ya que los expertos dicen que es mas estable dibujar con triangulos que con rectangulos. - ahora deves de seleccionar del menu "object", "reduce polygons" y reduce los vertices, la meta es que cuando le des "view", "document information" el total de faces deve de ser menos de 500. suerte
  14. talvez puedes subir el DXF en el foro para revisarlo cuando tenga una oportunidad
  15. En primer lugar, "remapear" vertices es un proceso que solo se necesita hacer cuando editas alguno de las meshes que forman el cuerpo de Lara; si estas editando enemigos, mesh staticos, y demas objetos entonces no es necesario nada de eso. Ahora, lo que me dices es que el objeto en el pixstr2 se ve bien pero en el juego se ve terrible entonces es algo ya mas raro...habria que investigar mejor, primero averiguiate las estadisticas del objeto, en el pixstr2 creo que en la barra de estado dice la cantidad de vertices y triangulos que tiene el objeto. La otra cosa a investigar es la escala del objeto, que tan grande es, y finalmente en que slot en el juego lo estas metiendo, es un static mesh o es un movable en alguno de los slot de ornamentos?, talvez puedes uncluir un pic de como se ve en el pixstr2 y como se ve en el juego
  16. wow, te felicito, no crei que rapidamente le agarraras al tramite de los vertices. Ok, Con la importacion de la textura no tiene nada que ver el color del fondo, el error que te sale sucede porque el archivo BMP seguramente lo editastes/creates con photoshop o un programa similar que graba el bmp en un formato que tiene ligeramente una diferencia a como lo espera el strpix3 y pisxtrs2. Antes de importar la textura en pixstr2, abre el programa PAINT que biene con todos los windows (esta en accesorios) abre tu BMP y simplemente le das SALVAR COMO para salvar nuevamente el bmp. ahora intenta importar la textura en pixstr2. suerte,
  17. Por favor muestrame cual es el mensaje de error que recibes, y tambien explicame el procedimiento que estas usando para importar la texturas.
  18. Lo que sucede es que no es ilimitado lo que se puede importar en el TR, la verdad es que hay un limite en la cantidad de triangulos y la cantidad de vertices maximo que puede tener un objeto que se va a importar. La esfera de tu objeto esta bien redondita pero eso significa que esta bien detallada y compuesta de una gran cantidad de vertices y triangulos. Si mal no recuerdo el maximo es alrededor de 512 vertices por objeto; deves de averiguarte dento de Metaseq las propiedades del objeto y ver las estadisticas cuantos vertices tiene.
  19. Oh, que descuido, se me olvido decirte eso en el post anterior. En los compiladores de borland hay unas variables globales del sistema a las que solo tienes que leer o escribir valores para cambiar la configuracion: al inicio del programa en el el evento de la creacion de la forma escribe: //numeric international setting changed to american way. decimalseparator:='.'; ThousandSeparator:=','; Utiliza los separadores que tu programa espera leer desde texto a numeros. un largo hmmmm de echo... muestrame que parametros tienes en el D3DXMatrixPerspectiveFovLH Claramente veo que el problema son con los polygonos que se pelean entre si para ver quien se dibuja primero, dime como estas haciendo las conversion de los vertices de tomb raider a directx, estas usando numeros flotantes verdad?, no deves de usar enteros, y deves de cambiar esos valores a cantidades mas pequeñas, es decir si en tomb raider dice 1024 deves de cambiarlo a 1.024 ( yo utilizo punto para separado de decimales). envez de mil veinte y cuatro se pasa a uno punto cero veinte y cuatro.
  20. No se como lo resolvistes, pero creo que si a una pared le pusistes por delante un cuarto de bloque entonces envez de seleccionar la textura de 256x256 seleccionana una textura de 256x240, ya que el ultimo cuarto de la textura va a quedar escondida por 1 1/4 de bloque de enfrente de todos modos. Efectivamente usar texturas de 256x256 muestran una calidad super differente que usar texturas standard de 64x64, sin envargo el juego nunca fue diseñado para eso, trata de no abusar poniendo texturas tan grandes por todos lados ó de lo contrario te podrias ganar una sorpresa mas adelante en tu projecto cuando tengas mas cuartos y tengas mas enemigos, no tienes idea de las historias de horror que he escuchado cuando los recursos de un nivel esta supergargados, los enemigos no quieren caminar, los animales corren hacia las paredes, las atorchas no toman fuego...en fin. te recomiendo que almenos te bajes a texturas de 128x128. Otra cosa muy importante, te veo que estas muy enganchada con esto de construir niveles, en el menu archivo, configuracion, por favor activá la opcion de las copias de respaldo automaticas, configurá que te mantenga unas 8 y las dejas que se hagan un poco espaciadas; o si tu prefieres hacelo manualmente grabando el projecto con differentes nombre regularmente; no tenes idea como duele tener un projecto avanzado, haber corregido muchos problemas en el y que de repente algo raro pasa y el projecto se arruina!, muchos se han querido suicidar; la creacion de niveles de tomb raider a veces es bien cruel. Te quiero felicitar porque estas bien avanzada en lo que haces en poco tiempo, realmente le has captado las cosas mas importante practicamente solo experimentando o viendo el manual; tambien te recomiendo que tengas calma, no trates de armar un nivel como si fuera una carrera; fijate que suele suceder que un usuario se empeña en hacer un nivel que le tomo 3 meses desarrollarlo para que los demas lo jueguen y lo terminen en 3 horas y despues se quede olvidado en 3 dias. suerte,
  21. Hola Dario. Acabo de probar el segundo prototipo. Primero, en mi lado del mundo tira un mensaje de error que dice "0,1" is not a valid floating point value", este mensaje lo tira en cada loop y hay que matar la tarea para cancelar el programa.Este mensaje creo lo tira la funcion "strtofloat" o cualquier otra funcion que uses para convertir texto a numeros y la conversion falla. A menos que le indiques lo contrario los compiladores de borland obtienen desde la configuracion regional de la computadora que simbolos se utilizan para separar decimales y miles; tu programa usa coma para separar decimales pero en las computadoras donde la configuracion regional tiene selcionado el simbolo punto para separar decimales entonces tu programa no puede hacer la conversion. Ok, solucioné el problema cambiando en el control panel, configuracion regional el simbolo de separacion de decimales; ahora el programa me corre bien, y el factor 0,1 para rotar, mover y zoom me funciona perfecto en mi computadora, esto me permite examinar y evaluar mejor el renderizado. Eso esta muy bien, el evento oniddle es lo correcto a usar cuando se esta programando con los compiladores borland y este tipo de aplicaciones graficas. Pero deves de tener claro algo: todo el codigo que escribas dentro del evento onidle se ejecutará a la velocidad maxima posible por la computadora; eso esta muy bien porque mientras mas poder se tenga mejor, pero cuando tu aplicacion necesite mostrar algun tipo de animacion ó hacer algo que deva de ejecutarse en la misma cantidad de tiempo en todas las computadoras entonces necesitaras una manera de condicionar ciertas lineas de codigo dentro del oniddle a que se ejecuten solo si a transcurrido cierta cantidad de tiempo desde la ultima vez que se ejecutó. Para eso necesitas programar unas rutinitas o un objeto que te da la cantidad de milisegundos que han trascurrido entre un evento y otro. Una de las instrucciones mas faciles para hacer eso es utilizar el comando de windows "gettickcount" el cual devuelve la cantidad de milisegundos transcurridos desde que se encendió la computadora, esto seria mas o menos haci: contador:=0; //al inicio del programa. //dentro de un bucle tiempo = Gettickcount; if (tiempo-contador)>30 then begin ejecutar_animacion; //esto se ejecutará aprox cada 30 milisegundos en cualquier computadora. contador:=tiempo; end; La funcion gettickcount es muy facil pero los profesionales te diran que para medir tiempo mejor la sustituyas por un par de instrucciones llamadas QueryPerformanceFrequency y QueryPerformanceCounter las cuales juntas de dan mediciones en milisegundos mas exactos de lo que te da el gettickcount; te dejo de tarea que investigues esas instrucciones. Ok, el problema de que se notan unas rayas en los bordes de los polygonos se deve a que no esta del todo bien el calculo de los UV de las texturas que obtienes desde tomb raider; ya habras notado que los UV en TR tienen su complicacion; parece que te esta fallando el UV por uno o dos pixeles. Ahora con tu opcion de rotar manualmente el mesh pude examinar mas detenidamente este sintoma, definitivamente el problema es el zbuffer, solo sucede con los polygonos que "pelean" por una misma posicion en la direccion de la vista. Obvio, el SetRenderState(D3DRS_ZENABLE, TRUE ); esta activado, de lo contrario se veria mucho peor, pero tambien revisa la documentacion, creo que hay otros parametros relacionados con el zbufer aparte de activarlo o no. Cuando estas haciendo el device, verifica si tienes: _d3dpp.EnableAutoDepthStencil := true; _d3dpp.AutoDepthStencilFormat := D3DFMT_D16; // 16-bit z-Buffer No importa si el device va a estar en 32 bit, 24 bits o 16 bits, el AutoDepthStencilFormat ponlo siempre a 16 bits. Cuando creas las texturas utiliza la bandera D3DPOOL_MANAGED, de esa manera cuando se arruine el device no tienes que cargar las texturas ya que el directx automaticamente guarda una copia en en memoria del sistema y tu solo tienes que recrear el viewport ya sea desde 0 o con el reset. En tu caso que las texturas tendrian que leerse desde el tr4 no es practico tener que estar abriendo y parseando el formato tr4 para obtener las texturas cada vez que se arruina el device; pero no todos los juegos y aplicaciones guardan las texturas de esa manera; muchos video juegos y programas guardan las texturas de una manera mas accesible. suerte.
  22. Ok, ahora este programa ya esta muchisimo mejor, ya tiene lo mas importante funcionando; ahora se ven los mesh rotando en 0,0,0; no recibí ningun mensaje de error. y la velocidad de rotacion la encuentro perfecta en mi computadora; si tenes eso amarrado con un timer no creo que exista problema, pero si lo que haces es que incrementas un grado de rotacion en el loop del programa entonces en las mejores computadoras rotará mas rapido que un trompo. Unas cositas que todavia se tienen que revisar. - Cuando el mesh esta rotando se puede apreciar algo raro en la renderizada; es como si tambien se redibujara por dentro del mesh y aveces pareciera que ciertas caras son como transparentes. No estoy clara exactamente a que se deve en tu caso pero los motivos que comunmente generan este tipo de problema son: - El Z buffer no esta activado, (z depth) se deve de activar para que los polygonos que estan parcial o totalmente cubiertos por otros polygonos cuando se ven desde la vista de la camara no se dibujen o se dibujen solo parcialmente. - Tienes que activar el CULL, es decir los polygonos no se deven de dibujar cuando estan siendo vistos por "detras"; Ojo, que los poligonos en tomb raider se definen en el sentido de las manecillas del reloj. - Y ya que andas en los stages tambien activa el perspective correct (D3DTSS_MAGFILTER y D3DTSS_MINFILTER), ya que cuando los meshs estan bien cerca de la camara se ve muy pixeleado. - Sobre el device lost, recrear todo el device es lo que hago yo, pero sin con el RESET te funciona entonces te ahorrastes escribir lineas de codigo; lo importante es que agregues soporte para eso; no penses que eso pasa raramente, el device no se pierde solo al cambiar la resolucion o la profundidad de color (nadie se pone a hacer a cada rato) pero si hay otras circustancias mucho mas comunes que te pueden aruinar el device, por ejemplo que tan comun crees que sera que alguien ejecute tu programa y despues lo minimize un momento y ejecute otro programa que usa directx como fexmerger, dxtre3d, wadmerger, el editor oficial, o quiera correr el tomb raider para probar lo que acaba de modificar con tu herramienta... etc, todos esos programas crearon un device, pusieron sus texturas en la memoria de video, hicieron vertex buffers, etc, todos esos programas estan compartiendo la tarjeta de video y pudieron arruinar lo que hizo en su momento el otro; y eso no importa siempre y cuando cada programa una vez que el usuario lo vuelve otra vez a maximizar puede volver a poner el estado a como lo tenia antes de minimizarlo. buena suerte con tu projecto.
  23. Mi amigo dario, disculpame, devi especificar mejor; el D3DXMatrixPerspectiveFovLH es apenas de las ultimas instrucciones que van incluidas en todo el proceso de la re-creacion de lo que yo llamo viewport; pero en realidad por "viewport" me refiero todo el device; es decir tienes que liberar el device anterior (D3DDEV8 = nil) y volver a crearlo desde el principio; todo todo, desde pedir las caracteristicas de la tarjeta, crear el D3DDEV8 y volver a definir la perspectiva del viewport. Tambien deves de verificar como creastes las texturas; si las creastes con la caracteristica de que unicamente estan en la memoria de video entonces deves de cargarlas desde el disco otra vez. suerte
  24. Primero que nada, acabo de probar el segundo test que subistes, a mi este segundo programa me funciona bien, se ve el cuadrado gris centrado en la pantalla, y permanecio ahi todo el tiempo, en mi computadora no se desapareció. incluso tambien automaticamente el cuadrado ajusta su tamaño cuando la ventana se ajusta de tamaño por el usuario; por lo que parece que el comando D3DXMatrixPerspectiveFovLH se ejecuta cada vez que se repinta la forma o tienes capturado el evento ONRESIZE de la forma, esto esta muy bien. Lo que reporta el amigo marcos de que se ve la ecena por un instante y despues desaparece es lo que me paso a mi con tu primer programa, eso esta raro, me pregunto si en el segundo programa tambien estas usando un TIMER para generar un evento ONPAINT; de ser haci trata de cambiar la cantidad de milisegundos; por ejemplo que se repinte la pantalla 24 veces en un segundo, 1000/24 = 42millisegundos; talvez actualmente tenes definido muy poquito tiempo entre repintado y no le estas dando suficiente tiempo para terminar cuando ya se esta ejeutando el siguiente onpaint. Otra cosa: estas usando este comando? D3DDEV8.Present( NIL, NIL, 0, NIL) Esto tiene que estar inmediatamente depues del D3DDEV8.EndScene; sirve para forzar a la tarjeta de video de que muestre la scena en ese punto del programa, de lo contario el directx mostrara la escena cuando le de la gana( es decir muestra la scena solo hasta que vale la pena, dependiendo de si ya tiene un buffer detrabajo con suficientes datos). El viewport no solo se crea cuando un programa arranca la primera vez; si no que se tiene que volver a crear incluso varias veces durante el tiempo que el programa este funcionando; ya que por diferentes circustancias el viewport se arruina y deja de funcionar, a este estado se le llama un "device lost"; y el problema es mas serio si creastes las texturas con un flag diferente a D3DPOOL_MANAGED ya que ademas de recrear el viewport tienes que cargar las texturas otra vez. En tu rutina de redibujado despues del D3DDEV8.EndScene deves poner algo como: IF D3DDEV8.Present( NIL, NIL, 0, NIL)<>0 THEN recreateViewports; haz esta prueba con el project1.exe que subistes: ejecuta el programa y mientras esta funcionando ve a las propiedades del desktop en windows y en configuracion cambia la calidad de color de 32bit a 16 bit o cambia la resolucion de la pantalla; despues de hacer eso regresa a ver tu programa y notaras que ya no se ve el poligono con la textura, si no que solo se ve el Tpanel o la forma de la ventana principal. Si logras hacer que tu renderizado sobreviva a un cambio de configuracion de pantalla entonces su programa ya maneja la perdida del device. Que en algunas computadoras tu programa solo se vea un instante y despues se desaparesca podria deverse a que el viewport se arruina una vez al arrancar el programa y ya no se vuelve a restaurar. buena suerte
  25. mmm, creo que lo que me dices es que pones un componente TIMER en la forma, defines una cantidad de millisegundos de intervalos en que se estara ejecutando y en ese evento llamas al methodo de re-paint o refresh de la forma para generar un evento ONPAINT. y dentro del evento ONPAINT ejectutas las instrucciones para dibujar el mesh selecionado. Supongo entonces que el mesh se redibuja en el viewport girando automaticamente, por eso necesitas el timer para forzar el redibujado aunque el usuario no toque nada. Seguramente el viewport lo defines y lo creas una sola vez cuando inicias el programa, sinenevargo es importante que agregues esos pasos en una rutina aparte para que pueda ser ejecutada desde cualquier otro lado y en cualquier momento que se necesite; esta rutina debe de incluir al final algo haci como: D3DXMatrixIdentity(Matproj); D3DXMatrixPerspectiveFovLH( matProj, PI/4, pcontrol.width/pcontrol.height, 0.1,1000); D3DDEV8.SetTransform(D3DTS_PROJECTION, matProj); En cada evento ONPAINT tienes que llamar la rutina de redibujado que mas o menos debe de tener las siguientes cosas: //definir la posicion, y hacia adonde esta viendo la camara D3DXMatrixLookAtLH( matView^, _v1, _v2, _v3); //eye, at, Up. D3DDEV8.SetTransform(D3DTS_VIEW, matView^); //limpiar el viewport y comenzar la escena. D3DDEV8.Clear(0, NIL, D3DCLEAR_TARGET OR D3DCLEAR_ZBUFFER , Wxcolor(pcolor), 1.0, 0); // Begin the scene. D3DDEV8.BeginScene; //aplicar la matrix del world D3DDEV8.SetTransform(D3DTS_WORLD, matWorld); //poner los parametros de redibujado iniciales // Set the stream source. D3DDEV8.SetStreamSource( 0, VertexBuffer.vbuffer[k].Buffer, VertexBuffer.vbuffer[k].format_size); // Set the vertex shader. D3DDEV8.SetVertexShader(VertexBuffer.vbuffer[k].format); //poner el modo de dibujado, wireframe o texturizado. D3DDEV8.SetRenderState(d3drs_fillmode,VertexBuffer.vbuffer[k].Fill_mode); //dibujar el vertex buffer. (ó usar un list index). D3DDEV8.DrawPrimitive( VertexBuffer.vbuffer[k].primitive,triangles_offset, numtriangles); D3DDEV8.EndScene; //presentar la scena! D3DDEV8.Present( NIL, NIL, 0, NIL) ; //Importante!!, verificar el resultado de esta funcion, si retorna falso entonces el viewport se perdio y hay que recrearlo!; El viewport tambien se deve recrear si el usuario cambia el tamaño del viewport cuando maximiza o cambia el ancho de la forma etc.
×
×
  • Crear nuevo...