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 - davidgf

#1
Programación gráfica / Proyectar vértice OpenGL
12 de Noviembre de 2009, 10:13:36 PM
Hola de nuevo a todos!

Tengo un problema con proyectar un vertice en una coordenada 2D. La solución es:

   GLdouble modelMatrix[16];
   GLdouble projMatrix[16];
   GLint viewport[4];
   GLdouble ox,oy,oz;

   glGetDoublev(GL_MATRIX_MODE, modelMatrix);
   glGetDoublev(GL_PROJECTION_MATRIX, projMatrix);
   glGetIntegerv(GL_VIEWPORT, viewport);
   
   gluProject (vec3d.x,vec3d.y,vec3d.z,modelMatrix,projMatrix,viewport,&ox,&oy,&oz);

donde ox y oy estan entre {-0,5 , 0,5 }. Pero el programa me saca coordenadas mayores o menores de 0.5 aun estando el punto en pantalla o +/- inf.

Porque sucede esto?

Gracias

David
#2
General Programadores / Colision de cámara
18 de Julio de 2009, 02:23:58 PM
Buenas!

Tengo unas dudas que quería comentaros.
Cómo hago una cámara que no colisione con el mundo.
Siempre lo había hecho usando un rayo para calcular el punto necesario, pero ahora uso ODE para todo el mundo y simular los moviminetos de los vehiculos, así que quería modelar la cámara como una esfera...
Cómo debería hacerlo? Cuando quiero cambiar la posición de la cámara no puedo hacerlo "a saco", tengo que aplicar una fuerza o una velocidad, y ahi la cosa se complica...

Alguien tiene alguna sugerencia/truco??

Muchas gracias!

David
#3
General Programadores / Exportar física
31 de Mayo de 2009, 12:51:45 PM
Hola a todos!

Sé que esto es un tema más de modelado que de disenño, pero yo siempre pienso en resolver las cosas programando, que es lo que sé...
Mi objetivo es modelar objetos i asignarles un modelo fisico hecho de cajas, esferas y cilindros.
Cómo puedo exportar esas cajas de colision que dibujo en 3ds max???
Había pensado en que si son cajas alineadas con los ejes podia simplemente hacer un pequeño algoritmo que me calculara las dimensiones de la caja i la posición.
Pero si quiero hacerlo con qualquier caja necesito además calcular la rotación del elemento, cosa que para mí no es trivial.

Alguna idea o programa que me ayude en esto? Mejor si es Open Source! Es para un pequeño proyecto de PSP.

Saludos y gracias a todos!!
#4
Programación gráfica / Transparencias y sombras
04 de Febrero de 2009, 03:59:10 PM
Buenas!

Alguien me da ideas de cómo usar stencil shadows a la vez que crear vegetación decente?? No se me ocurre cómo lo puedo hacer...
Alguna idea? He buscado cómo lo hacen los juegos comerciales y tal, pero parece que la evitan simplemente.

Gracias!
#5
Programación gráfica / Pregunta rápida sobre Shaders
28 de Enero de 2009, 01:21:05 AM
Una preguntilla muy rápida, que no he sabido encontrar en la especificación de arb_vertex_program (http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_program.txt).

Si uso por ejemplo la normal en un shader y en el código no lo he especificado (por ejemplo usando glInterleaved con T2F_V3F) cuál es su valor??
Lo digo por que en el shader de iluminación uso la normal, pero hay una clase cuyos vertices no tienen normal i lo mando todo a renderizar con el mismo shader. Parece que la iluminación de esos objetos se computa bien, aunque sólo el cálculo de distancia. Así que no llego a ninguna conclusion sobre el valor por defecto de la normal.

Qué me decís?

Saludos y gracias!
#6
General Programadores / Algunas preguntas de threads
22 de Noviembre de 2008, 08:09:14 PM
Hola gente.

Tenía algunas preguntas de threads.

