Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Haddd en 12 de Abril de 2005, 05:34:19 PM

Título: ¿qué Pasa Con Los Programadores?
Publicado por: Haddd en 12 de Abril de 2005, 05:34:19 PM
 Llevo ya bastante tiempo sin leer post sobre cosas nuevas de programación, lo que haceis, técnicas que hayais descubierto, cómo hacer cosas que antes no sabiais....

Vamos que parece que aquí menos de programación, se habla de todo. Venga, hombres ( y féminas ), enseñad algún frame, alguna rutina que os haya costado mucho, para que se mueva esto un poco y volvamos a incentivarnos entre nosotros mismos.

(ole)
Título: ¿qué Pasa Con Los Programadores?
Publicado por: nsL en 12 de Abril de 2005, 05:49:25 PM
 Yo solo programo los fines de semana y encima ahora me da un error SDL y no puedo poner mas d 6 surfaces en pantalla , porq se me peta.
En fin, cuando consiga arreglarlo enseño algo. Estaba metido en un minijuego de billar :P

Encima probe C# para probar a hacer programas .net del tipo VB y me quede viciado y toi liado con eso.

Saludos!  B)  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: CoLSoN2 en 12 de Abril de 2005, 06:02:20 PM
 Yo me dedico a programar juegos, cosas que me diviertan, y no tanta parafernalia tecnológica, así que no creo que os interese demasiado.
Título: ¿qué Pasa Con Los Programadores?
Publicado por: [EX3] en 12 de Abril de 2005, 06:35:06 PM
 Yo ando reescribiendo la mitad de la dx_lib32 para la version 2.0, ya tengo reescrita la clase de sonido entre DirectSound para los fx y DirectShow para la musica, solo me falta añadir las rutinas para activar los efectos de sonido para los fx y algun detalle mas, la clase grafica la he tenido que reescribir tambien desde 0 por las severas modificaciones como lo de la lista de ordenamiento que simula al z-buffer, pasar todas las funciones de dibujo para usar texturas montadas en quads en vez de la clase D3DXSprite, la mejora de las funciones de dibujo de primitivas (como la funcion de circunferencias) y la implementacion de una nueva funcion de dibujo la mar de sencilla y que facilitara mucho la tarea para desarrollar juegos en perspectiva caballera e isometrica ;)

De momento la cosa va muy bien, el rendimiento de la clase grafica a subido considerablemente respecto al de la version actual de mi web, la 1.03, luego me tocara solucionar de nuevo el tema del reseteo del device por que no se la causa pero al quitar las llamadas a la clase D3DXSprite el reseteo vuelve a fallar, se queda la pantalla vacia y con la resolucion de windows.

Cuando tenga algo mas completito el tema ya subire algo para que echeis un vistazo :)

