Resultados 1 al 4 de 4

Tema: Sugerencias con mi programa OpenGl

  1. #1
    Fecha de ingreso
    Jun 2013
    Mensajes
    1

    Ayuda con mi programa opengl

    resulta que hice un programa en codeblocks con OpenGL.esta fucional todo, pero por más que trato no puedo hacerlo con listas de visualización (glnewlist).

    Por fa ayuda.

    Acxa les dejo el código, el programa genra una curva dado dos puntos.
    #ifdef __APLE__.
    #include <GLUT/glut, h>.
    #else.
    #include <GL/glut, h>.
    #include <iostream>.
    #endif.
    #include<conio, h>.
    #include<stdio, h>.
    #include<math, h>.
    #include<iostream>.
    #include <stdlib, h>.
    #define NUM_PUNTOS 200.
    #define NUM_EXTREMOS 200.
    #include <GL/glut, h>.
    #include <iostream>.
    #include<math, h>.
    #include<stdio, h>.
    #include <stdlib, h>.
    #define max 70000000.

    Using namespace std;.

    Int comparar(int x, int y);.

    Void dda(float x0, float y0, float x1, float y1);.

    Void init(void);.

    Void hermite(void);.

    Void dibujar_puntos(void);.

    Void dibujar_rectas(void);.

    Int dim=600;.

    Float P_Control[NUM_PUNTOS][2];.

    Float P_Extremo[NUM_EXTREMOS][2];.

    Int num_punto=0, inc=50;.

    Int activ_add_point=0;.

    Int activ_ver_recta=0;.

    Int activ_mov_point=0;.

    Int activ_curve=0;.

    Int MOVENAMe =-1;.

    Int MOVEPOINT =-1;.

    Void init(void).
    {.

    GlutCreateWindow(Labo_1);.

    GlClearColor(1.0, 1.0, 1.0, 0.0);.

    GlMatrixMode(GL_PROJECTION);.

    GlLoadIdentity();.

    GluOrtho2D(0.0, dim, 0.0, dim);.
    }.

    Static void display(void).
    {.

    GlClear(GL_COLOR_BUFER_BIT | GL_DEPTH_BUFER_BIT);.

    GlColor3d(1,0,0);.

    GlPushMatrix();.

    Dibujar_puntos();.

    Dibujar_rectas();.

    If(activ_curve==1){.

    Hermite();.
    }.

    GlPopMatrix();.

    GlutSwapBuffers();.
    }.

    Void ControlRaton(int button, int state, int x, int y){.

    If(activ_add_point==1 && num_punto.= 2){.

    If (button==GLUT_LEFT_BUTON && state==GLUT_DOWN){.

    P_Control[num_punto][0]=x;.

    P_Control[num_punto][1]=dim-y;.

    P_Extremo[num_punto][0]=x+inc;.

    P_Extremo[num_punto][1]=dim-y+inc;.

    Cout<<x<< <<dim-y<<endl;.

    Num_punto++;.
    }.
    }.

    Else{.

    If(activ_mov_point==1){.

    If (button==GLUT_LEFT_BUTON && state==GLUT_DOWN){.

    Int newX=x;.

    Int newY=dim-y;.

    Int choiceFound = 0;.

    For (int i = 0; i < num_punto &&.choiceFound; i++){.

    If ((abs(P_Control[i][0] - newX) <= 20) &&.
    (abs(P_Control[i][1] - newY) <= 20)){.

    MOVEPOINT = i;.

    ChoiceFound = 1;.
    }.
    }.
    }.

    If (button == GLUT_LEFT_BUTON && state == GLUT_UP) {.

    MOVEPOINT = -1;.
    }.
    }.

    Else{.

    If (button==GLUT_LEFT_BUTON && state==GLUT_DOWN){.

    Int newX=x;.

    Int newY=dim-y;.

    Int choiceFound = 0;.

    For (int i = 0; i < num_punto &&.choiceFound; i++){.

    If ((abs(P_Extremo[i][0] - newX) <= 50) &&.
    (abs(P_Extremo[i][1] - newY) <= 50)){.

    MOVENAMe = i;.

    ChoiceFound = 1;.
    }.
    }.
    }.

    If (button == GLUT_LEFT_BUTON && state == GLUT_UP) {.

    MOVENAMe = -1;.
    }.
    }.
    }.

    GlutPostRedisplay();.
    }.

    Void myMouseMove(int x, int y).
    {.

    If (MOVENAMe > -1 && activ_ver_recta==1).
    {.

    Int newX = x;.

    Int newY = dim- y;.

    P_Extremo[MOVENAME][0] = newX;.

    P_Extremo[MOVENAME][1] = newY;.

    GlutPostRedisplay();.
    }.

    If (MOVEPOINT > -1 && activ_mov_point==1).
    {.

    Int newX = x;.

    Int newY = dim- y;.

    P_Control[MOVEPOINT][0] = newX;.

    P_Control[MOVEPOINT][1] = newY;.

    GlutPostRedisplay();.
    }.
    }.

    Void dibujar_puntos(void){.

    GlColor3d(1,0,0);.

    For(int i=0;i<num_punto;i++){.

    GlPointSize(10);.

    GlBegin(GL_POINTS);.

    GlVertex2f(P_Control[i][0],P_Control[i][1]);.

    GlEnd();.
    }.
    }.

    Void dibujar_rectas(void){.

    If(activ_ver_recta==1){.

    For(int i=0;i<num_punto;i++){.

    Dda(P_Control[i][0],P_Control[i][1],P_Extremo[i][0],P_Extremo[i][1]);.
    }.
    }.
    }.

    Void hermite().
    {.

    GlLineWidth(4.0);.

    GlColor3f(1,1,0);.

    Float fu[4];.

    GlBegin(GL_LINE_STRIP);.

    For (float uInt = 0; uInt <= 1; uInt+=0.01).
    {.

    Float u = uInt;.

    Float u2 = u*u;.

    Float u3 = u2*u;.

    Fu[0] = 2.0*u3 - 3.0*u2 + 1.0;.

    Fu[1] = -2.0*u3 + 3.0*u2;.

    Fu[2] = u3 - 2.0*u2 + u;.

    Fu[3] = u3 - u2;.

    Float x = 0.0;.

    Float y = 0.0;.
    // p0 = P_Control[0].
    x += fu[0]*P_Control[0][0];.

    Y += fu[0]*P_Control[0][1];.
    // p1 = P_Control[1].
    x += fu[1]*P_Control[1][0];.

    Y += fu[1]*P_Control[1][1];.
    // tangent at p0 = ctrlPoints[1]-ctrlPoints[0].
    x += fu[2]*(P_Extremo[0][0]-P_Control[0][0]);.

    Y += fu[2]*(P_Extremo[0][1]-P_Control[0][1]);.
    // tangent at p1 = ctrlPoints[3]-ctrlPoints[2].
    x += fu[3]*(P_Extremo[1][0]-P_Control[1][0]);.

    Y += fu[3]*(P_Extremo[1][1]-P_Control[1][1]);.

    GlVertex2i(x, y);.
    }.

    GlEnd();.

    GlFlush();.
    }.

    Void dda(float x0, float y0, float x1, float y1){.

    GlColor3d(1,0,0);.

    GlBegin(GL_LINES);.

    GlVertex2f(x0, y0);.

    GlVertex2f(x1, y1);.

    GlEnd();.
    }.

    Static void idle(void).
    {.

    GlutPostRedisplay();.
    }.

    Void menu_principal(int opción){.

    Switch(opción){.

    Case 4:
    Exit(-1);.

    Break;.
    }.
    }.

    Void menu_puntos(int opción){.

    Switch(opción){.
    }.
    }.

    Void menu_mod_puntos(int opción){.

    Switch(opción){.

    Case 1:
    Activ_mov_point=1;.

    Activ_add_point=0;.

    Break;.

    Case 2:
    Activ_mov_point=0;.

    Break;.
    }.
    }.

    Void menu_add_puntos(int opción){.

    Switch(opción){.

    Case 1:
    If(num_punto.=2){.

    Activ_add_point=1;.
    }.

    Break;.

    Case 2:
    Activ_add_point=0;.

    Break;.
    }.
    }.

    Void menu_recta(int opción){.

    Switch(opción){.

    Case 1:
    Activ_ver_recta=1;.

    Activ_mov_point=0;.

    Break;.

    Case 2:
    Activ_ver_recta=0;.

    Break;.
    }.
    }.

    Void menu_curva(int opción){.

    Switch(opción){.

    Case 1:
    If(num_punto==2){.

    Activ_curve=1;.
    }.

    Break;.

    Case 2:
    Activ_curve=0;.

    Break;.
    }.
    }.

    Int main(int argc, char *argv[]).
    {.

    GlutInit(&argc, argv);.

    GlutInitWindowSize(dim, dim);.

    GlutInitWindowPosition(100,100);.

    GlutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);.

    Init();.

    Int submenu_curva = glutCreateMenu(menu_curva);.

    GlutAddMenuEntry(Activar,1);.

    GlutAddMenuEntry(Desactivar,2);.

    Int submenu_rectas = glutCreateMenu(menu_recta);.

    GlutAddMenuEntry(Activar,1);.

    GlutAddMenuEntry(Desactivar,2);.

    Int submenu_add = glutCreateMenu(menu_add_puntos);.

    GlutAddMenuEntry(Activar,1);.

    GlutAddMenuEntry(Desactivar,2);.

    Int submenu_mod = glutCreateMenu(menu_mod_puntos);.

    GlutAddMenuEntry(Activar,1);.

    GlutAddMenuEntry(Desactivar,2);.

    Int submenu_puntos = glutCreateMenu(menu_puntos);.

    GlutAddSubMenu(Ingreso de puntos, submenu_add);.

    GlutAddSubMenu(Modificar posición, submenu_mod);.

    Int menú = glutCreateMenu(menu_principal);.

    GlutAddSubMenu(Puntos de control, submenu_puntos);.

    GlutAddSubMenu(Rectas tangentes, submenu_rectas);.

    GlutAddSubMenu(Curva de Hermite, submenu_curva);.

    GlutAddMenuEntry(salir,4);.

    GlutAttachMenu(GLUT_RIGHT_BUTON);.

    GlutDisplayFunc(display);.

    GlutIdleFunc(idle);.

    GlClearColor(1,1,1,1);.

    GlutMouseFunc(ControlRaton);.

    GlutMotionFunc(myMouseMove);.

    GlutMainLop();.

    Return 0;.
    }.
    .

  2. #2
    Fecha de ingreso
    Oct 2002
    Mensajes
    8,617

    Ayuda con mi programa opengl

    Lo mejor es que primero te presentes, entrar sin presentarse y pedir ayuda queda feo.

    Y segundo te lo muevo a general que modelado no es el apartado correcto. Un saludo y bienvenido.

  3. #3
    Fecha de ingreso
    Jan 2013
    Mensajes
    541

    Ayuda con mi programa opengl


  4. #4
    Fecha de ingreso
    Oct 2002
    Mensajes
    8,617

    Ayuda con mi programa opengl

    Os liais cosa mala, los DPI se usan en impresión ya qué definen la cantidad de puntos que hay en una pulgada, (2.54 cm) o sea un tamaño físico, pero en texturas hablamos de resolución, y esos son los puntos totales de una imagen, su ancho por su alto, si aumentamos los PDI aumentamos la resolución por lo tanto el tamaño de la imagen en píxeles, lo que logramos con esto es que el motor de turno nos diga qué la imagen no es valida porque no tiene un tamaño potencia de 2.

    Nada de DPI ni PI, en 3d hablamos de píxeles, cuantos hay de ancho por cuantos hay de alto, otra cosa es el render final, pero eso ya se mira ne potochó. Saludos.

Temas similares

  1. Dibujar paredes sólidas en programa de dibujo en VB6 con OpenGL
    Por quijoteMx en el foro Programas de Diseño 3D y CAD
    Respuestas: 1
    : 07-04-2023, 18:45
  2. Sugerencias como funciona shader model y OpenGl
    Por SIG-raster en el foro Quieres presentarte
    Respuestas: 2
    : 04-08-2016, 15:51
  3. 3ds Max Sugerencias con mi programa OpenGl
    Por elLocoCibernetico en el foro Modelado
    Respuestas: 1
    : 17-06-2013, 23:07
  4. 3ds Max Sugerencias con un programa en OpenGl simulador de partículas
    Por HybridRain en el foro Partículas y Dinámicas
    Respuestas: 0
    : 13-04-2009, 06:21
  5. Sugerencias con OpenGL
    Por cdxcxn en el foro Programas de Diseño 3D y CAD
    Respuestas: 0
    : 09-04-2007, 19:30