algoritmo de bresenham

Iniciado por m@o_614, 27 Septiembre 2014, 00:04 AM

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

m@o_614

Saludos

Tengo el siguiente codigo en C, que me tiene que dibujar algunas lineas mediante el algoritmo de bresenham. Para esto estoy utilizando GLUT, la cual ya le instale correctamente. El problema es que dentro del main donde tengo la llamada a funcion de init() y glutDisplayFunc(estrella); me aparece init y estrella not declared in this scope, por qué será esto??

#include <windows.h>
#include <GL/glut.h>

int main(int argc, char** argv)
{
    glutInit(&argc, argv);//inicialización de GLUT
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//único búfer de refresco en la ventana de visualización y el modo de color RGB
    glutInitWindowPosition(50, 100); // posición inicial, esq sup izq
    glutInitWindowSize(400, 300); //alto y ancho de la ventana en pixeles
    glutCreateWindow("Primer Practica");// creación de ventana de visualización y título de la misma
    init();
    glutDisplayFunc(estrella); // muestra la línea en la ventana de visualización
    glutMainLoop(); // bucle infinitoque comprueba entrada de disp
    return EXIT_SUCCESS;
}

void bresenham(int x0,int y0,int x1,int y1)
{
    int dx,dy,p,x,y,s1,s2,e,i,intercambio;

    x = x1;
    y = y1;

    dx = abs(x1-x0);
dy = abs(y1-y0);

s1 = signo(x1-x0);
s2 = signo(y1-y0);

if(y > x)
    {
        p = dx;
    dx = dy;
    dy = p;
    }
    else
       intercambio = 1;
    e=2*dy-dx;
    for(i = 0;i <= dx;i++)
    {
        if(e >= 0)
        {
            if(intercambio == 1)
               x = x+s1;
            else
               y = y+s2;
        }
        e = e-(2*dx);
    }
    if(intercambio == 1)
       y = y+s2;
    else
       x = x+s1;
    e = e+2*dy;
}

int signo(int num)
{
    int resultado;
    if(num < 0)
       resultado = -1;
    else if(num > 0)
       resultado = 1;
    else if(num == 0)
       resultado = 0;
    return resultado;
}

void init(void)
{
    glClearColor(1.0, 1.0, 1.0, 0.0); // colorde la ventana, blanco
    glMatrixMode(GL_PROJECTION);//  proyección de la imagen en la ventana devisualización
    gluOrtho2D(0.0, 400.0, 0.0, 300.0);//  proyección en 2D
}

void estrella(void)
{
   bresenham(0,0,0,130);/*
   bresenham();
   bresenham();
   bresenham();*/
}


de antemano gracias

avesudra

#1
Porque estrella e init están declaradas y definidas después del main por eso desde ésta última no sabe qué es estrella ni init pues todavía no están declaradas. Puedes arreglarlo añadiendo la declaración junto a la inclusión de los archivos de cabecera, tal que así:
#include <windows.h>
#include <GL/glut.h>

void init(void);
void estrella(void);

int main(int argc, char** argv)
{
  glutInit(&argc, argv);//inicialización de GLUT
  glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//único búfer de refresco en la ventana de visualización y el modo de color RGB
  glutInitWindowPosition(50, 100); // posición inicial, esq sup izq
  glutInitWindowSize(400, 300); //alto y ancho de la ventana en pixeles
  glutCreateWindow("Primer Practica");// creación de ventana de visualización y título de la misma
  init();
  glutDisplayFunc(estrella); // muestra la línea en la ventana de visualización
  glutMainLoop(); // bucle infinitoque comprueba entrada de disp
  return EXIT_SUCCESS;
}

void bresenham(int x0,int y0,int x1,int y1)
{
  int dx,dy,p,x,y,s1,s2,e,i,intercambio;

  x = x1;
  y = y1;

  dx = abs(x1-x0);
dy = abs(y1-y0);

s1 = signo(x1-x0);
s2 = signo(y1-y0);

if(y > x)
  {
      p = dx;
  dx = dy;
  dy = p;
  }
  else
     intercambio = 1;
  e=2*dy-dx;
  for(i = 0;i <= dx;i++)
  {
      if(e >= 0)
      {
          if(intercambio == 1)
             x = x+s1;
          else
             y = y+s2;
      }
      e = e-(2*dx);
  }
  if(intercambio == 1)
     y = y+s2;
  else
     x = x+s1;
  e = e+2*dy;
}

int signo(int num)
{
  int resultado;
  if(num < 0)
     resultado = -1;
  else if(num > 0)
     resultado = 1;
  else if(num == 0)
     resultado = 0;
  return resultado;
}

void init(void)
{
  glClearColor(1.0, 1.0, 1.0, 0.0); // colorde la ventana, blanco
  glMatrixMode(GL_PROJECTION);//  proyección de la imagen en la ventana devisualización
  gluOrtho2D(0.0, 400.0, 0.0, 300.0);//  proyección en 2D
}

void estrella(void)
{
 bresenham(0,0,0,130);/*
  bresenham();
  bresenham();
  bresenham();*/
}


Saludos, avesudra.
Regístrate en