Salu2...
Título: ¿qué Pasa Con Los Programadores?
Publicado por: zupervaca en 12 de Abril de 2005, 07:26:44 PM
 a mi desde que me casco la ati 7500 y estoy con una gforce2 de 16mb poco hago y como es portatil no puedo comprar na  :(  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Pogacha en 12 de Abril de 2005, 07:27:57 PM
 Yo estoy remodelando toque a toque con el mayor de los cuidados las NukeDX (trantando de no hacer cambios innesesarios) cuando las termine mas o menos se las feedbackeare a los autores ...

Aparte de esto estoy con el juego 2d, la verdad es como estaba tan metido en 3d estoy usando puras tecnicas 3d simplificadas, la verdad es que es algo nuevo y caprichoso (no se si alguien lo ha usado antes), entidades, pruebas de escalon, faltaria un arbol bsp e iluminación en tiempo real y estoy de nuevo con mi motor ...

No hay mucho mas ... la verdad es que reconozco como nos frenamos ...

Saludos
Título: ¿qué Pasa Con Los Programadores?
Publicado por: sés en 12 de Abril de 2005, 08:02:37 PM
 Desde mi último mensaje sobre BGL no he tenido prácticamente tiempo libre.
El poco que tengo ahora lo dedico a jugar un poco para relajarme. A ver si las cosas se calman a mi alrededor y sigo con mis cosas...
Título: ¿qué Pasa Con Los Programadores?
Publicado por: ethernet en 12 de Abril de 2005, 08:56:32 PM
 Yo ahora mismo estoy programando una aplicación con window forms en managed c++ para la creación de contenidos procedurales. Es una especia de  werkkzeug1 (http://www.theprodukkt.com/werkkzeug1.html#download ) pero no al nivel de farbrausch claro. Podeis ver algunas imagenes en mi weblog (ver firma) aunque la cosa ha avanzado bastante, supongo que subiré imágenes de la última versión dentro de poco.

Por otra parte el trozo de código que me está machacando la cabeza últimamente es el siguiente:

Para serializar una estructura es fácil, símplemente es meter los datos en memoria de esta forma


struct foo
{
int a,b;

void Serialize(int *data, bool rw) //si rw == true lee
{
  if(rw)
 {
     *data++ = a;
     *data++ = b;

 }
 else
{
     a = *data++;
     b = *data++;

}
}



EL problema viene cuando tengo algo así:


class A
{
int a;
virtual void serialize(...)
{
}
};

class B: public A
{
int b;
void serialize(...){}
};

void main()
{
   int *data= new int[1024];
   A* a = new B;
   a-> serialize(data,false);
    GuardarDatos(data);
    int *data2 = CargarDatos();
    // Aqui viene el problema, como hago para generar una clase B a partir de esos datos
    // sin tener que hacer que todos los objetos serializables deriven de una clase ?

   
}



quizás a alguien se le ocurra algo, yo tengo algunas ideas pero me resultan demasiado complejas.

saludos
Título: ¿qué Pasa Con Los Programadores?
Publicado por: zupervaca en 12 de Abril de 2005, 09:27:44 PM
 puedes probar esto como solucion:

class ca
{
int a, b;
};

ca a;
int size = sizeof(ca);
char *datos = new char[size];
memcpy( datos, &a, size );
guardardatos( datos, size );


saludos
Título: ¿qué Pasa Con Los Programadores?
Publicado por: ethernet en 12 de Abril de 2005, 09:30:30 PM
Cita de: "zupervaca"puedes probar esto como solucion:

class ca
{
int a, b;
};

ca a;
int size = sizeof(ca);
char *datos = new char[size];
memcpy( datos, &a, size );
guardardatos( datos, size );


saludos
Lo interesante del tema es precisamente no tener que hacerlo a mano xD
Título: ¿qué Pasa Con Los Programadores?
Publicado por: zupervaca en 12 de Abril de 2005, 09:43:33 PM
 class ca{};

ca a;
int size = sizeof(ca);
char *datos = new char[size];
memcpy( datos, &a, size );
guardardatos( datos, size );

ca aa;
leerdatos( datos, size );
memcpy( &aa, datos, size );


si no quieres usar el sizeof puedes hacer el truco de indicar una variable al final de las clases como si fuera el final de ella con un valor unico, el truco de esto consiste en que las clases realmente son estructuras de datos y los offsets de las funciones no se guardan con estos asi que puedes hacer memcpys, y demas operaciones de memoria con ellas tranquilamente, la prueba la tienes en que si llamas a una funcion de la clase ca y haces un delete this dentro de ella el programa no reventara, no se si me explico bien o si entiendo bien tu problema  :lol:

saludos
Título: ¿qué Pasa Con Los Programadores?
Publicado por: ethernet en 12 de Abril de 2005, 09:49:00 PM
 Aja, entiendo lo que dices pero no me refiero a eso. Lo que quiero es hacer lo mismo que estaba haciendo, más o menos con el mismo sistema pero o necesitar saber la clase que he serializado, me explico, vieniendo una ristra de bytes sé que son una derivada de una clase base y quiero exactamente hacer lo siguiente, pero bien hecho (de forma elegante ):



Base* MiClaseBase::serialize(int* data)
{
     int type = *data++;Ç
     switch(type)
    {
       case CLASE1:  
           Clase1* p  = new Clase1;
           p->serialize(data);
           return p;
        case CLASE2:
....
    }
}

Título: ¿qué Pasa Con Los Programadores?
Publicado por: tewe76 en 12 de Abril de 2005, 11:50:38 PM
 Yo sigo con mi miniengine TWSE. En las últimas semanas he introducido mejoras muy importantes. Ahora mismo estoy haciendo un pequeño jueguecillo para que me hagáis un poco más de betatesting, pero de manera más divertida :)
Mi intención es hacerlo en unas pocas horas, así que en poco tiempo espero subirlo.

Si el betatesting es positivo, espero que sí, pues ya me pondré en serio con el primer juego de mi aventura share. Y en unos meses, multimillonario :D
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Pogacha en 12 de Abril de 2005, 11:52:55 PM
 Sacando eso ultimo que pusiste (que es lo que yo hago y encuentro imposible de suplantar) intentas hacer un DinamicStreamCast<> o algo por el estilo ... si lo resuelves avisame ...

No se donde terminara la vtable con el metodo de supervaca  :blink: ...
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Tyrell en 13 de Abril de 2005, 08:13:32 AM
 Aunque mi labor principal es la programación, me estoy dedicando todavía al diseño de nuestro próximo proyecto indy. De todos modos lo haré en blitz3D ...no creo que sea muy interesante para los moteros. B)  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Haddd en 13 de Abril de 2005, 08:58:08 AM
 
Citar
no creo que sea muy interesante para los moteros

Venga, hombres, que no todo es motor en esta vida. Una rutina de spline, una exportación de MAX, cualquier cosa es importante. Un juego en Blitz3D también puede estar muy bien, con nuevas ideas sobre el gameplay, o la forma de actuar el ratón...cualquier cosa que puedas decir que es novedosa, o que te lo parece...
Título: ¿qué Pasa Con Los Programadores?
Publicado por: vincent en 13 de Abril de 2005, 09:27:26 AM
 Yo ahora mismo estoy con las p**** colisiones. He implementado el paper de http://www.peroxide.dk/download/tutorials/...0/pxdtut10.html y me funciona bien, es decir, choca contra las cosas y sube escaleras.

Ahora lo que estoy haciendo es una especie de Kdtree para accelerar la busqueda de los posibles triángulos colisionadores. Después tocará añadir las colisiones con los objetos animados.

Hablando de objetos animados. De momento los tengo implementados con .x, pues necesitava algo rápido. Me funcionan bien si quiero que la animación sea un loop, pero cuando quiero que se pare al final de la animación, no me lo hace correctamente... utilizo este código:

double time = m_pAnimController->GetTime();
LPD3DXANIMATIONSET pAnimSet;
m_pAnimController->GetTrackAnimationSet(0, &pAnimSet);
D3DXTRACK_DESC pDesc;
m_pAnimController->GetTrackDesc(0, &pDesc);
double timeanim = pDesc.Position;
double duration = pAnimSet->GetPeriod();
double periodicTime = pAnimSet->GetPeriodicPosition(timeanim);

if ( m_bLoop )
{
if (m_pAnimController != NULL)
{
 m_pAnimController->AdvanceTime(fElapsedTime, 0);
 m_fCurrentTime += fElapsedTime;
}
}
else
{
if (m_pAnimController != NULL)
{
 if ( periodicTime > ( duration - DELTA ) )
 {
  m_pAnimController->SetTrackPosition(m_dwCurrentTrack, periodicTime);
  m_fCurrentTime = periodicTime;
 }
 else
 {
  m_pAnimController->AdvanceTime(fElapsedTime, 0);
  m_fCurrentTime += fElapsedTime;
 }
}
}


A alguien se le ocurre algo?

Hasta pronto!
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Haddd en 13 de Abril de 2005, 09:36:26 AM
 Nosotros no utilizamos la animación de DX  <_<

Respecto a lo de las colisiones, echale un vistazo a Newton, el motor de física. Yo lo estoy utilizando precisamente para controlar las colisiones con el mundo y va muy bien  (ole)  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: vincent en 13 de Abril de 2005, 09:55:21 AM
 y es gratis? va rápida? teneis alguna comparativa con ODE?
Título: ¿qué Pasa Con Los Programadores?
Publicado por: AK47 en 13 de Abril de 2005, 10:02:11 AM
 Saludos
Yo estoy con un jueguillo con terrenos y tal... Ya pondre afotos cuando hay algo mas serio que enseñar ;)

