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

Temas - Manu343726

#1
Buenas

Como algunos sabrán, llevo casi un año intentando portar dx_lib32  a C++ utilizando DirectX9 (En un futuro OpenGL).
El port se encuentra todavía en una fase muy temprana, la API todavía no está muy bien definida, suelo hacer cambios profundos frecuentemente. Además todavía tiene muchos bugs, pero va tirando xD.

El caso es que éstos días estoy mirando el tema de licencias de software libre para el proyecto, y me surgió la duda sobre si debería usar el mismo nombre o utilizar otro.

Me explico: El proyecto dx_lib32 se liberó bajo licencia LGPL2. En dicha licencia se hace referencia al proyecto como "dx_lib32". Mi port, aunque sea un proyecto derivado de éste, técnicamente no es el mismo, así que debería buscar otro nombre.

Me gustaría saber si estoy en lo cierto, y por tanto tengo que buscar un nombre, o hay algo mal en todo lo que he dicho. Gracias.

PD: En caso afirmativo, en el que tengo que buscar un nombre, agradecería sugerencias xD
#2
General Programadores / NetBeans C++: relative include paths
25 de Marzo de 2013, 01:06:15 AM
Buenas noches

He decidido dejar de usar Visual Studio para C/C++ y pasarme a NetBeans, más que nada porque el compilador de M$ es de risa, no han implementado una mierda de C++11.

El caso es que estoy intentando configurar los directorios de include del proyecto para poder usar el SDK de directx, y no soy capaz de usar la variable de entorno DXSDK_DIR, igual que lo hacía en VS. He mirado en google, stackoverflow, etc, y nada, no lo consigo. Si no he entendido mal, la sintaxis es ${VARIABLE} (EN VS si no recuerdo mal era $(VARIABLE)).

Alguien lo ha conseguido hacer? Si es así agradecería que me lo explicaran paso a paso, como si fuera gilipollas XD. Quiero asegurarme de que lo hago bien.

Gracias
#3
General Programadores / DirectSound XACT, etc
12 de Marzo de 2013, 08:32:34 AM
Esta pregunta es equivalente a la otra que he puesto sobre DirectInput, pero esta vez sobre el tema de sonido.
DirectSound esta deprecated, XACT también, que API de sonido provee Microsoft actualmente?
Últimamente me da la sensación de que todas las APIs de Microsoft están deprecated, y las que no lo están no saben que hacer con ellas.
Creo que es una clara señal para saltar del barco y empezar a usar OpenGL en serio.
#4
General Programadores / DirectInput
12 de Marzo de 2013, 08:26:08 AM
Buenas.

Estoy empezando con el tema de input para mi port de la dx_lib32, y estos días he empezado a documentarme en profundidad.
El caso es que me ha llamado la atención la situación de las APIs de input de Microsoft. DirectInput la marcan como deprecated, y recomiendan el uso de XINPUT, pero esta última sólo es compatible con dispositivos de xbox360. De manera que se sigue recomendando el uso de DirectInput en todos los tutoriales que he ojeado por ahí.

Debería usar DirectInput, o hay alguna otra API más moderna que se me haya escapado?
Si no es así, ya que estamos, cual sería el equivalente (si existe) para OpenGL?
#5
General / tilemap isometrico: Picking
15 de Febrero de 2013, 09:09:46 PM
Buenas

Estoy implementando tilemaps isometricos del estilo de sim city 3000. Ahora estoy empezando con el tema de picking. El mayor problema es que el tilemap no tiene por que ser plano, de manera que no puedo aplicar cosas como las de éste estilo: http://www.cocos2d-iphone.org/forum/topic/21591.

Lo mas decente que se me ha ocurrido es calcular las coordenandas baricentricas del ratón en todos los tiles que pasan el test de culling.
Que os parece?
#6
Buenas

Sigo peleándome con direct3d9.

El caso es que tengo implementada la función DRAW_Trapezoid() de dx_lib32 mediante indexbuffers, para empaquetar todas las llamadas encadenadas en una sola llamada a drawindexedprimitive. En el sobremesa funciona perfectamente, pero cuando lo pruebo en el netbook me salta un bufffer overflow en la llamada a drawindexedprimitive().

Alguna idea?
#7
General / Sencillo sistema de animaciones para sprites
13 de Febrero de 2013, 08:40:26 PM
Buenas

Estaba pensando en una manera eficiente de hacer animaciones sencillas para sprites. Basicamente cambiar la textura del sprite una vez por "tick", seleccionando esa textura de la lista de texturas que forman la animación.

Algo así:

class AnimatedSprite
{
private:
static void _timerHook();

int _framesCount_1;
Texture _frames[_framesCount_1 + 1];
int _frame;
public:
static const MAXANIMATIONFRAMES = 1000;
void tick();
void draw(GraphicsDevice gfx);
}

