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

#1
Nada, he intentado de todo y no hay manera, dejaré el juego sin luces.
Ya para la siguiente versión, si la hago, usaré shaders.

Gracias por todo.
#2
Cita de: tamat en 09 de Noviembre de 2009, 10:19:18 PM
la luz especular es una luz que se ve afectada por la posicion de la camara, prueba a desactivarla y ver si sucede lo mismo.
Por otra parte, no entiendo muy bien esa matriz modelview que usas, pero supongo que eso lo tienes bien.


Hola tamat, gracias por tu ayuda. He dejado solo la luz lightAmbient y sigue pasando.


En mi motor cambio la modelview matrix para cada objeto 3D:


//---Generate rotate matrix for OpenGl.
//---Final matrix is CamMatrix *ObjectMatrix
float mat[4*4]={ FinalMatrix->iM[0], FinalMatrix->iM[4], -FinalMatrix->iM[ 8], 0,
FinalMatrix->iM[1], FinalMatrix->iM[5], -FinalMatrix->iM[ 9], 0,
FinalMatrix->iM[2], FinalMatrix->iM[6], -FinalMatrix->iM[10], 0,
FinalMatrix->iM[3], FinalMatrix->iM[7], -FinalMatrix->iM[11], 1 };

glLoadMatrixf( mat );

.
.
.

glDrawElements( GL_TRIANGLES, iGlTriCount, GL_UNSIGNED_SHORT, iGlTris );



No le digo a opengl cual es la matriz de cámara, solo uso la matriz de camara para generar FinalMatrix.
No uso glLookAt, no está disponible en el iphone.

Lo que es el motor 3D, funcionar funciona: www.mobilegamespro.com/defendlondon  ahora le estoy pasando al iphone.


#3
Programación gráfica / Iluminación depende de angulo de cámara
09 de Noviembre de 2009, 05:08:14 PM
Hola, tengo un problema con la iluminación en OpenGL, al girar la cámara cambia la iluminación de toda la escena.
La luz es direccional: incide con el mismo ángulo para todos los objetos, como si fuera el sol.




const GLfloat lightAmbient[] = {0.2, 0.2, 0.2, 1.0};
const GLfloat lightDiffuse[] = {1.0, 0.6, 0.0, 1.0};
const GLfloat matAmbient[] = {0.6, 0.6, 0.6, 1.0};
const GLfloat matDiffuse[] = {1.0, 1.0, 1.0, 1.0};
const GLfloat matSpecular[] = {1.0, 1.0, 1.0, 1.0};
const GLfloat lightPosition[] = {0.0, 0.0, 1.0, 0.0};
const GLfloat lightShininess = 100.0;

glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matAmbient);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matDiffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matSpecular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, lightShininess);
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse);
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);



El problema es que al girar la cámara va cambiando la iluminación de todo, inexplicablemente.
He probado a decirle la posición a cada frame tras indicarle a opengl cual es la matriz de la cámara, pero sigue pasando:


glMatrixMode(GL_MODELVIEW);


//float mat[4*4]={ -CamMatrix->iM[0],  -CamMatrix->iM[1], -CamMatrix->iM[2], -CamMatrix->iM[3],
//     -CamMatrix->iM[4],  -CamMatrix->iM[5], -CamMatrix->iM[6], -CamMatrix->iM[7],
//       CamMatrix->iM[8],  CamMatrix->iM[9], CamMatrix->iM[10], CamMatrix->iM[11],
//                           0, 0, 0, -1  };


float mat[4*4]={ CamMatrix->iM[0], CamMatrix->iM[4], -CamMatrix->iM[ 8], 0,
CamMatrix->iM[1], CamMatrix->iM[5], -CamMatrix->iM[ 9], 0,
CamMatrix->iM[2], CamMatrix->iM[6], -CamMatrix->iM[10], 0,
                         CamMatrix->iM[3], CamMatrix->iM[7], -CamMatrix->iM[11], 1  };


glLoadMatrixf( mat );
glPushMatrix();

//glLoadIdentity(); glPushMatrix();
float lightPosition[] = {0.0f, 2.0f, 1.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);


Muchas gracias por vuestra atención.
#4
JEJE CONSEGUIDO, menos mal porque me estaba amargando.

Gracias a todos   ;-)
#5
He implementado la función gluProject, y obtengo las matrices que necesita con:
glGetFloatv (GL_MODELVIEW_MATRIX, mModel);
glGetFloatv (GL_PROJECTION_MATRIX, pModel);

Pero no me dá el resultado esperado.
Creo que no se donde tengo que coger la matriz modelview:

¿Tengo que cogerla una vez dibujados todos los objetos 3D?

¿Tengo que cogerla justo despues de crearse la modelview para el objeto 3D que me interesa saber sus coordenadas en pantalla?

¿O tengo que crear la modelview solo con la matriz de rotación y traslación de la cámara? Esto lo digo porque como a gluProject le paso las coordenadas 3D del objeto 3D, no tiene sentido que la matriz modelview fuese creada con la posición de ese objeto 3D + la posición y giro de la cámara, pues le estaría pasando a gluProject dos veces la posicion del objeto 3D.

En fin que estoy atascado, muchas gracias por vuestra ayuda, espero que este hilo le sirva también a más gente. Saludos.
#6
Muchas gracias por las respuestas.

Veo que necesito la matriz de perspectiva, la de modelado y la de proyección.

Para obtenerlas he usado

glGetIntegerv (GL_MODELVIEW_MATRIX, mModel);
glGetIntegerv (GL_PROJECTION_MATRIX, pModel);

Pero veo que estas matrices son ceros y unos, no creo que tengan información de la cámara...

Por cierto no son 3 matrices? La de perspectiva no se como se llama.

Muchas gracias de nuevo, sois los mejores,
estoy tratando de hacer un juego en symbian con opengl, hasta ahora solo he hecho cosas en 2D, podeis ver mis juegos en www.mobilegamespro.com no se venden nada pero me gusta hacerlos jeje
#7
Buenas, estoy tratando de obtener las coordenadas en pantalla de un objeto 3D en Opengl ES.

En OpenGL normal he visto que se puede usar gluProject, pero desafortunadamente en Opengl ES 1.0 no está disponible.

Alguien tiene idea de cómo podría ser?
Sería algo asi como aplicarle la matriz de rotación de la cámara al objeto y luego multiplicar por la matriz de proyección?

Muchas gracias por anticipado
Saludos
#8
Ha funcionado lo de multiplicar la matriz de rotación por 1,0,0. Ya habia probado algo parecido y no me salia bien, pero gracias a tu comentario me ha animado a seguir probando en esa dirección y al final ha salido :)

Muchas gracias Tamat.
#9
Estoy intentando mover un avion en un espacio 3D con openGL, gracias a los  Quaterniones he conseguido rotar el avión a lo largo de sus 3 propios ejes, o sea, pitch, roll y yaw. Esto lo hace muy bien, me hizo mucha ilusión verlo girar perfectamente, porque hace años estuve intentandolo con Darkbasic y no habia manera.

Sin embargo llevo varios dias intentando conseguir simplemente mover el avion hacia delante (en el angulo que se ve que apunta), y no hay manera, se mueve para donde le da la gana. Estoy desesperado, a ver si me podeis ayudar, os estaría muy agradecido.

Saludos y muchas gracias por anticipado.





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.