Ethernet, yo uso un sistema de serializacion, no se si te vale: tengo una clase que maneja las ristras de bytes, y todo va por operadores << y >>, como el iostream. Luego esta realmente el meollo del asunto, que es el modo automatico de crear una clase concreta a partir de una ristra de bytes. Esto lo hago con las pluggable factories, que puedes encontrarlos aqui. A mi por lo menos me sirven, aunque hay que meter algo de codigo. Espero que te sirva ;)
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Haddd en 13 de Abril de 2005, 10:05:08 AM
 Es gratis, es rápida, muy rápida, y hay tutoriales. Y además tengo hecho un wrapper a .Net 2.0, si lo quieres  :P  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: vincent en 13 de Abril de 2005, 10:20:00 AM
 Perfecto! pues le echaré un vistazo a esos tutoriales. De momento programo en C++, así que por ahora el wraper no te lo pediré...  :)

Merci!
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Lord Trancos 2 en 13 de Abril de 2005, 03:32:20 PM
Cita de: "vincent"Yo ahora mismo estoy con las p**** colisiones. He implementado el paper de http://www.peroxide.dk/download/tutorials/...0/pxdtut10.html
Imagino que estas usando la informacion del .pdf que se indica al principio de la pagina, y no la informacion de la pagina en si (que esta desfasada y no funciona del todo bien)...
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Capiflash en 13 de Abril de 2005, 03:51:46 PM
 Bueno , pues me pido el papel del más aburrido del grupo .