void AnimatedSprite::_timerHook()
{
foreach(AnimatedSprite instance : instances)
instance.tick();
}

void AnimatedSprite::tick()
{
if(_frame<_framesCount)
             _frame++;
        else
             _frame=0;
}

void AnimatedSprite::draw(GraphicsDevice gfx)
{
gfx.DrawTexture(_frames[_frame]);
}

(Se supone que es un ejemplo, una especie de C++ en pseudocódigo)
El único detalle es que utiliza el mismo timer para todas las instancias, de manera que la velocidad de la animación sea la misma. Me parecía lo más correcto.

Os parece la mejor manera de implementar animaciones? O usáis alguna forma más eficiente?

PD: También se me había ocurrido una manera para reducir el número de operaciones:

class AnimatedSprite
{
private:
static _tickCounter;
static void _timerHook();

int _framesCount_1;
Texture _frames[_framesCount_1 + 1];
int _frame;
public:
static const MAXANIMATIONFRAMES = 1024;
void tick();
void draw(GraphicsDevice gfx);
}

void AnimatedSprite::_timerHook()
{
if(_tickCounter <= MAXANIMATIONFRAMES)
_tickCounter++;
else
_tickCounter = 0;

foreach(AnimatedSprite instance : instances)
instance.tick();
}

void AnimatedSprite::tick()
{
_frame = MAXANIMATIONFRAMES & _framesCount_1
}

void AnimatedSprite::draw(GraphicsDevice gfx)
{
gfx.DrawTexture(_frames[_frame]);
}


Suponiendo que el número de frames de una animación siempre es potencia de dos. (Un poco chorra, lo se, al final es n sumas vs 1 suma y n ands, supongo que en el hardware de hoy en día será imperceptible la diferencia de rendimiento entre una and y una suma)
#8
Programación gráfica / De direct3d9 a OpenGL
07 de Febrero de 2013, 09:40:43 AM
Buenas

Estoy pensando en migrar de direct3d a OpenGL, dado el actual estado de Microsoft, que no hace más que tirar por la ventana todas sus plataformas. Además, esta el tema de la portabilidad, por supuesto.

Me gustaría que me dierais algún consejo, guía, pdf o lo que sea para cambiar el chip.
Vengo de direct3d9, la fixed function pipeline, y esas historias.

Gracias
#9
Programación gráfica / Dibujar tilemaps
28 de Enero de 2013, 12:07:51 PM
Buenas.

Me gustaría saber cual es la mejor manera, o la más eficiente mejor dicho, de dibujar tilemaps.
Es algo a lo que llevo dando vueltas en la cabeza y no acabo de encontrar solución.

No puedo usar trianglestrips porque las coordenadas de textura no tienen porque ser la misma para dos tiles contiguos. Pero dibujar todo a base de quads no me parece la mejor manera, ya que en la mayoría de los casos repetirás el mismo vertice cuatro veces (suponiendo que el tilemap sea ortogonal, normal y corriente).

Tiene que haber alguna manera mejor, pero o no la veo, o no se me ocurre.
#10
Buenas.

Estoy mirando el tema de dimensionar la ventana teniendo en cuenta el marco, para que la región de dibujo de la ventana salga con el tamaño que nosotros queremos. Es algo que [EX3] me comentó en el gamevelop de noviembre y que había dejado aparcado.

Creo que ya es hora.

La cosa es que he estado echando un ojo al código original, y he visto que primero llamas a SetWindowRegn() y luego a MoveWindow() para redimensionarla como querías.
Es necesario llamar primero a SetWindowRegn() ? No actualiza automáticamente el tamaño de la región de dibujo al redimensionar la ventana?

EDIT: Ahora que lo pienso, eso tiene sentido. Por eso el "escalado" que hace al redimensionar la ventana. La resolución de la región de dibujo sigue siendo la misma, me equivoco?

Sobre el resto creo que no tengo ninguna duda. Era por curiosidad.
#11
Proyecto dx_lib32 / dx_GFX_class Resolución a pantalla completa
22 de Noviembre de 2012, 08:14:35 PM
Buenas, estaba haciendo unas modificaciones en mi implementación de la inicialización de dx_GFX_class, y hay una cosa que me ha llamado la atención de la implementación original:


