2012-02-14 1 views
1

Ограничения:Как построить с использованием openGL с использованием заданных пользователем значений/запрашивая значения?

  • Я не могу изменить рамочные
  • я должен использовать функции в программе (мой любимый учитель не любит нас, используя функции, предоставляемые любой другой, чем она сама)

Вот код и он работает так же, как это (только не так гладко, как я хотел бы, чтобы это)

#include<OpenGL/gl.h> 
#include<OpenGL/glu.h> 
#include<GLUT/glut.h> 
#include <stdlib.h> 
#include <math.h> 

int lb=-30, ub=30; 
double cpoints=9999999; 

void init (void) 
{ 
    glClearColor(1,1,1,1); 
    glMatrixMode(GL_PROJECTION); 
    gluOrtho2D(-30,30,-30,30); 
} 

void graphfunct2D(void) 
{ 
    double dx, xi, yi; 
    dx = (ub-lb)*1.0/cpoints; 
    glColor3f(0,0,0); 
    glClear(GL_COLOR_BUFFER_BIT); 
    xi = lb; 
    yi = xi*sin(xi); 
    int i; 
    for (i=0; i<=cpoints;i++) 
    { 
     glBegin(GL_POINTS); 
     glVertex2i(xi,yi); 
     glEnd(); 
     xi = xi+dx; 
     yi = xi*sin(xi); 
    } 
    glFlush(); 
} 

int main (int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    /*printf("lower bound: "); 
    scanf(" %d",&lb); 
    printf("upper bound:"); 
    scanf(" %d",&ub); 
    printf("Give me the number of points to plot (int)"); 
    scanf(" %d",&cpoints);*/ 
    glutInitWindowSize(500,500); 
    glutCreateWindow("Graph function in 2D"); 
    init(); 
    glutDisplayFunc(graphfunct2D); 
    glutMainLoop(); 
} 

Я хочу, чтобы пользователь мог предоставить верхнюю и нижнюю границы и строить график на основе этих двух, но когда я запускаю программу с несогласованными входами, она ничего не отображает (когда я их не прошу и не использую Я определил это работает просто отлично)

+1

Можете ли вы уточнить, что вы имеете в виду Вы имеете в виду, что не отображает подсказку для ввода верхней и нижней границ, или что после того, как пользователь ввел их, она не отображает результаты? – user1118321

+0

@ user1118321 Я имею в виду, что программа запускается (она продолжает прыгать на док-станции, как будто она запускается, но на самом деле она не запускает/не отображает окно/остановку прыжка), это происходит, когда я запускаю ее из компилятора, когда я запускаю ее из терминала запрашивает границы и количество точек для построения, но отображает пустое окно (я получаю некоторые предупреждения tho: –

+0

'func2d.h: В функции« main »: func2d.h: 49: warning: несовместимое неявное объявление встроенная функция 'printf' func2d.h: 50: warning: несовместимое неявное объявление встроенной функции 'scanf' func2d.h: 54: warning: format '% d' ожидает тип 'int *', но аргумент 2 имеет тип 'double *' ' –

ответ

0

Попробуйте что-то вроде этого: «он ничего не отображает»

#include <GL/glut.h> 
#include <stdlib.h> 
#include <math.h> 

double lb=-30, ub=30; 
unsigned int cpoints=2048; 
void graphfunct2D(void) 
{ 
    double dx, xi, yi; 
    int i; 
    dx = (ub-lb)/cpoints; 

    glClearColor(1, 1, 1, 1); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-30, 30, -30, 30, -1, 1); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glColor3ub(0,0,0); 
    glBegin(GL_LINE_STRIP); 
    for(i = 0; i <= cpoints; i++) 
    { 
     xi = (i * dx) + lb; 
     yi = xi * sin(xi); 
     glVertex2f(xi, yi); 
    } 
    glEnd(); 
    glutSwapBuffers(); 
} 

int main (int argc, char** argv) 
{ 
    printf("lower bound: "); 
    scanf(" %d",&lb); 
    printf("upper bound:"); 
    scanf(" %d",&ub); 
    printf("Give me the number of points to plot (int)"); 
    scanf(" %d",&cpoints); 

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); 
    glutInitWindowSize(500,500); 
    glutCreateWindow("Graph function in 2D"); 
    glutDisplayFunc(graphfunct2D); 
    glutMainLoop(); 
} 
+0

СПАСИБО! это сработало, когда я запустил его из терминала: D Я думаю, что может возникнуть проблема со сканированием из xcode. Вероятно, мне придется заглянуть в это слишком поздно, но на данный момент это будет просто быстрый вопрос, что делает функция LoadIdentity() ? ty again –

+0

['glLoadIdentity()'] (http://www.opengl.org/sdk/docs/man/xhtml/glLoadIdentity.xml) перезаписывает верхнюю часть текущего стека матрицы с помощью 4x4 [идентификационной матрицы] (http : //en.wikipedia.org/wiki/Identity_matrix). Для использования без использования терминалов в [пакеты приложений] (http://en.wikipedia.org/wiki/Application_bundle#Mac_OS_X_application_bundles), если вы еще не используете их. – genpfault

+0

Спасибо, я обязательно посмотрю на эти штучки. –

Смежные вопросы