Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - TrOnTxU

#1
No sé si es el enlace o que hay que ser usuario registrado en la pagina de la UPV, pero no puedo ver los enlaces :S

Esto seguro que en la ETSE no pasaba ( jajaja, es broma, :P )
#2
Te estás pegando el currote!
:D Muy chulo!
#3
No quiero desmerecer la parte del diseño y programación (no lo he podido probar tadavía).

Pero un ole por el currote con los gráficos  :)_
#4
General Programadores / Re:ayuda en c++
11 de Junio de 2019, 04:54:52 PM
Sé que soy pesao, pero es que poneis preguntas sin nada de contexto, y hay que echarle un rato para averiguar a que os referis :(

De entrada, cosas que veo  *(DWORD*)(0x01A1B9FC) = 16000; //04E50C5C

Porque escribes en una direccion de de memoria hardcodeada?
Por lo que veo utilizas librerias de windows, y con todo lo de la memoria virtual y el espacio de memoria protegido (no estas en una plataforma embebida como era la NintendoDS, etc.)
Esa direccion la tendrias que obtener de algun sitio, no?

Luego veo que arrancas dos hilos, que parece que nunca terminan.

Y estas modificando un bool desde dos hilos (nombre), y ni siquiera lo has marcado con volatile!
El problema no es que pueda haber una race condition, pero al menos deberias de asegurarte q esa modificacion es atomica y marcada como volatile para que el compilador entienda que no se debe tocar eso al optimizar.

Y esta parte?:
if (reason == DLL_PROCESS_ATTACH)
    {
     CreateThread(0, 0, (LPTHREAD_START_ROUTINE)dll, 0, 0, 0);
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Teclado, 0, 0, 0);
}
   else if (reason == DLL_PROCESS_ATTACH)
    {
   
     salir = true;
   }

Tienes un if y luego un else if con la misma condición?
No entiendo el proposito.

Si explicas un poco más que quieres hacer quizás pueda ayudarte un poco.

Salu2
#5
Ultimamente no entro nunca en el foro, por eso no habia visto la pregunta.

No entiendo mucho de 3dsmax, per he echado una mirada al plugin, y me parece que no utiliza el historial.


Creo que lo que hará es recorrer el Modifier Stack: http://help.autodesk.com/view/3DSMAX/2017/ENU/?guid=GUID-8209526B-B4EC-406D-A3E2-D43EA717A28A
Y los podrias recorrer con algo de maxscript del palo: $box001.modifiers como explica en: http://docs.autodesk.com/3DSMAX/16/ENU/MAXScript-Help/index.html?url=files/GUID-00FB1BFB-13C6-478E-B457-8CFA78861F56.htm,topicNumber=d30e85845

Pero como he dicho no tengo mucha idea de 3dsmax.

Espero haberte ayudado (aunque meses tarde ^^).
Un saludo.
#6
Programación gráfica / Re:Juego 2.5D usando OpenGL
29 de Diciembre de 2016, 07:40:01 PM
A mi más bien me parece  que lo que pasa es que los personajes del street fighter no estan rotados sino flipeados.
(si os fijais la sombra cae a la izquierda siempre, o sea que la iluminacion direccional vendria de la derecha)

Escala en X = -1.0

¿es esa la pregunta?
#7
General Programadores / Re:Colliders modelo animado fbx Unity
16 de Noviembre de 2016, 10:56:24 PM
Perdón por contestar tan tarde, pero es que voy bastante liado.

Yo sigo sin ver lo de los "colliders", porque los tienes que marcar como trigger, y a no ser que haya cambiado el Physix, en un principio los triggers en movimiento no garantizan que salte el callback. Y sino los marcas colisionarán de verdad y no creo que tengas los resultados esperados (además de que deberás animar las fisicas por la animación, que es marcar un checkbox, pero que incrementa, como es lógico, el consumo de CPU, por diversas razones que paso de explicar para no enrollarme más).

