cómo se hacen las rejas 3D en glut y opengl

Iniciado por ahigor, 17 Marzo 2017, 12:44 PM

0 Miembros y 1 Visitante están viendo este tema.

ivancea96

Puedes hacer lo que quieras, pero ve por partes. No empieces haciendo un juego; un juego requiere más que solo gráficos.

Te diría que hagas un tutorial de OpenGL, como es: http://www.opengl-tutorial.org/es/
El OpenGL moderno es más complicado que el antiguo (Ese que utiliza glbegin, glvertex, glEnd, etc... para dibujar). Por esa razón, poco a poco.

integeroverflow

para hacer un juego estilo age of empires podes utilizar la libreria allegro o la libreria SDL. te vas a ahorrar un monton de trabajo, y va a ser mucho mas simple el manejo de graficos, entonces te podes centrar en programar el motor isometrico.

tambien deberas investigar sobre el dibujado de tiles isometricas, que es la forma en la que se dibujan los mapas en AOE, y algoritmos de pathfinding para que los personajes encuentren la ruta a su destino, como pueden ser el A*, depth first, breadth first, etc...

una vez que tengas una base funcional, recien ahi debes meterte a programar la logica del juego, la IA, etc..

ahigor

Muchas gracias a los dos de verdad me quedo con la biblioteca y los nuevos conceptos y tenéis razón quiero ir muy rápido y todavía no se nada

ahigor

una pregunta como se cargan texturas en opengl quiero pintar hierva en mi proyecto
mi codigo es este:
                        #include<GL/glut.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <iostream>

#include <gl/glaux.h>

#include <GL/glut.h>

float tamanno = 1.0f;
int up, down;
int alto, ancho;

void IniciarGLUT() {
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  glutInitWindowSize(600,600);
  glutInitWindowPosition(100,100);
  glutCreateWindow("Practica III,1 de OpenGL");
}






void PintarEscena() {
   glMatrixMode(GL_MODELVIEW);
   glClear(GL_COLOR_BUFFER_BIT);
   glLoadIdentity();


    glFlush();

glBegin (GL_LINES);
glVertex2i(-8,6);
glVertex2i(8,6);

glVertex2i(-8,5);
glVertex2i(8,5);

glVertex2i(-8,4);
glVertex2i(8,4);

glVertex2i(-8,3);
glVertex2i(8,3);

glVertex2i(-8,2);
glVertex2i(8,2);

glVertex2i(-8,1);
glVertex2i(8,1);


glVertex2i(-8,0);
glVertex2i(8,0);

glVertex2i(-8,-1);
glVertex2i(8,-1);

glVertex2i(-8,-2);
glVertex2i(8,-2);

glVertex2i(-8,-3);
glVertex2i(8,-3);

glVertex2i(-8,-4);
glVertex2i(8,-4);

glVertex2i(-8,-5);
glVertex2i(8,-5);

glVertex2i(-8,-6);
glVertex2i(8,-6);

glVertex2i(-8,6);
glVertex2i(-8,-6);

glVertex2i(-7,6);
glVertex2i(-7,-6);

glVertex2i(-6,6);
glVertex2i(-6,-6);

glVertex2i(-5,6);
glVertex2i(-5,-6);

glVertex2i(-4,6);
glVertex2i(-4,-6);

glVertex2i(-3,6);
glVertex2i(-3,-6);

glVertex2i(-2,6);
glVertex2i(-2,-6);

glVertex2i(-1,6);
glVertex2i(-1,-6);

glVertex2i(0,6);
glVertex2i(0,-6);

glVertex2i(1,6);
glVertex2i(1,-6);

glVertex2i(2,6);
glVertex2i(2,-6);

glVertex2i(3,6);
glVertex2i(3,-6);

glVertex2i(4,6);
glVertex2i(4,-6);

glVertex2i(5,6);
glVertex2i(5,-6);

glVertex2i(6,6);
glVertex2i(6,-6);

glVertex2i(7,6);
glVertex2i(7,-6);

glVertex2i(8,6);
glVertex2i(8,-6);


   glEnd();

   glutSwapBuffers();
}