- Si varios threads acceden para escribir a un mismo array pero en posiciones diferentes pasa algo? Explotará mi código?
- Y para leer? Si leo puedo leer la misma posición des de varios hilos?
- Si simplemente quiero hacer cosas simples, del tipo distribuir la faena en varios threads para hacerla más rapido, me recomendais SDL? Sólo usaria algun que otro semáforo para escribir datos compartidos entre threads.

Mi objetivo era tener un array donde ir escribiendo el resultado de un algoritmo. Se haria por bloques. Cada hilo calcularia una serie de datos leidas de un vector comun a todos los hilos y lo escribiría en un bloque de posiciones del array, previamente con un semaforo en una variable que apunte al inicio del espacio libre del array me reservaria el espacio necesario.

Qué pensáis? Soy rebuscado o qué?

Gracias!

David
#7
Programación gráfica / Fragment Program (Lighting)
18 de Septiembre de 2008, 04:17:41 PM
Hola a todos,

And liado haciendo un shader de los "viejos", los ARB_fragment_program.
Quisiera que fuera pixel lighting en vez de per vertex, ya que en mi mundo 3d hay polígonos enormes que me da palo cortar además de que es poco práctico.
De momento el shader debería hacer atenuación por distancia:


!!ARBfp1.0



# Fragment inputs

ATTRIB inTexCoord = fragment.texcoord[0];      # First set of texture coordinates

ATTRIB inColor    = fragment.color.primary; # Diffuse interpolated color
ATTRIB inPosition    = fragment.position; # 2D position on screen

# Fragment outputs

OUTPUT outColor   = result.color;
TEMP texelColor;
TEMP RealPos;
TEMP LightVec1;
TEMP Temp;

MOV RealPos, inPosition;
MOV Temp.x, 0.0025;
MOV Temp.y, 0.003333333;
MAD RealPos.x, inPosition.x, Temp.x, -1;
MAD RealPos.y, inPosition.y, Temp.y, -1;
ADD RealPos.z, inPosition.z, -1;
MOV RealPos.w , 1;


DP4 RealPos.x, state.matrix.mvp.inverse.row[0], RealPos;

DP4 RealPos.y, state.matrix.mvp.inverse.row[1], RealPos;

DP4 RealPos.z, state.matrix.mvp.inverse.row[2], RealPos;

DP4 RealPos.w, state.matrix.mvp.inverse.row[3], RealPos;
RCP RealPos.w,RealPos.w;
MUL RealPos, RealPos, RealPos.w;


ADD LightVec1, program.local[1], -RealPos;
DP3 LightVec1.w, LightVec1, LightVec1;
RSQ LightVec1.w, LightVec1.w;
RCP Temp.w, LightVec1.w;  # Temp.w its the distance 
#MUL LightVec1, LightVec1, LightVec1.w; # LightVec1 is normalized

MUL Temp.x, Temp.w, program.local[3].x;
MUL Temp.x, Temp.w, 0;
MUL Temp.y, Temp.w, Temp.w;
#MAD Temp.x, program.local[3].y, Temp.y, Temp.x;
MAD Temp.x, 0.0000002, Temp.y, Temp.x;
RCP Temp.x, Temp.x;
MIN Temp.x, Temp.x, 1;


TXP texelColor, inTexCoord, texture, 2D;
MUL texelColor,texelColor, Temp.x;

MOV outColor, texelColor;




END


Lo que hago es leer la position en la pantalla del fragmento i la transformo al espacio de world basandome en la implementacion de la funcion gluUnProject. Pero no funciona nada bien. Además en algun momento que el shader había funcionado bien, sólo lo hacía un fotograma, luego se volvia negro todo.

En fin, alguna sugerencia? Hacerlo de una manera diferente??

Gracias a todos

David
#8
Programación gráfica / Cal3D y la STL
23 de Agosto de 2008, 04:56:24 PM
Hola de nuevo chicos,

La duda que os expongo es muy básica, pero es que me ha dejado pasmado.
Estaba revisando la implementación de Cal3D para optimizar el render de mis personajes, concretamente las funciones getVertices, getFaces, etc. A éstas les paso un puntero con un espacio de memoria suficiente para que ellas me copien los vertices, los indices, coords de textura, etc...
Pero al ver como estan implementadas me surge una duda.