If Windowed Then
        D3DWindow.Windowed = 1
        If VSync Then
            D3DWindow.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC
       
        Else
            D3DWindow.SwapEffect = D3DSWAPEFFECT_COPY
           
        End If
       
        D3DWindow.BackBufferFormat = DispMode.Format
        D3DWindow.BackBufferHeight = Height
        D3DWindow.BackBufferWidth = Width
        D3DWindow.hDeviceWindow = hWnd
   
        Global_Mod.D3D_FullScreen = False
   
    Else
        Select Case Bpp
            Case 16, Is < 16: DispMode.Format = D3DFMT_R5G6B5
            Case 32, Is > 32: DispMode.Format = D3DFMT_X8R8G8B8
       
        End Select

   
        DispMode.Width = Width
        DispMode.Height = Height

        If VSync Then
            D3DWindow.SwapEffect = D3DSWAPEFFECT_FLIP
       
        Else
            D3DWindow.SwapEffect = D3DSWAPEFFECT_DISCARD
            D3DWindow.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE
   
        End If
   
        D3DWindow.BackBufferCount = 2 + Abs(TripleBuffer)
        D3DWindow.BackBufferFormat = DispMode.Format
        D3DWindow.BackBufferHeight = DispMode.Height
        D3DWindow.BackBufferWidth = DispMode.Width

        .....


Cuando inicializas dx_GFX_class en modo pantalla completa tienes que introducir explícitamente la resolución de pantalla???? No sería más lógico que lo hiciera automáticamente, ya que has consultado el modo de pantalla? (D3DDISPLAYMODE)

La parte que me ha llamado la atención es:

        DispMode.Width = Width
        DispMode.Height = Height


y luego haces:


        ....
        D3DWindow.BackBufferHeight = DispMode.Height
        D3DWindow.BackBufferWidth = DispMode.Width
        ....


De manera que te pasas por el forro la resolución del display, tiene que darla el usuario....

Hay alguna razón para ésto?
#12
Proyecto dx_lib32 / Rendimiento
30 de Octubre de 2012, 08:04:44 PM
Me gustaría saber que nivel de rendimiento os ofrece dx_lib32. Yo no he llegado a desarrollar un juego serio con ella, así que me gustaría saber que capacidad ofrece en un ambiente "real". Así me ayudaríais a orientarme en la implementación, que partes debo trabajar más (optimizar, vamos) y cuales menos

Gracias
#13
General Programadores / teclado virtual en windows
27 de Octubre de 2012, 04:03:05 PM
buenas

estoy desarrollando una aplicación de comandos de voz para ejecutar atajos de teclado. Algo tipo "lanzar granada" y que pulse la tecla G

Tras hechar un vistazo a la documentación de la API de windows, lo unico que he encontrado es "SetKeyboardState" pero dice que solo afecta al hilo llamante. Alguna idea?

PD: Mientras escribia ésto, me he acordado de SendMessage. Podria mandar un mensaje de pulsacion de tecla, pero no afecta solo a la ventana/aplicación del manejador que le paso?

Mi problema es que dicho mensaje deberia llegar a la ventana que tiene el foco (El juego, en el caso del ejemplo)
#14
Buenas

Me gustaría saber si alguno de vosotros conoce o a implementado un algoritmo que genere un triangle-strip a partir de una lista de puntos.

Gracias
#15
General Programadores / Problema con polimorfismo en C++
10 de Septiembre de 2012, 02:47:56 PM
Buenas

Me está costando un poco acostumbrarme a las "peculiaridades" de C++ (Soy consciente de que me quedan muchas más por sufrir). Ésto me pasa por venir del maravilloso mundo de .NET, de la abstracción, y del garbage-collector. Pero bueno...

El caso es que estaba trabajando con un array de objetos, el tipico caso al que estoy acostumbrado de tener una clase base, diferentes objetos de clases derivadas de ésta, y empaquetarlos todos en un array de tipo la clase base.
Dejando aparte el tema del polimorfismo a base de funciones virtuales, overrides, etc etc; ya me da problemas únicamente recorriendo el array.

Incluso en un caso mas sencillo, en el que el array es de la clase base, y está relleno con objetos de la misma clase derivada.

Creo entender donde está el problema: Si mal no recuerdo, C++ trata a los arrays como punteros, y la sintaxis Array equivale a Array+(i*sizeof(TipoArray)); En mi caso el tamaño de la clase base es menor que el de la derivada, y por tanto en vez de saltar de elemento a elemento, salto poco menos de un objeto cada vez.

Existe alguna manera de trabajar con arrays de manera polimorfica igual que se haría en C#/VB.NET ???

Gracias
#16
Programación gráfica / Error de indexación con trianglestrips
01 de Septiembre de 2012, 08:17:10 PM
Buenas

Estoy intentando implementar un sistema para renderizar pequeñas mallas en 2D con Direct3D9, mediante trianglestrips e indexbuffers
Para una malla de mxn vertices, subdivido la malla en n-1 trianglestrips dibujados mediante indexado. Por ejemplo, para el caso 3x3:


De manera que los dos trianglestrips serían:


Y en ésta se muestra la posición del vertice dentro del index buffer (Vxiy, siendo x el indice del vertice, e y la posición que ocupa dentro del indexbuffer):