En el apartado de de métodos estáticos de la clase Physics ( https://docs.unity3d.com/ScriptReference/Physics.html ) tienes una serie de funciones que te permiten detectar que colliders se encuentran dentro de un shape determinado (Box, Sphere, Capsule, Ray o Line).

Puedes utilizar cualquier shape, dependiendo del uso que le quieras dar (lo de la esfera era solo una sugerencia).

Tambien puedes ver los tipos de comprobaciones: "Check" (solo para elementos dentro de el shape en un momento determinado) o "Cast" (para hacer "sweep", esto significa comprobar un shape en movimiento).

Puedes utilizar uno u otro dependiendo de lo que quieras hacer, pero para esto yo recomiendo un check simple (que es un poco más barato de procesar).
Tambien es muy aconsejable "publicar" las variables de posicion y dimensiones del shape en el componente que estes scriptando, y a la vez utilizar las previsualizaciones de Gizmos como https://docs.unity3d.com/ScriptReference/Gizmos.DrawSphere.html o https://docs.unity3d.com/ScriptReference/Gizmos.DrawCube.html para poder visualizar donde estaria exactamente el shape de colision (recuerda que esto solo se muestra en la pestaña de "Scene" y nunca en "Game"), mientras modificas estos valores desde el "Inspector".

Como decia en mi anterior post, es importante la sincronización de la animación con las "ventanas" de golpe, recuperación, etc. De manera que solo en momentos determinados de la animación se realicen este tipos de comprobaciones.
Una descripción muy buena es la que hay en este articulo de Sony Santa Monica sobre el God Of War http://www.gamasutra.com/view/news/108166/Combat_Canceled_God_of_War__Action_Game_Design.php
Aunque ellos utilizan un "script propio" que luego se "compila" a datos, siempre puedes hacer algo muy parecido con script o incluso un herramienta utilizando las ventajas de extension del Editor de Unity3D (que es muy sencillo y rapido de utilizar).
Supongo que igual también se puede hacer algo de esto desde "Animator", pero como dije en mi último post, no controlo mucho de esto, ya que es más nuevo, y yo utilicé Unity3D (para juegos comerciales) en versiones bastante anteriores de hace unos cuantos años.

Espero haberte solventado las dudas.
Un saludo.
#8
General Programadores / Re:Colliders modelo animado fbx Unity
12 de Noviembre de 2016, 05:42:39 PM
Para poner un collider como tu dices bastaria que con que lo añadieras a la jerarquia animada, lo marcaras como trigger, y luego le pongas la propiedad de "animate physics" a la animacion.

Pero no te lo recomiendo. porque si se mueve con la transformacion, seguramente puedas tener conflictos entre la interpolacion de la animacion, y el "fixed rate" de actualizacion de las fisicas. (vamos que pase de largo la detección de colision y salte ningun trigger). Esto tambien se puede solucionar con "sweep", pero la verdad es que Unity (a mi entender) tampoco es que controle magninficamente este tipo de cosas, así que si no hay nada que se pueda hacer en el Animator (que tampoco he tocado mucho) te recomendaria que no añadieras nada a la jerarquia movil.

Para estas cosas se suele utilizar un cast de una esfera por ejemplo (https://docs.unity3d.com/ScriptReference/Physics.SphereCast.html), para "sincronizar" el componente scriptado (Behaviour) con la animación te valdria con exponer propiedades del componente y animarlas, o contar tu mismo los frames en el script.
Y para colocar el shape tendrias que resolver la transformación relativa (LocalToWorld) en el transform que elijas (como te he dicho para mi es mejor elegir el "root" y aplicarle una transformacion relativa).
Utiliza la ventaja del dibujado de gizmos si quieres previsualizar la posicion del shape que vas a castear.

Un saludo.

EDIT: Creo que habia un tutorial bastante antiguo de Unity (de la version 3.1 si no recuerdo mal), con una demo de un "intento" de clon del Ratchet&Clank, que utlizaba esto mismo para detectar la colision del ataque de un puñetazo.
#9
ponlo en un bucle while

using System;
using System.Threading;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
           bool salir = false;
           while( salir == false )
           {
             int res = Convert.ToInt16(Console.ReadLine());
             switch (res)
              {
                      case 1:
                          Console.WriteLine("Felicidades");
                          break;

                      case 2:
                          Console.WriteLine("De lo que te perdes!");
                          Thread.Sleep(1000);
                          Console.WriteLine("***| FIN DEL JUEGO |***");
                          salir = true;
                          break;

                      default:
                          Console.WriteLine("Respuesta invalida");
                          break;
             }
            }
            }
        }
}
#10
... mmm no sé ... yo lo veo my necro
#11
Como aclaración, por abrir un poco el debate (espero que no te importe), y que conste que no me parece mal que lo hagas en C, sobre lo que dices de "millones de lineas de código C", como bien sabrás, es más bien una definición bastante imprecisa.

