Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Почему не работает функция графика в опен-жл


Автор: maxi2 12.6.2014, 02:07
Вот у меня созданный мною код для рисование функции Улитки Паскаля в OpenGL--Почему то график функции не отображается--если даже заменить содержание формули на параболу? В чем дело? Ибо линии рисуются.

Код

#include <stdio.h>
#include "math.h"
#include <tchar.h>
#include "windows.h"
#include <GL/glut.h>
 int j=0;
 int a=5;
 int b=7;
 //int a[3]={1, 0.5, 0.9};
    //int b[3]={7, 0.4, 0.2};

float rav (float te) {
        return a*cos(te)+b;
    }

void display()
{
    int n = 300;
    glClear( GL_COLOR_BUFFER_BIT );
    glBegin( GL_LINES );
    glColor3d( 0.0, 0.0, 0.0 ); //1.Malyuyemo coordynatni osi chornym kolyorom
    glVertex2d( 0, -11 );
    glVertex2d( 0, 11 );
    glVertex2d( -11, 0 );
    glVertex2d( 11, 0 );
    glColor3d( 0.5, 0.5, 0.5 ); //2.Malyuyemo coordynatnu sitku chornym kolyorom
    glVertex2d( 0.5, -11 );
    glVertex2d( 0.5, 11 );
    glVertex2d( 0.5, -11 );
    glVertex2d( 0.5, 11 );
    glVertex2d( 1, -11 );
    glVertex2d( 1, 11 );
    glVertex2d( 1.5, -11 );
    glVertex2d( 1.5, 11 );
    glVertex2d( 2, -11 );
    glVertex2d( 2, 11 );
    glVertex2d( 2.5, -11 );
    glVertex2d( 2.5, 11 );
    glVertex2d( 3, -11 );
    glVertex2d( 3, 11 );
    glVertex2d( 3.5, -11 );
    glVertex2d( 3.5, 11 );
    glVertex2d( 4, -11 );
    glVertex2d( 4, 11 );
    glVertex2d( 4.5, -11 );
    glVertex2d( 4.5, 11 );
    glVertex2d( 5, -11 );
    glVertex2d( 5, 11 );
    glVertex2d( 5.5, -11 );
    glVertex2d( 5.5, 11 );
    glVertex2d( 6, -11 );
    glVertex2d( 6, 11 );
    glVertex2d( 6.5, -11 );
    glVertex2d( 6.5, 11 );

    glEnd();
    glBegin(GL_LINE_STRIP);
    glColor3d( 0.0, 0.0, 0.0 );
    for(int i=0; i <= n; i++)
        {
            float x = (8/300)*i-4;
            float y = rav (x);
            glVertex2f( x, y );
        }
    glEnd();
    glutSwapBuffers();
}
void resize( int width, int height )
{
    glViewport( 0, 0, width, height );
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    static double invRatio = 5.0;
    gluOrtho2D( -invRatio, invRatio, -invRatio, invRatio );
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
    glutInitWindowSize(600,600);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Point");
    glClearColor( 1.0, 1.0, 1.0, 1.0);
    glutDisplayFunc( display );
    glutReshapeFunc( resize );
    glutMainLoop();
    return 0;
}


void display()
{
    int n = 300;
    glClear( GL_COLOR_BUFFER_BIT );
    glBegin( GL_LINES );
    glColor3d( 0.0, 0.0, 0.0 ); //1.Malyuyemo coordynatni osi chornym kolyorom
    glVertex2d( 0, -11 );
    glVertex2d( 0, 11 );
    glVertex2d( -11, 0 );
    glVertex2d( 11, 0 );
    glColor3d( 0.5, 0.5, 0.5 ); //2.Malyuyemo coordynatnu sitku chornym kolyorom
    glVertex2d( 0.5, -11 );
    glVertex2d( 0.5, 11 );
    glVertex2d( 0.5, -11 );
    glVertex2d( 0.5, 11 );
    glVertex2d( 1, -11 );
    glVertex2d( 1, 11 );
    glVertex2d( 1.5, -11 );
    glVertex2d( 1.5, 11 );
    glVertex2d( 2, -11 );
    glVertex2d( 2, 11 );
    glVertex2d( 2.5, -11 );
    glVertex2d( 2.5, 11 );
    glVertex2d( 3, -11 );
    glVertex2d( 3, 11 );
    glVertex2d( 3.5, -11 );
    glVertex2d( 3.5, 11 );
    glVertex2d( 4, -11 );
    glVertex2d( 4, 11 );
    glVertex2d( 4.5, -11 );
    glVertex2d( 4.5, 11 );
    glVertex2d( 5, -11 );
    glVertex2d( 5, 11 );
    glVertex2d( 5.5, -11 );
    glVertex2d( 5.5, 11 );
    glVertex2d( 6, -11 );
    glVertex2d( 6, 11 );
    glVertex2d( 6.5, -11 );
    glVertex2d( 6.5, 11 );

    glEnd();
    glBegin(GL_LINE_STRIP);
    glColor3d( 0.0, 0.0, 0.0 );
    for(int i=0; i <= n; i++)
        {
            float x = (8/300)*i-4;
            float y = rav (x);
            glVertex2f( x, y );
        }
    glEnd();
    glutSwapBuffers();
}
void resize( int width, int height )
{
    glViewport( 0, 0, width, height );
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    static double invRatio = 5.0;
    gluOrtho2D( -invRatio, invRatio, -invRatio, invRatio );
}
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
    glutInitWindowSize(600,600);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Point");
    glClearColor( 1.0, 1.0, 1.0, 1.0);
    glutDisplayFunc( display );
    glutReshapeFunc( resize );
    glutMainLoop();
    return 0;
}



Модератор: используйте подсветку кода

Автор: tzirechnoy 12.6.2014, 10:06
8/300 == 0, ergo x == 0.

Автор: maxi2 12.6.2014, 12:25
Знаете я с с++ время от времени работаю. Если там после деление выходит что то 0,  023 то что флоат имеет только одно значение после запятой? Надо дабл?

Автор: maxi2 12.6.2014, 15:35
Я там тип дабл ставлю и если делить 8 больше чем на 7 или 8 то получается ноль В чем дело То есть если число шагов 3-8 парабола отображается а так нет в чем дело?
Нет а вчем проблема ибо флоат как бы до 7 знаков после запятой допускает, дабл еще больше. Что еще надо изменить я так понимаю с приведением типов ибо при деление что выводит больше 1 все работает. Ибо в этом коде еще много чего надо сделать.

Автор: baldina 13.6.2014, 22:13
Цитата(maxi2 @  12.6.2014,  02:07 Найти цитируемый пост)
 float x = (8/300)*i-4

здесь в правой части выполняются целочисленные операции, т.к. все операнды целые, и лишь потом преобразуются к float.
Код

float x = 8./300.*i-4.;

Автор: tzirechnoy 16.6.2014, 16:55
Цитата
то что флоат имеет только одно значение после запятой? 


8 и 300 --  не float, а int. Он вообще не имеет значений после запятой.

Автор: EgoBrain 17.6.2014, 03:49
Получается косинусоида.
Как улитку то сделать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)