Yo estoy trabajando en una aplicacion de facturacion/contabilidad en C# para una empresa , asi que no querreis que ponga pantallazos  :P  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: kbks en 13 de Abril de 2005, 03:54:57 PM
 Capiflash estas igual que yo. Ahora mismo estoy con una aplicación para informatizar las Actas de inspección de recintos y locales de Euskadi en C#. Pero esto no es lo peor, lo pero es que ahora me toca hacer el manual de usuario...
Título: ¿qué Pasa Con Los Programadores?
Publicado por: vincent en 13 de Abril de 2005, 04:14:50 PM
 
Cita de: "Lord Trancos 2"Imagino que estas usando la informacion del .pdf que se indica al principio de la pagina, y no la informacion de la pagina en si (que esta desfasada y no funciona del todo bien)...
Efectivamente, estoy utilizando el pdf... voy a echar un ojo a la Newton esta tarde..
Título: ¿qué Pasa Con Los Programadores?
Publicado por: senior wapo en 13 de Abril de 2005, 04:24:00 PM
 Este post deberia llamarse "en que andas Coder?"  (twist)

@Ethernet: Serialize? si es para cargar será deserialize no? Bueno, como bien dices, no hay mas webs que usar variantes del switch/case y codigo factory (o registrar en una tabla la función factory que sea llamada para crear cada clase, asociando el ID de clase con la función de construcción). O eso, o clases derivadas, pero eso ya has dicho que quieres evitarlo.

Yo estaba con un proyecto indie de crear un clon del sweek/humphrey (tipico pisa baldosas para cambiarlas de color) en 3D, pero ultimamente me estoy planteando mandar al garete la programación (informatica y desarrollo en general)  y dedicarme a otra cosa más rentable.
También actualicé un fork de Nebula Device 1, para que corriera con DirectX7 (usaba 8), integrara microtcl para el scripting, etc... por aquello de tener un buen engine multiplataforma adecuado para el desarrollo indie. Por ahí tengo un tarball, pero me dá que comerá polvo.