Sobre la eficiencia de org-mode, no he notado ningun problema exportando un .org por muy grande que este sea. Más que la lentitud ya intrínseca de emacs para realizar algunas acciones.
El problema viene cuando tienes un proyecto con varios archivos, pero estos problemas de tiempo estan asociados con la forma que tiene emacs de abrir los ficheros como "buffers" (tiempo que se incrementa al tener que hacer la comprobación de las caches).

Y respecto al tiempo ganado con C respecto a python (perl, lua, ruby, etc.) para este tipo de programas (sobretodo de parsing y generacion de texto) se nota más que nada en el arranque del "python.exe", pero si tienes pensado parsear varios archivos en una llamada al script, entonces la cantidad de tiempo es despreciable, ya que apenas lo vas a notar desde que invocas el programa hasta que recibes el resultado (generas los archivos, etc.).
Me convenceria más la idea de que es "mejor" usar C por evitarse las depencias del runtime de python o ruby. Pero en la mayoria de sistemas no Windows (linux, MacOsX) ya viene defecto alguna instalación. Y tener siempre instalado algun tipo de interprete de script de este estilo es un plus.
La gran ventaja de estos lenguajes es que puedes crear programas sencillos en mucho menos tiempo, con muchisimas menos lineas de codigo, y por norma general más fácil de mantener (a no ser que comiences a crear un mega super programa que lo hace todo, pero yo creo que es mejor mantener unos pocos scripts independientes por proyecto).

Y intento respaldar mi posicion con algún que otro ejemplo:

  • Sony Santa Monica empaquetaba todos sus recursos para los wad de los God Of War con scripts de Perl.
  • Naughty Dog utiliza DC (DSL in-house dialecto de lisp PLT-Scheme/Racket) para compilar sus datos y lambdas de script ejecutable en run-time.
  • Insomniac tambien utiliza perl para procesar archivos de codigo fuente.
  • El mismo enlace que te he pasado antes es un post del Engine Architect del Bitsquid/Stingray.
  • Y la lista puede seguir un buen rato más ...

Mi punto de vista es que la mayoria empresas que optimizan mucho en C/C++ y ASM para los run-time de sus juegos (que creo que son de los más "optimizados" del mercado a mi entender), utilizan lenguajes de scripts para procesar datos de forma "offline" (entiendase aqui como software que no se utiliza en el producto final, sino para su desarrollo).

Por tanto, y vuelvo a decir que no tengo nada en contra de el parser este en C, yo creo que cada herramienta es la más adecuada para cada problema.
Y una ultima cesión retórica :P, estoy de acuerdo con lo que dices que "lo importante es el buen diseño", pero discrepo un poco con lo del buen código.
Parafraseando al gran Mike Acton, "un buen programador no lo és porque escribe código, el código es una herramienta, un buen programador lo és porque sabe resolver problemas de datos y transformaciones".


Un saludo.

EDIT:
Respecto al formato (que lo queria comentar y se me habia olvidado), yo lo veo muy completo y pensado :), pero tienes una buena cantidad de trabajo por delante. Pero quizás echar un ojo a los parser que ya hay de org-mode te puede dar alguna ayuda o servir de guia de consulta: http://orgmode.org/worg/org-tools/.

Yo personalmente ya utilizo org, y los parser de documentacion que tengo son más especificos (como uno para generar winhelp-html, y las definiciones de los bindings de C con lua, y cosas por el estilo), así que no me apunto, sorry ^^
#12
Yo utilizo org-mode todos los días, y lo que lo diferencia (para mejor) respecto a otros similares como Markdown, creo que es el poder editar el texto con los shortcuts y comandos de emacs org-mode, mas que nada.
Lo malo de org-mode es que necesitas emacs para exportar (aunque hay algunas utilidades en varios lenguajes para parsear un fichero sencillo).

Ten en cuenta que ya hay varios formatos de este tipo como el Markdown y el RestructuredText, pero si sigues queriendo crear algo "más especifico", yo te recomendaría que utilizaras python, ruby, u otro lenguaje por el estilo para el parser; igual hacerlo en C es matar moscas con explosivo plástico.