De ésta forma, siendo el vertex buffer de 9 vértices (indices del 0-8), el index buffer quedaria: 3,0,4,1,5,2,6,3,7,4,8,5

Por tanto, para dibujar el primer strip tenemos (Dibujando mediante DrawIndexedPrimitive, por supuesto http://msdn.microsoft.com/en-us/library/windows/desktop/bb174369(v=vs.85).aspx):
- StartIndex=0
- VertexCount=6
- PrimitiveCount=4
Y para el segundo:
- StartIndex=6
- VertexCount=6
- PrimitiveCount=4

Me gustaría saber si éstos datos están bien. Yo creo que es así, pero sucede ésto:


El primer strip se dibuja bien pero el inferior no.

Ésto es con la malla rotada 45º aproximadamente en sentido horario:


He examinado una y otra vez los datos de la malla y las coordenadas de textura están bien. Visto lo visto, me inclino a pensar que es un problema con el indexado.
Alguna idea?

#17
Programación gráfica / Algoritmo de weiler-atherton
09 de Junio de 2012, 03:57:58 PM
Buenas

Llevo unos dias intentando implementar este algoritmo, pero hay algunas cosas que no me han quedado claras.

Si no he entendido mal, la idea es calcular los puntos de interseccion poligono-poligono, e insertarlos correctamente en la lista de vertices de ambos poligonos

Luego, para obtener el poligono recortado, basta con recorrer las listas de vertices, saltando de una a otra dependiendo de si un punto de interseccion es entrante o saliente.

La unica parte que no entiendo es como averiguar si un punto de interseccion es entrante o saliente.
Alguna idea?
#18
Programación gráfica / VertexBuffer DirectX
28 de Mayo de 2012, 11:24:10 AM
Buenas.
Estoy desarrollando un pequeño motor grafico con directx en c++, y tengo una dudilla sobre el uso de los vertexbuffer
La idea es hacer el motor totalmente orientado a objetos, así que había pensado gestionar la escena como un conjunto de poliedros, cada uno con sus propios vertices, de manera que cada poliedro es dibujado mediante su propio vertexuffer.

Por los ejemplos que he visto en el sdk de 2010, la mecanica siempre es crear el vertexbuffer, seleccionarlo, y dibujarlo.
Lo que no se es si el pipeline de DirectX está diseñada para andar cambiando de vertexbuufer todo el rato.
Es ésta la manera de hacerlo?

Gracias

#19
XNA / Bibliotecas de juego y otras
27 de Febrero de 2012, 12:46:03 AM
 Buenas.

Estoy empezando con XNA y tengo un par de problemas en el desarrollo de juegos para XBOX360:
Si agrego alguna referencia a una biblioteca externa en un proyecto XBOX360Game, no me es posible importar los espacios de nombres de dicha biblioteca. Más aún, si la referencia es a una biblioteca de juego de XBOX360 que pertenece a la solución tampoco me deja.
Cual es el problema???
#20
Proyecto dx_lib32 / Motor3D y dx_lib32: El renacimiento
24 de Febrero de 2012, 09:29:23 AM
HOLA!!!
Hacía mucho tiempo que no me pasaba por aquí. No me gusta dar malas noticias XD.
Así que hoy, que tengo unas muy buenas, he decidido soltarlas cuanto antes:
Tras trastear durante mucho tiempo con los archivos de configuración de Visual Studio conseguí arreglar mi problema con dx_lib32. Así que ya la he integrado totalmente en la versión 2.0 de mi Motor3D. Aquí os dejo algunas capturas:

Test de renderizado sobre dx_lib32:


Test de colisión mediante octree:


Test de intersección recta-octree:


La versión 2.0 tiene las siguientes nuevas características:
- Reorganización completa de la biblioteca mediante una ordenada jerarquía de clases y espacios de nombres.
- Álgebra matricial y resolución de sistemas de ecuaciones.
- Objetos matemáticos para tratamiento de geometría en 2D y 3D, incluido cálculo de intersecciones, posiciones relativas distancias, etc.
- Camara3D y 2D para un cómodo tratamiento de la escena (Con proyección cónica, por fin, en el caso de la 3D), incluyendo frustum clipping, viewport clipping y backface culling.
- Características de material para el shader a nivel de polígono (En el caso de la primera versión, dichas características eran comunes a todos los objetos)
- Reorganización del cálculo de transformaciones, incluyendo rotación mediante cuaterniones (Adiós al gimbal lock!).
- Detección de colisiones mediante AABBs y octrees (beta XD).

Como es lógico, el motor gráfico y el render los desarrollo únicamente por entretenerme, pero las estructuras de datos y las herramientas de cálculo si que son de utilidad. Cualquiera que desee utilizar la librería es libre de hacerlo.

Espero que os guste!!!





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.