void ReProyectar(int w, int h) {
   ancho = w;
   alto = h;
   GLfloat formato;

   if(h == 0) h = 1;

    glViewport(0, 0, w, h);

   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();

   formato = (GLfloat)w / (GLfloat)h;
    if (w <= h) glOrtho (-10.0f*tamanno, 10.0f*tamanno, -10.0f*tamanno / formato, 10.0f*tamanno / formato, 1.0f, -1.0f);
    else glOrtho (-10.0f*tamanno * formato, 10.0f*tamanno * formato, -10.0f*tamanno, 10.0f*tamanno, 1.0f, -1.0f);
}

void Zoom(int value) {
   if (up) tamanno = tamanno * 1.01f;
   if (down) tamanno = tamanno / 1.01f;

   ReProyectar(ancho,alto);
    glutTimerFunc(33,Zoom,1);
    glutPostRedisplay();
}

void Flechas(int key, int x, int y) {
   if (key==GLUT_KEY_UP) up = 1;
   if (key==GLUT_KEY_DOWN) down = 1;
}

void FlechasUp(int key, int x, int y) {
   if (key==GLUT_KEY_UP) up = 0;
   if (key==GLUT_KEY_DOWN) down = 0;
}

int main(int argc, char **argv)
{
   glutInit(&argc,argv); //Solo necesario en Linux
  IniciarGLUT();

  glutReshapeFunc(ReProyectar);
  glutDisplayFunc(PintarEscena);
  glutTimerFunc(33,Zoom,1);
  glutSpecialFunc(Flechas);
  glutSpecialUpFunc(FlechasUp);

  glutMainLoop();
    return 0;
}

ivancea96

En primer lugar, trata de no poner varios includes iguales.
Luego, trata de poner los glvertex con un for en vez de ponerlos todos seguidos.

Sobre texturas, es un pelín más coñazo. YO te recomendaría dejarlo para un poco más adelante, y acostumrbarte primero a OpenGL (puedes hasta simular hierba con triangulitos de diversas variedades de verde). Realmente no son <necesarias> las texturas al principio, y lían de más, sobre todo si el proyecto no está bien organizado.

Ahora bien, si quieres proseguir con texturas, pues bueno. Yo te diría que busques por Google, que algo encontrarás (Hace mucho que no utilizo OpenGL antiguo para cargar texturas).

ahigor

Muchas gracias por los consejos eres un crack

ahigor

Y cómo se pinta en OpenGL jajajaja no tengo ni idea de nada :rolleyes:

ivancea96

Cita de: ahigor en 18 Marzo 2017, 15:34 PM
Y cómo se pinta en OpenGL jajajaja no tengo ni idea de nada :rolleyes:

Pero si ya hiciste el programa de arriba ._.

En cualquier caso, por el foro obtendrás buenas respuestas a buenas preguntas (concretas). Para aprender OpenGL, e mejor que busques un tutorial por internet. Si tienes preguntas concretas, desde luego, sé libre de ponerlas.

ahigor

Me refería a pintar la rejilla completamente de verde o de otro color jeje vamos lo que es pintar por completo la reja

ivancea96

Prueba a utilizar GL_TRIANGLES (Como intuirás, cada 3 vértices, dibujará un triángulo).
Luego, para poner colores, glColor3ub(r, g, b), donde cada parámetro va de 0 a 255. También tienes glColor3f(r, g, b), donde recibe floats, y cada color va de 0.0 a 1.0 (Utiliza lo que más te interese).

Si quieres que la cuadricula tenga un fondo verde, entonces puedes dibujar por detrás 2 triangulos (para formar un cuadrado), y luego la cuadricula (no olvides cambiar el color).

Para todas las modalidades de dibujado que tiene glBegin: https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glBegin.xml.
Tienes tambien GL_QUADS, GL_POLYGON, etc. Lo que más te interese.