Unas fotillos del difunto prototipo en Blitz 3D (todo 3D, gráficos de coder-> wings3d+Gimp+Paint .NET):
(http://img44.echo.cx/img44/4375/game3d15ep.th.png)
(http://img153.echo.cx/img153/2331/game3d24yk.th.png)


Como no tengo cuerpo para hacerme stripper o gogo, ni mi Señor Largo da la talla para hacerme actor porno, ni soy tan jeta para hacerme consultor, pues admito ideas   (twist)  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: vincent en 13 de Abril de 2005, 05:05:53 PM
 Dedicate a la especulación inmobiliaria, que se vé que da mucha pasta.

Y sinó te inventas que te enrollaste con Yola Berrocal antes de operarse y fijo que alguien te da algo de pasta por la exclusiva..  :P  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: vincent en 13 de Abril de 2005, 08:03:45 PM
 Bueno, como Haddd dijo que la Newton estaba muy bien, pues esta tarde me he puesto a provarla... y sin mucho esfuerzo he tenido una esfera cayendo y colisionando por ahi... brutal!  (uoh)  Para hacer lo mismo en ODE me costó mucho más.  <_<

Ahora intentaré poner las colisiones del personaje con la Newton también a ver que tal. Ya os informaré.

Merci Haddd!!!  (ole)  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: AgeR en 13 de Abril de 2005, 09:08:41 PM
 Básicamente estoy con un jueguecillo que estamos haciendo con mi motor (por fin es útil para algo XD).
Imagen cutre de prueba. Aún estamos haciendo pruebas y tal, para ver la perspectiva, efectos, controles y demás.

A parte, estoy dando los últimos retoques a un jueguecillo 2D (es el mismo que puso Helius hace poco  :P ) para aprender a usar las SDL.
Y ya en mente, tengo que retomar el juego del concurso 24h y hacerlo en 2D también con SDL.

De las prácticas de la universidad mejor no comento nada.  :lol:

PD: Senior wapo, esas capturas tenían buena pintilla, por qué has abandonado el proyecto?
Título: ¿qué Pasa Con Los Programadores?
Publicado por: zupervaca en 13 de Abril de 2005, 09:14:14 PM
 
Cita de: "ethernet"Aja, entiendo lo que dices pero no me refiero a eso. Lo que quiero es hacer lo mismo que estaba haciendo, más o menos con el mismo sistema pero o necesitar saber la clase que he serializado, me explico, vieniendo una ristra de bytes sé que son una derivada de una clase base y quiero exactamente hacer lo siguiente, pero bien hecho (de forma elegante ):



Base* MiClaseBase::serialize(int* data)
{
     int type = *data++;Ç
     switch(type)
    {
       case CLASE1:  
           Clase1* p  = new Clase1;
           p->serialize(data);
           return p;
        case CLASE2:
....
    }
}

ahora entiendo lo que dices claramente (eso espero  :lol:), la solucion que existe es esta:

// Incluir cabeceras
#include <stdio.h>
#include <conio.h>
#include <memory.h>

// Clase de pruebas
class ca
{
public:
void pruebasa( int a1, int a2 )
{
 this->a1 = a1;
 this->a2 = a2;
};
int a1, a2;
ca()
{
 printf( "\r\nconstructor" );
}
~ca()
{
 printf( "destructor" );
}
};

void main()
{
// Guardar la clase en un buffer
ca a;
a.pruebasa( 10, 20 );
int sizeclasea = sizeof(ca);
char *datos = new char[sizeclasea] +2;
datos[0] = 1; // Por si quieres saber que clase es en algun momento
datos[1] = sizeclasea; // Tamaño de la clase
memcpy( &datos[2], &a, datos[1] );

// Recuperar la clase de un buffer
sizeclasea = datos[1];
char *clase = new char[sizeclasea];
memcpy( clase, datos +2, sizeclasea );
ca *aclase = (ca*)clase;

// Hacer pijadines con ella
char sz[256];

// Mostrar los valores originales desde datos
printf( "\r\ncomienzan las pruebas\r\n" );
sprintf( sz, "datos-> a1: %i, a2: %i\r\n", aclase->a1, aclase->a2 );
printf( sz );

// Modificar los valores de la clase
aclase->pruebasa( 11, 21 );
sprintf( sz, "modificada-> a1: %i, a2: %i\r\n", aclase->a1, aclase->a2 );
printf( sz );

// Finiquitar el percal
delete aclase;
getch();
}


con esto lo haces de forma automatica, te lo he puesto en plan ejemplo cutre para que lo veas rapidamente y no liarte con chorradas, ademas la ventaja de este sistema es que no llama al constructor de la clase con lo que te ahorras la doble inicializacion de valores  ;), este sistema es el que utilizaba yo hace mucho tiempo en ms-dos para guardar clases del tiron y ahorrarme mucho tiempo de programacion

saludos y espero acertar esta vez  :rolleyes:  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: ethernet en 13 de Abril de 2005, 09:43:09 PM
 No es un método muy ortodoxo y tiene problemas pero por ahí irán los tiros. Me leeré los artículos de AK47 aunque me temo que se meten en terrenos que no me quiero meter. Es posible resolverlo con una factory y templates de forma elegante, pero eso no me interesa ahora ya que no es mi objetivo principal hacer un serializer de pánico, solo quiero usarlo.

gracias
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Haddd en 13 de Abril de 2005, 10:29:09 PM
 Newton es mucho Newton  :D  Bueno, ahora cuando tenga dudas con cosas de Newton, ya sé a quien preguntar  ;)

Por cierto, el foto de Newton está muy muy bien. El propio desarrollador de la librería suele responder a todas las preguntas...
Título: ¿qué Pasa Con Los Programadores?
Publicado por: zupervaca en 14 de Abril de 2005, 11:28:42 AM
 si quieres otra solucion sin usar clases derivadas, pero que te tocara implentar cada una, en vez de cases usa punteros a funciones, asi lo dejarias sin comprobaciones en cada serialize, en efecto el fallo mas gordo del sistema que te pongo es que tienen que ser tipos de datos que se encuentren dentro de la clase, si tienes un dato tipo puntero no funcionara, tambien tienes otro sistema que se usa mucho para generar indices automaticos para busquedas, el sistema consiste en que cada tipo de clase tiene un "class declarator", si has usado directx (me parez que es el caso) conoceras el vertex declaration, pues basicamente es lo mismo, es almacenar los tipos de datos, posiciones y tamaños de una clase para luego guardarlas y leerlas automaticamente con una funcion, otra forma de enterlo por si no has visto el vertex declaration es como cuando enviamos comandos por la red, un comando por decirlo tendria su tipo de comando, su longitud y despues su contenido y asi se envia y recibe sin saber lo que es ese comando

si aun no has probado a sobrecargar el operador new para hacer algun truco te recomiendo un no ya que es una locura y en muchos compiladores revienta todo  :(  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Astat en 14 de Abril de 2005, 01:44:00 PM
 Aqui teneis un video (ojo 5 megas!) de un tema relacionado con la arquitectura en el que estoy metido.

Por ahora esta pensado para que carge en equipos antiguos asin que no hay materiales molones ni iluminacion chachi pilongui, pero todo se andara  ;)

