ayuda con programacion en GL

Imagen de peche
0 puntos

Por favor necesito ayuda con mis practicas en GL, tengo Ubuntu 6.10 en el cual con una instalacion limpia instale los driver propietarios de Nvidia y Beryl lo comento por que tengo entendido que estos ocupan GL y mesa. Despues instale el  juego GNUbik el cual me dijieron traia el mesa, ya que el Mesa-6.5.2 me marca error:

 gcc -c -I../../../include -I/usr/X11R6/include -Wall -Wmissing-prototypes -O3 -g -fPIC  -m32 -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -D_GNU_SOURCE -DPTHREADS -DUSE_XSHM -DHAVE_POSIX_MEMALIGN -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM -I/usr/X11R6/include -std=c99 -ffast-math  -fexceptions glut_cmap.c
glut_cmap.c:23:66: error: X11/Xmu/StdCmap.h: No existe el fichero ó directorio
glut_cmap.c: In function ‘__glutSetupColormap’:
glut_cmap.c:230: warning: implicit declaration of function ‘XmuLookupStandardColormap’
make[3]: *** [glut_cmap.o] Error 1

Bueno para compilar el clasico ejemplo de la tetara no hay nimgun problema, el problema es cuando lo ejecuto ya que me marca el siguiente error:

    # root@peches:/home/peche/Desktop/3d/c# ./tetera
    # Fallo de segmentación (core dumped) 

les pongo el ejemplo de la tetera que compilo:

// Ejemplo de programacion con OpenGL. Autor David Santo Orcero. 
 
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
 
GLfloat luzdifusa[] = {1, 1, 1, 1};
GLfloat posicionLuz[] = {500, 100, 0, 1};
 
void dibuja_tetera(void)
{
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(-100.0, 100.0, -100.0, 100.0, -100.0, 100.0);
  glMatrixMode(GL_MODELVIEW);
 
  glClearColor(0, 0, 0, 1);
  glClear(GL_COLOR_BUFFER_BIT);
 
  glEnable(GL_LIGHTING);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, luzdifusa);
  glLightfv(GL_LIGHT0, GL_POSITION, posicionLuz);
  glEnable(GL_LIGHT0);
 
  glEnable(GL_COLOR_MATERIAL);
  glColor3f(1, 0, 0);
 
  glutSolidTeapot(50);
  glFlush();
}
 
int main (char **argv, int *argc)
{
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
  glutInitWindowPosition(20,20);
  glutInitWindowSize(500,500);
  glutCreateWindow(argv[0]);
  glutDisplayFunc(dibuja_tetera);
  glutMainLoop();
  return 0;
}

Imagen de slap
+1
0
-1

He probado el código tuyo y me da el mismo error.

Este ejemplo funciona:

/* Este programa utiliza proyeccion ortografica para
 * visualizar una "Tetera", este objeto esta definido
 * en GLUT, se crea una fuente de luz, y un material */

//Incluimos las librerias
#include 
#include 

void init(void)
{
 // Ubicamos la fuente de luz en el punto (1.0, 1.0, 1.0)
 GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };

 // Activamos la fuente de luz
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 glDepthFunc(GL_LESS);
 glEnable(GL_DEPTH_TEST);
 // Queremos que se dibujen las caras frontales
 // y con un color solido de relleno. 
 glPolygonMode(GL_FRONT, GL_FILL); 
}

void reshape(int w, int h)
{
 if (!h)
	return;
 glViewport(0, 0,  (GLsizei) w, (GLsizei) h);
 // Activamos la matriz de proyeccion.
 glMatrixMode(GL_PROJECTION);
 // "limpiamos" esta con la matriz identidad.
 glLoadIdentity();
 // Usamos proyeccion ortogonal
  glOrtho(-200, 200, -200, 200, -200, 200);
 // Activamos la matriz de modelado/visionado. 
 glMatrixMode(GL_MODELVIEW);
 // "Limpiamos" la matriz
 glLoadIdentity();
}

// Aqui ponemos lo que queremos dibujar.
void display(void)
{ 
 // Propiedades del material
 GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
 GLfloat mat_diffuse[] = { 0.1f, 0.5f, 0.8f, 1.0f };
 GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
 GLfloat mat_shininess[] = { 100.0f };

 // "Limpiamos" el frame buffer con el color de "Clear", en este 
 // caso negro. 
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 glMatrixMode( GL_MODELVIEW_MATRIX );
 glLoadIdentity();
 
 // Rotacion de 30 grados en torno al eje x
 glRotated(25.0, 1.0, 0.0, 0.0);
 // Rotacion de -30 grados en torno al eje y
 glRotated(-30.0, 0.0, 1.0, 0.0);
 // Dibujamos una "Tetera" y le aplico el material

 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
 glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
 glutSolidTeapot(125.0);

 glFlush();
} 

// Termina la ejecucion del programa cuando se presiona ESC
void keyboard(unsigned char key, int x, int y)
{
 switch (key) 
   {
   case 27: exit(0);
             break;
   }
}    

// Main del programa.
int main(int argc, char **argv)
{ 
 // Inicializo OpenGL
 glutInit(&argc, argv);
 
 // Activamos buffer simple y colores del tipo RGB  
 glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

 // Definimos una ventana de medidas 300 x 300 como ventana 
 // de visualizacion en pixels
 glutInitWindowSize (300, 300);
 
 // Posicionamos la ventana en la esquina superior izquierda de 
 // la pantalla.
 glutInitWindowPosition (0, 0);

 // Creamos literalmente la ventana y le adjudicamos el nombre que se
 // observara en su barra de titulo.
 glutCreateWindow ("Teapot");

 // Inicializamos el sistema 
 init();

 glutDisplayFunc(display); 
 glutReshapeFunc(reshape);
 glutKeyboardFunc(keyboard);
 glutMainLoop();
 
 // ANSI C requiere que main retorne un valor entero.
 return 0;
}

sLap

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de wenderson
+1
0
-1

No hablo español muy bien, pero que comprendo C++

Usted tienes que cambiar lo seguinte

<code>
int main (char **argv, int *argc)
{
</code>

por

<code>
int main (int argc, char **argv)
{
glutInit(&argc, argv);
</code>

 

+1
0
-1
Imagen de slap
+1
0
-1

A veces los árboles no dejan ver el bosque.

¡Gracias wenderson!

sLap

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de peche
+1
0
-1

muchas gracias por tu ayuda.... y sigue practicando el español que te sale muy bien

+1
0
-1