Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему не работает функция графика в опен-жл, OpenGL 
:(
    Опции темы
maxi2
Дата 12.6.2014, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.5.2012

Репутация: нет
Всего: 1



Вот у меня созданный мною код для рисование функции Улитки Паскаля в 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;
}



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

Это сообщение отредактировал(а) Alexeis - 14.6.2014, 11:53
PM MAIL   Вверх
tzirechnoy
Дата 12.6.2014, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



8/300 == 0, ergo x == 0.
PM MAIL   Вверх
maxi2
Дата 12.6.2014, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.5.2012

Репутация: нет
Всего: 1



Знаете я с с++ время от времени работаю. Если там после деление выходит что то 0,  023 то что флоат имеет только одно значение после запятой? Надо дабл?
PM MAIL   Вверх
maxi2
Дата 12.6.2014, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.5.2012

Репутация: нет
Всего: 1



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

Это сообщение отредактировал(а) maxi2 - 12.6.2014, 18:27
PM MAIL   Вверх
baldina
Дата 13.6.2014, 22:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



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

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

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

PM MAIL   Вверх
tzirechnoy
Дата 16.6.2014, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Цитата
то что флоат имеет только одно значение после запятой? 


8 и 300 --  не float, а int. Он вообще не имеет значений после запятой.
PM MAIL   Вверх
EgoBrain
Дата 17.6.2014, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Получается косинусоида.
Как улитку то сделать?

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  y_x2.zip 10,51 Kb
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.