PD: He estado hechando un ojo a Newton ese y me parece bastante mas lento que ODE la verdad (version 0.5), aunque si es cierto que la API es mas clara.
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Zaelsius en 14 de Abril de 2005, 03:10:07 PM
 Yo estoy haciendo un port de un juego BREW a PC/Mac con PTK.


PD: He probado tambien las Newton en el Mac, y la verdad es que van muy justas de rendimiento, al menos en mi máquina.
Título: ¿qué Pasa Con Los Programadores?
Publicado por: DraKKaR en 14 de Abril de 2005, 04:34:37 PM
 Yo he estado un tiempo desarrollando una herramienta de simplificación poligonal. Ahora estoy investigando unas cosillas, relacionadas con gráficos. Ya hacía tiempo que no tocaba nada del motor, pero esto último me ha "obligado" (más bien ha sido la excusa perfecta) para implementar un renderer de iluminación por píxel para mi motor.

No sabía muy bien como gestionar el tema de los shaders y al final lo he hecho de una forma que me gusta bastante: los shaders se generan  en tiempo de ejecución según las necesidades de lo que se vaya a dibujar. Es decir, necesito dibujar un objeto con iluminación, textura y un mapa de normales. El renderer mira si ya se ha creado anteriormente un shader que cumpla esas carácterísticas. Si es así, se utiliza, si no, se genera y se guarda para ser reutilizado.

No se si esta es la forma habitual de hacer estas cosas pero a mí me gusta. También es posible que el usuario asigne un shader para una malla en particular (esto tiene preferencia a los shaders automáticos).

Si teneis curiosidad podeis ver el código fuente en el espacio web de sourceforge de mi motor, utilizando el WebCVS. Se trata del módulo 'renderogl_sm1'.
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Pogacha en 14 de Abril de 2005, 05:13:37 PM
 zupervaca ese codigo no tiene ninguna posibilidad de funcionar ... si la clase tiene metodos virtuales en  (vtable*)(&ca)-1 se guarda el puntero a la vtable y si no tiene metodos virtuales no se si estara protegida esa posicion de memoria ... si ademas agrego rtti no tengo idea de como se distribuira la memoria en ese compilador ...

La verdad es que no es solución para nada ... incluso mi clase es:

class CA {
 int *a;
 CA(Stream f) { a=new int[100]; for(i; i<100; i++) f>>a[i]; }
 virtual ~CA() { delete a; }
};


tu memcpy fracasa ...

Me vuelan por la cabeza metodos del tipo :

Constructor(Stream Deserializando) : Miembro1(Deserializando) : Miembro2(Deserializando);

Pero ni siquiera voy a probar, yo seguire con mi switch y punteros void *

Saludos


Título: ¿qué Pasa Con Los Programadores?
Publicado por: BeRSeRKeR en 14 de Abril de 2005, 06:21:19 PM
 
Cita de: "DraKKaR"No sabía muy bien como gestionar el tema de los shaders y al final lo he hecho de una forma que me gusta bastante: los shaders se generan  en tiempo de ejecución según las necesidades de lo que se vaya a dibujar. Es decir, necesito dibujar un objeto con iluminación, textura y un mapa de normales. El renderer mira si ya se ha creado anteriormente un shader que cumpla esas carácterísticas. Si es así, se utiliza, si no, se genera y se guarda para ser reutilizado.
Más o menos ese es el sistema que tenemos en el motor C# aunque tendríamos que llevarlo un poco más allá e implementar un sistema similar al que Shawn Hargreaves describe en este documento. La verdad es que es la única forma (que yo contemple) en la que puedes crear múltiples combinaciones de shaders de forma flexible y sin volverte loco. :D

Saludos.
Título: ¿qué Pasa Con Los Programadores?
Publicado por: zxs en 14 de Abril de 2005, 09:17:55 PM
 pues yo pertenezco al grupo de los sufridores, hasta hace poco: vb6, mucho acess y sobretodo, una base
de datos que no usa nadie pero su programación es genial: mezcla pascal + ensamblador y te sale ... no querais saber lo que sale... ni el doctor Menguele!!!! (grrr)

ahora que he cambiao de currelo, pues he vuelto al C/C++ y, claro, yo refrescandome despues de 3 años
sin picar codigo orientado a objetos y me saltais
Citarsobrecargar el operador new
casi me da un yuyu, lo bueno, que como estoy metiendo caña al C++, pues me podré poner !por fin! con ganas con el directx, que deje aparcado hace unos mesecitos, vamos, deje una nave por el espacio disparando a lo loco  (nooo) )