Por si te sirve de algo, puedes echar un vistazo a este post, es muy sencillo:
http://bitsquid.blogspot.com.es/2011/09/simple-roll-your-own-documentation.html

Un saludo


#13
Vaya pregunta más original! :)

A mi no se me da muy bien la poesia (y menos sen Java), pero igual esto te mola ( si lo dices del tiron rima xD )

if( myHeart.You() )
    myHeart.IsPerfect( true );

... o a lo mejor ...
if( you.Inside( myHeart ) )
    myHeart.IsPerfect( true );

pero es ultimo ya no rima  :(

Pongo los nombres en inglés porque es lo típico de los lenguajes de programación, pero los metodos y el objeto igual si que lo puedes poner en castellano si lo prefieres.

Un saludo, y ya contarás que te tatuas al final :)
#14
Respondo muy tarde, pero que es que hacia mil que no me pasaba por aquí.

No sé si lo entendido muy bien, pero me dices que tienes varios indices (unos para atributos de posición, otros para coordenadas de textura, etc), No recuerdo ya como era el formato obj, pero puede que sea así. En Collada te puedes encontrar atributos compartidos como la posición, pero otros como las normales que son diferentes dependiendo del polígono en el que estes dibujado (por ejemplo los vertices de un cubo).

Si este es tu caso vas a tener que procesar el formato que te llegue, porque solo puedes tener una lista de indices, de manera que tendrás que "separar" los vertices que compartan posición, pero no color o textura, y reindexar todo.
Recuerda que un vértice es un conjunto de atributos (pos, normal, color, etc.).

Si no te aclaras, mi consejo es que utilices Assimp u otra libreria por el estilo que te ahorre el currote de hacer esto por ti mismo. (es mejor utilizar obj, fbx, etc. solo para exportar, y utilizar tu propio formato, u otro pensado para aplicaciones "real-time" para cargar desde el juego/aplicación).

Un saludo, espero haberte ayudado.
#15
Programación gráfica / Re:Editor 3d en python usando c++
25 de Julio de 2014, 05:59:41 PM
Yo suelo usar también python+pyqt para las tools.

En cuanto lo de hacer una app de modelado y animación me parece un currote, pero mola :)
¿ Con lo de nodos gráficos te refieres a algo procedural como Houdinni ?

Bueno te comento mi experiencia.
Una parte que me gusta de Qt es el tema de los models/views, y una de las cosas que me mola de python son las metaclasses que puedes utilizar para intentar definirte una especie lenguaje de domino especifico. Yo lo utilizo para definir propiedades parecidas a las Properties de las classes de C# y despues tengo un modelo para inspeccionarlas dentro de un custom tree view que uso al estilo de "PropertyGrid", para serializar los datos, etc. Aun asi hay mucho curro por debajo, cosas que igual ya tienes en C#. Lo bueno es que lo puedes hacer compatible (en teoría) para Windows, MacOS-X y Linux. (aunque a mi me siguen dando problemas algunas cosas en OSX).

Otra cosa es la licencia PyQt y la PySide. La segunda es menos restrictiva (al menos a gratuita) y la API actualmente es casi idéntica.

En cuanto a la parte c++, es importante que recuerdes que debes una API puramente C en tu DLL (.so o .dynlib) para hacer los bindings ( no he mirado si hay alguna herramienta/libreria que utilice bindings directamente en C++, pero yo utilizo lo básico y funciona :) ).

Mi sugerencia ahora mismo igual seria que le echases primero un vistazo a la ATF que ha "liberado" Sony. Es C# y (en principio) solo funciona en windows. Pero tiene mogollón de cosas ya echas: un DOM que puedes definir completamente desde XMLs, copy/paste, undo/redo,custom property editors, timelines, maya-like curve editor, collada viewers, graph editors, ...
La curva de aprendizaje puede ser un poco complicada al principio, pero hay bastantes ejemplos, y para mi la parte más dificil de generalizar es el tema del DOM con copy/paste y mundo/redo, y el sistema que han implementado funciona muy bien. Si ahora mismo tuviera que empezar el toolset de nuevo me pensaria bastante hacerlo con pyqt (como lo tengo ahora), o comenzar con ATF.


Bueno, espero haberte ayudado.
Que vaya bien el proyecto, parece muy interesante, ya comentarás como lo llevas.

Salu2





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.