...
std::vector<CalVector>& vectorVertex = m_pSelectedSubmesh->getVectorVertex();

    // get the number of vertices in the submesh
    int vertexCount;
    vertexCount = m_pSelectedSubmesh->getVertexCount();
    // copy the internal vertex data to the provided vertex buffer
   if(stride == sizeof(CalVector) || stride <= 0)
   {
      memcpy(pVertexBuffer, &vectorVertex[0], vertexCount * sizeof(CalVector));
   }
...


Como véis internamente tiene un vector de CalVector. CalVector es una clase. Y lo unico que hace es un memcpy del vector al buffer que le paso yo (pVertexBuffer). Eso está bien hecho? Entiendo como bien hecho que sea 100% legal, no que funciona y ya está. Yo tenía entendido que un vector internamente podía estar implementado como le dé la gana y que no tenía por qué estar toda la información agrupada. Además CalVector es una clase. Sólo contiene float x,y,x pero si hubiera algun campo más esto dejaría de funcionar no?? Además el gcc podría añadir espacio adicional a una clase (yo que se, que ocupara mucho más que 3 simples floats).

Estos de Cal3D son mu listos!!!

Gracias!

David
#9
Programación gráfica / Stencil Buffer
19 de Agosto de 2008, 03:01:48 PM
Hola chicos! Sigo aqui dando guerra con el 3D.

Tengo una pregunta sobre OpenGL: Cómo saber si el buffer Stencil está soportado. Según  he visto eso depende sólo de la versión de OGL, que debe ser superior a 1.1. Pero es eso totalmente cierto? Pues vengo del D3D y allí había muchisimos CAPS dónde averiguar si algo estaba soportado y segun recuerdo iba un poco a lo loco.

Estoy programando con Linux y me da la impresión que la implementación de OpenGL de mi driver hace más cosas que el DX, cosa que me sorprende porque debería ser al revés, o no?

Por cierto uso GLEW para checkear las caracteristicas del GL y adaptar el render o las caracteristicas gráficas a la targeta.

Gracias!

David
#10
Hola strateros!

Tengo una pregunta un poco chunga. Espero que me podáis ayudar.

Estoy liao con el KGL (OpenGL para la Dreamcast) y resulta que la consola usa un depth buffer muy raro (RHW he leido?) y la implementación de GL no soporta alpha testing.

Se os ocurre como representar vegetación? Sí que funciona el blending y con todas sus opciones (de SRC y DST). A ver si tenéis una ayuda buena para un pobre.

La solución debería ser "barata" (sólo 200MHz y T&L).

Muchas gracias por adelantado!!!

David
#11
Programación gráfica / Qué pasa con ATI y sus drivers?
16 de Diciembre de 2007, 01:57:10 PM
Pues eso, qué pasa últimamente (desde hace bastante ya) con los drivers de ATI?

Tengo varios PCs con ATIs y el soporte y los drivers me asquean. Me ha pasado de todo porculpa delos drivers: Problemas de velocidad (con decir que el game iba a 1fps y pasó a 60fps) y de instalación de Catalyst, que no hay manera el probrecillo.

Esto lleva pasando mucho? En NVIDIA pasa también? Me gustaría que algunos expertos en la materia comentaran sus experciencias... Estoy hasta las narices de lidiar con drivers de ATI!

Gracias y saludos!
#12
General Programadores / #include y #ifndef
21 de Noviembre de 2007, 09:29:58 PM
Hola! Otra vez voi a dar guerra...

Pues mi marea sucia, guarra i tocina de programar (acostumbrado al VB) me a tocado las narices con los includes... i para evitar que se me includeen inifinitas veces le pongo a todos los headers un #ifndef #endif

Pero funciona con todos menos con uno... vaiaaa... Vosotros que le dais al c++ de verdad sabreis decir donde meto la pata:

cMusicEngine.cpp (clase que manda)


#include "cStreamOGG.h"
#include <dsound.h>
[...]


cStreamOGG.h (la clase que hace el trabajo sucio)


