Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Opengl

Iniciado por saiko, 15 de Marzo de 2006, 05:16:39 PM

« anterior - próximo »

saiko

 estoy haciendo un proyecto de fin de carrera y he empezado hace poco con opengl. por ahora un problema con opengl, es el siguiente:

hago un suelo con una textura, me sale bien.
despues intento poner una esfera o algo de un color determinado, por ejemplo rojo, y lo que me hace es dibujarme la esfera roja y tambien la textura.
intento solucionarlo guardando matrices en la pila pero aun asi no me funciona bien.

void display()
{

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glPushMatrix();
camara.Update();
drawTerreno();
PushMatrix();
glColor3f(1.0,0.0, 0.0);
glTranslated(90.0, 13.0, -90.0);
glRotatef(Ang,0.0,1.0,0.0);
glScalef(10.0, 10.0, 10.0);
glutSolidSphere (1.0, 16, 16);
glPopMatrix();
glPopMatrix();

glutSwapBuffers();
glFlush();
}

drawTerreno() dibuja el suelo y encima quiero dibujar una esfera de color rojo sin que me dibuje el terreno de rojo. tal y como lo he puesto me lo dibuja todo rojo. he probado distintas maneras pero no acierto. como deberia ponerlo????
 

nsL

 Yo ni idea de esto, pero vamos... puede ser que al hacer glColor3f(1.0,0.0, 0.0);, aunq lo hagas despues de pintar el terreno, asignas a openGL el color de pintado rojo, y entonces la proxima vez que llames a display() pintara el terreno en rojo... (en resumidas cuentas, que asignar el color rojo despues de pintar el terreno solo te sirve la primera vez, luego siempre pintas en rojo a no ser q lo cambies..)

No se, son especulaciones, como ya te dije ni idea :P

Saludos!
Yo no muero hasta la muerte -

saiko

 ya he solucionado el problema.
al terreno le doy el color blanco y tambien activo y desactivo la textura antes de hacer la esfera.asi ya funciona

graciasssss

_Grey

 Hace muuuuchiiisiiimoooo que no toco OpenGL, ahora bien, si activas texturas es lógico que todo te lo pintara con esta ella mientras este activa.

Buceando por código que había hecho hace tiempo y tal ... desactivaras las texturas con glDisable(GL_TEXTURE_2D);, si usas texturas 2D, y GL_TEXTURE_1D para las unidimensionales. Esto debería bastar, supongo. Recuerda activarla para usarlas otra vez!

Saludos, ya nos contaras.

_Grey

 UPS! Se me adelanto!  :ph34r:  :P  

saiko

 gracias. se soluciona como dices.

ahora toca ponerle niebla, transparencias y cosas asi.


saiko

 buenas a todos!!!!

ahora voy a empezar con el juego 2d. tengo pensado hacer un juego como el arkanoid.
lo que me parece dificil de este juego aparte de todo,  , es el tema de controlar que la bola choque en la pared y rebote o choque con algun ladrillo este se destruya y rebote la bola.
aber si me podrias decis alguna manera para hacerlo, antes de ponerme a rebanarme los sesos  .

hasta luegoooo

n3k0

 Mira lo que comentan en este post, igual puede servirte de ayuda.

Arkanoid

Un saludo.

nsL

 
Citar
aber si me podrias decis alguna manera para hacerlo, antes de ponerme a rebanarme los sesos .
Yo creo q lo mejor es que primero q rebanes los sesos, y si no te sale te ayudamos. Es la mejor forma de aprender :D

Echa un ojo al post que te dice n3k0

Saludos!
Yo no muero hasta la muerte -

saiko

 gracias chicos!!!

el otro post por ahora no me sirve de mucho, ademas el link para bajarse el juego no me funciona asi que no puedo ver el codigo.

he estado rebanandome los sesos de como detectar las colisiones, pero no lo veo claro.
no se como hacer para saber en que sitio de que ladrillo a colisionado. (nooo)

n3k0

  En el link no estaba disponible el código, solo el ejecutable. Además comentaban que poner más de un punto de control a la bola ayuda bastante a detectar las colisiones. Si pones en la bola 2 puntos de control por lado como comentaba marcode te será más fácil saber como ha golpeado la bola el ladrillo y como tiene que rebotar.

saiko

 buenas!!!!

tengo un problema programando,aber si me podeis ayudar(programo en C++,OpenGL, GLUT):



void proba()
{
laukitxoak z;
Matrizea m[1][2];
float zutabe =0.0;
float lerro=35.0;
for (int i=0; i<2; i++)
{
 z.sortu(0, 35, 3, 35, 3, 38, 0, 38);
 m[0][i].sortu(z,true, 0.0, 0.0, 1.0);
 m[0][i].marraztu();
 z.sortu(-5, 35, -3, 35, -3, 38, -5, 38);
 m[0][i].sortu(z,true, 0.0, 0.0, 1.0);
 m[0][i].marraztu();
}


/*for (i=0; i<2; i++)
{
 m[0][i].marraztu();
}*/
}




tengo una clase laukitxoak donde asigno las coordenadas, solo x e y porque z es 0.asi crea una cara de un cuadrado.
la clase Matrizea tiene como parametros : laukitxoak, true(bool), y las coordenadas de los colores(3 floats).
la funcion sortu() le da a la clase los valores.
la funcion marraztu() dibuja el cuadrado en las coordenadas pasadas.
el problema es el siguiente:

puesto asi el codigo me dibuja los dos cuadrados, pero si pongo los primeros dos marraztu() como comentario y pongo el ultimo marraztu() normal, unicamente me dibuja el ultimo cuadrado.
creo que la matriz sobreescribe siempre la misma direccion de memoria por eso se dibujan unicamente las ultimas coordenadas, pero no se como arreglarlo.

siento aber escrito tanto, pero llevo bastante tiempo con este problema.

saiko

 ya esta solucionado el problema anterior.

Pogacha

 Menos mal, pues lo habia leido un par de veces y seguía sin entender.

saiko

 buenas!!!!
aqui estoy de nuevo con quebraderos de cabeza del arkanoid. primero quiero decir que es la primera cosa que hago en opengl y el primer juego, asi que puede que os parezca un poco corto, jeje.
he leido el post del andoroid, le esta quedando muy bien, pero hay cosas que no entiendo.
por ejemplo yo no uso el tiempo para multiplicar la posicion de la pelota. tengo puesta una funcion que dibuja la esfera cada 33 milisegundos.

bueno, aqui va mi problema:
ya tengo dibujado el arkanoid, por ahora sin texturas, solo colorines. he implementado las clases, paredes, pelota, ladrillos,...
ahora la duda me viene con el rebote de la pelota dichosa.
he pensado en hacerlo de esta manera:

en la siguiente posicion de la esfera, calculo la distancia del borde del ladrillo con el centro de la esfera, si es menor que el radio de la esfera habra colision. pero no se como calcular el angulo de rebote. todavia no lo he implementado ya que puede que alguien me diga un metodo mas facil y provechoso.
para la pala me parece muy bueno el metodo que comentan en el post del andoroid.






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.