Título: ¿qué Pasa Con Los Programadores?
Publicado por: zupervaca en 15 de Abril de 2005, 12:31:36 PM
Cita de: "Pogacha"zupervaca ese codigo no tiene ninguna posibilidad de funcionar ... si la clase tiene metodos virtuales en  (vtable*)(&ca)-1 se guarda el puntero a la vtable y si no tiene metodos virtuales no se si estara protegida esa posicion de memoria ... si ademas agrego rtti no tengo idea de como se distribuira la memoria en ese compilador ...

La verdad es que no es solución para nada ... incluso mi clase es:

class CA {
 int *a;
 CA(Stream f) { a=new int[100]; for(i; i<100; i++) f>>a[i]; }
 virtual ~CA() { delete a; }
};


tu memcpy fracasa ...

Me vuelan por la cabeza metodos del tipo :

Constructor(Stream Deserializando) : Miembro1(Deserializando) : Miembro2(Deserializando);

Pero ni siquiera voy a probar, yo seguire con mi switch y punteros void *

Saludos
sigo diciendo lo mismo hay que leer antes de postear, esa clase es normal que no funciona ya que trabajas con punteros dentro de la clase, la clase esta en una posicion de memoria y el puntero de la clase en otra, si lees mas abajo ethernet dice que tiene fallos y yo le indica que efectivamente solo funciona con valores que esten dentro de la clase, cosa que los punteros no estan, si coges mi ejemplo cutre y lo compilas veras como funciona correctamente

saludos

pd: antes de usar switch usa punteros a funciones
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Pogacha en 15 de Abril de 2005, 08:31:02 PM
 Pido disculpas por no argumentar adecuadamente mi criterio:

En realidad el problema principal es que quiebras el paradigma de la POO:

1- Accedes a miembros privados o protegidos y a todo.
2- Si al compilador se le canto meter entre medio de esta clase otra cosa en memoria tambien lo estas destruyendo con memcpy  ...
3- El archivo servirá solo para esta compilación ... cualquier cambio haría imposible la recontrucción ...
4- El metodo es externo y para acceder a miembros privados deberias llamar a una función para obtener estos resultados, lo cual implica que las clases bases debieran conocer a sus hijos o mas bien a todos ...

Sin animos de ofender, concluyo que como metodo general resuelve solo casos aislados y no sirve como automatización, pues para cualquier singularidad requiere solución particular.

Sobre los punteros a funciones, ganaria velocidad a costo de complicarme? ... no creo que me interese la velocidad si estoy leyendo de disco, supongo que lo decias como alternativa, la cual es buena en un switch con muchos casos.

Saludos.
Título: ¿qué Pasa Con Los Programadores?
Publicado por: vincent en 20 de Abril de 2005, 12:35:28 PM
 bueno, finalmente ya tengo tuneado el tema de las colisiones. Al final las colisiones del personaje con el mundo las he echo a mano. La newton seguramente si que la utilizaré para los solidos rigidos.

Lo que no me funcionava ahora es que creava mal el kdtree que uso para las coliisones. no tenia en cuenta todos los casos en que un triangulo puede estar dentre de la bounding box del nodo.

Ahora ya funciona todo bien y muy rapido.

Hasta luego!
Título: ¿qué Pasa Con Los Programadores?
Publicado por: nostromo en 20 de Abril de 2005, 01:33:08 PM
 Buenas,

Para enriquecer un poco la discusión sobre serializar objetos en C++:

Esta claro que cualquier implementación sobre el lenguaje o no es limpia o tienes que decirle que campos guardar, o no sabe nada de referencias, clases derivadas etc....

Por abrir otro frente de ataque al problema os propongo que le echeis un vistazo a OpenC++:

http://opencxx.sourceforge.net/

Se trata de programar los programas de C++, es decir metaprogramación... con esta herramienta podemos generar un compilador de C++ que añada funcionalidad a nuestras clases, y con esto se podria solucionar el tema de la serialización de una manera limpia y potente ....
y muchos otros temas como la reflexión que no tiene el C++ y que hace que en Java y C# sea "facil" serializar puesto que la reflexión como algunos sabeis hace que las clases se puedan conocer a si mismas.

En fin, yo no tengo tiempo para profundizar en esta herramienta pero aunque esta incompleta muestra un futuro prometedor.

Un saludo
Título: ¿qué Pasa Con Los Programadores?
Publicado por: zupervaca en 20 de Abril de 2005, 04:19:34 PM
Cita de: "Pogacha"Pido disculpas por no argumentar adecuadamente mi criterio:

En realidad el problema principal es que quiebras el paradigma de la POO:

1- Accedes a miembros privados o protegidos y a todo.
2- Si al compilador se le canto meter entre medio de esta clase otra cosa en memoria tambien lo estas destruyendo con memcpy  ...
3- El archivo servirá solo para esta compilación ... cualquier cambio haría imposible la recontrucción ...
4- El metodo es externo y para acceder a miembros privados deberias llamar a una función para obtener estos resultados, lo cual implica que las clases bases debieran conocer a sus hijos o mas bien a todos ...

Sin animos de ofender, concluyo que como metodo general resuelve solo casos aislados y no sirve como automatización, pues para cualquier singularidad requiere solución particular.

Sobre los punteros a funciones, ganaria velocidad a costo de complicarme? ... no creo que me interese la velocidad si estoy leyendo de disco, supongo que lo decias como alternativa, la cual es buena en un switch con muchos casos.

Saludos.
la quiebro sencillamente por que ethernet no quiere derivar de una clase, ese ejemplo cutre es para evitar que ethernet lo haga, yo en ningun caso lo haria asi

pido que leais los post antes de contestar, seguir el hilo y enteraos un poco de lo que se habla antes de escribir por favor

saludos
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Pogacha en 20 de Abril de 2005, 06:57:49 PM
 En realidad si leí todo previo a contestar ... pero tal vez malinterprete lo que decias (no se donde) y fui demasiado estricto ... solo queria unificar criterios, si a ti no te sirve esta conversación entonces a mi tampoco ...
Saludos  
Título: ¿qué Pasa Con Los Programadores?
Publicado por: Miki en 20 de Abril de 2005, 07:46:48 PM
 Vamos Pogacha y Zupervaca, no entreis en riñas k no sirven para nada... :-P

Pues aver, yo ando metido en varias cosas.
Ahora mismo toy con un port de juego de movil a PC/MAC (junto con Zaelsius y Shaq), del cual obviamente no podemos decir/enseñar nada XD.
Por otra parte sigo el desarrollo (aunk ya hace como 3 semanas k no hago NADA) de mi motor RET FX (Real Environment Tech). Tengo hecho el sistema 2D (acelerado por supuesto), el sistema de materiales (importados desde max con un exportador propio), el cual permite hasta 5 texturas simultaneas (aun cuando la t.gráfica sea single-texturing), environment map, bumpdot3, y transformación (tecnología DX7 a fin de cuentas), otro exportador para mallas (k aún no soporta animación, ni por gayframe ni skeletigay XD) y todo un sin fin de parafernalia k juntan ya más de 40.000 lineas de código (lo sé, no son muchas, pero dios sabe lo k me ha costado escribirlas XD). Paralelamente tenemos el sistema de red (sobre UDP) al 60% más o menos, el cual está siendo desarrollado por otro compañero. El motor soporta DX7, DX8, DX9, y el raster OGL está en proceso de fabricación (tmb por otra persona). El motor de físicas es una simple capa a Tokamak :-P
Luego tengo 2 proyectos pendientes. Uno de tipo puzzle, k hicimos hace casi 3 años, pero k por circunstancias insospechadas no hemos tenido cojones de sacarlo al mercado (vía trymedia, alawar o algún sitio parecido). El caso es que aún keda por pulir un poco el modo multijugador y un par de cosillas más. El otro proyecto es un juego de coches (del cual tenemos una demo bastante wapa, con su física, IA, etc), pero de momento se ha kedado ahí, en una demo XD (en realidad era para un proyecto de fin de carrera). No puedo enseñar nada de estos proyectos por respeto a mis compañeros. De todas formas acabaremos por poner ambas cosas a descarga directa, pues no tiene pinta de que vayamos a concluirlos, al menos el de coches, ya que no tenemos grafistas (o dinero para pagar a grafistas) para desarrollar un capazo de pantallas.

En fin, eso es todo.
Salud2
Título: ¿qué Pasa Con Los Programadores?
Publicado por: zupervaca en 21 de Abril de 2005, 12:49:03 PM
 me imagino que te liaste cuando dije que lo usaba en ms-dos con borland, el problema es que no dije para que lo usaba, realmente lo usaba para depurar los valores de la clase rapidamente, la lectura de clase nunca la he usado pero lo de grabar directamente pero en aquella epoca la probe a ver que pasaba, asi me ahorraba mucho tiempo en programar un serialize para cada clase y ademas solo era para depurar, incluso he llegado a hacer barbaridades como derivar todas las clases de una misma clase que incrementaba una variable global en su constructor y en el destructor la restaba y asi sabia si todos los objetos se eliminaban (tipo objetos com de ahora)

la forma correcta para mi de hacer lo de eternet es mediante clases de eventos, si no quiere usar clases bases, actualmente se usa mucho en java, aunque yo prefiero que el evento este en la propia clase

saludos