#ifndef CSTREAMOGG_H_INCLUDED
#define CSTREAMOGG_H_INCLUDED

#include "auxiliar.h"
#include "vorbis/codec.h"
#include "vorbis/vorbisfile.h"

#ifndef STREAMOGG_DEFINED
const int STREAMOGG_BUFFER_SIZE = 4096;

class cStreamOGG {
public:
[...] la clase continua


i en el codigo del cMusicEngine.cpp me dice que no encuentra la clase cStreamOGG, cuando uso un include bien grande hacia ella ademas de ponerle una proteccion para que no se incluya varias veces (porque hay muchos archivos que tienen muchos includes cruzados)

Alguna ayudita para un pobre ??? xD

Gracias!
#13
General Programadores / Problema con ov_fopen (Vorbis)
20 de Noviembre de 2007, 04:08:08 PM
Hola!

Me paso por aquí de nuevo para pedir un poco de ayuda...

Tengo este error:

error LNK2019: unresolved external symbol _ov_fopen

Las demás funciones de vorbis las coge sin problemas... Antes usava ov_open pero no va bien en windows y me saltaban errores... I esta aun estando definida en el .h no la coge.

Tengo las siguientes cosillas: libvorbis.dll, libvorbisfile.dll asi como libvorbis.lib ogg_static.lib libvorbisfile.lib. Uso VS 2005.

Parece que lo demás va de maravilla (aunque no lo he probado porque no puedo cargar un misero sonido)

Gracias a todos!
#14
Programación de audio / DirectSound en general...
02 de Noviembre de 2007, 05:36:03 PM
Hola!

Dos dudas:

- Como wevos enumero los dispositivos de DirectSound en C++ usando DX9 sin usar el procedimiento ese tan extraño de la SDK (es como si hiciera un evento o función) o si no se puede... explicadme qué hace porque no lo pillo

- Pasando mi pequeño juego de VB6 (DX8) a C++ (DX9) me he topado con toda la movida del DirectSound i el XAct o como se diga.
Qué pasa con DS? Lo van a borrar? Con cuál se van a quedar? Tambien he visto no se que libreria de Sonido en fase beta. Qué hago? La gracia seria que el juego fuera compatible con Windows (los que se puedan) y que dentro de un año no capen alguna librería y me deje de funcionar.

Gracias!
#15
General Programadores / Errores inicializando Cal3D
05 de Octubre de 2007, 08:28:25 AM
Primero de todo... no se si escribir aquí o en el subforo de programación gráfica... si eso que algun admin lo mueva.. a vuestro gusto.

Vale, al tema:

Resulta que la maldita Cal3D (la libreria esa de animaciones esqueletales) solo funciona bajo VS6. SI la uso bajo VS 2005 en el constructor salta un std::bad_alloc. Mi línea es esta:


coremodel = new CalCoreModel("tarracomodel");


i el error salta


static _Elem *__CLRCALL_OR_CDECL _Copy_s(_Elem *_First1, size_t _Size_in_bytes, const _Elem *_First2,
size_t _Count)
{ // copy [_First1, _First1 + _Count) to [_First2, ...)
// _DEBUG_POINTER(_First1);
// _DEBUG_POINTER(_First2);
_CRT_SECURE_MEMCPY(_First1, _Size_in_bytes, _First2, _Count);
return _First1;
}


en esta funcion de "iosfwd". He buscao por google problemas similares i nada... poca gente usa cal3d ya...

Alguien tiene idea de porqué pasa? Qualquier ayuda es bienvenida!

Muchas gracias!

PD:Leí que tenía que compilar Cal3D usando el 2005 en vez del 6 por eso de compatibilidades... pero salta lo mismo...
#16
General Programadores / DirectInput buffered
27 de Septiembre de 2007, 09:01:09 PM
Hola otra vez (hartos de mi?? xD)

Otro problema más. Este más dificil.

Uso DirectInput buffered para el Mouse y va bien hasta que se llena el buffer. Entonces el GetDeviceData ya no devuelve más elementos.

Debo borrar el buffer? Indicarle que ya no quiero los datos leídos? Como lo hago. La docu no dice nada de eso. Dice que se borra solo predeterminadamente.

Alguna ayudita??

Muchas gracias a todos
#17
General Programadores / Problema de punteros, strutcs y arrays
27 de Septiembre de 2007, 01:56:22 PM
Hola,

ya estoy aqui de nuevo para molestaros. El caso es que me ocurre una cosa que no e visto nunca en ningun lugar y nunca antes me habñia ocurrido. Es muy curiosa:

Tengo una struct y un puntero global de ese tipo: arrayButtons


numButtons ++;
if (numButtons == 1) {
arrayButtons = new myButton[1];
}else{
myButton *arrayButtonsTemp;
arrayButtonsTemp=arrayButtons;
arrayButtons = new myButton[numButtons];
CopyMemory(&arrayButtons[0],&arrayButtonsTemp[0], sizeof(myButton)*(numButtons-1));

delete [] arrayButtonsTemp;
}
arrayButtons[numButtons-1].orX = x;
arrayButtons[numButtons-1].orY = y;


Este codigo añade un Boton a la matriz creando memoria, copiando y borrando la vieja (pequeña). I lo que me ocurre es que justo después de ejecutar el delete, un campo de la estructura (solo uno) se modifica:


typedef struct myButton {
float orX,orY;
float orWidth, orHeight;
float x,y;
float width, height;

std::string texture,texturehover;  // este es
std::string b_name;
bool isover;
} myButton;


El texturehover pasa de valer "loquesea.tga" a unos caracteres muy raros. Eso no psa con ninguna otra variable.

El watch chivato me dice que el delete se carga el texturehover

Alguna idea de porque? Esto de la memoria me vuelve loco. He leido el post sobre memroy leak pero no se que utilidad me podria ayudar (uso VS 2005)

Gracias por adelantado!

A por cierto si uso delete sin el [] no va (salta un error) es normal? Hago bien usando los  [] verdad??

EDITO: Al añadir un 3r boton salta un error. Toco memoria que no debo. Deberia usar un puntero a string?? es el string (que tiene tamaño variable) el causante de mis males??
#18
General Programadores / Debuggear
26 de Septiembre de 2007, 10:27:53 PM
Hola!

Cómo lo hacéis vosotros para debuggear?

Si pongo un break point el Device de DX9 se me cuelga todo. En cambio en el VB6 puedo minimizar la ventana de aplicación pero en C++ no.

Uso el VS 2005. Alguna sugerencia??

Gracias!!
#19
Hola! Sigo dando guerra. Esta vez con más problemas

El problema es: quiero aplicar el filtro D3DTEXF_GAUSSIANCUBIC a los lightmaps. Lo hago sin ningun problema pero al intentarlo en el portatil (que no tiene soporte para este filtro) como es logico no va.

En este caso aplico el Anisotropico y uso los caps para detectar esta situación:

If caps.TextureFilterCaps And D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC = D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC Then
   Device.SetTextureStageState 1, D3DTSS_MAGFILTER, D3DTEXF_GAUSSIANCUBIC
Else
   Device.SetTextureStageState 1, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC
End If


Pero sorprendentemente el maldito DX8 me dice que si que está disponible este filtro, cuando yo sé que no (y además se comprueba viendo como me pixela los lightmaps)

Alguien sabe si uso mal los CAPS? Que carajo me pasa?

Gracias por adelantado
#20
Programación gráfica / La luz ambiental
26 de Agosto de 2007, 02:08:05 PM
Hola!

Pues bien, aunque soy nuevo en este foro, hace años que os sigo y ahora por primera vez me he queado "pillao" y busco vuestra ayuda ;).

Mi problema es: dibujo una mesh con XYZ + TEX1 (DirectX)
He leído que si no especifico normales nada de lighting. Pero sí de ambient.
Y modificio el ambient y no hay manera que se vea afectado.

He encotrado un ejemplo donde veo que funciona perfectamente, pero en mi proyecto no (claro que es un juego y tiene miles de cambios de State)

Qualquier ayuda es valiosa!

Gracias!

David





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.