Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Sh@dow777
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
1

Масштабирование

29.03.2014, 08:50. Просмотров 770. Ответов 2
Метки нет (Все метки)

Привет всем. Мне нужно написать программу рисования графика функции. Вот мой код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <Windows.h>
#include <glut.h>
using namespace std;
 
const int width = 800;
const int height = 600;
GLdouble a,b,c,d;
void Init()
{
    glClearColor(1.0,1.0,1.0,0.0);
    glColor3f(0.0f, 0.0f, 0.0f);
    glPointSize(1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,(GLdouble)width,0.0,(GLdouble)height);
    a=width/5.0;
    b=0.0;
    c=height/2.0;
    d=c;
}
void Pixel()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);
    for(GLdouble x=-5;x<=5.0;x+=0.003){
        GLdouble y = x;
        glVertex2d(a*x+b,c*y+d);
    }
    glEnd();
    glFlush();
}
void main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(800,600);
    glutCreateWindow("График функции");
    glutDisplayFunc(Pixel);
    Init();
    glutMainLoop();
}
Я не могу понять, как правильно масштабировать, чтоб график был в центре окна. Подскажите, пожалуйста. Или хотя бы где можно почитать про масштабирование?
И еще. Я хотел бы добавить координатную плоскость в программу. Вот мой код самой примитивной плоскости.
C++
1
2
3
4
5
6
7
glBegin(GL_LINES);
    glVertex2i(400,600);
    glVertex2i(400,0);
    glVertex2i(0,300);
    glVertex2i(800,300);
    glEnd();
    glFlush();
Но я не понимаю, куда надо вставить этот код, чтобы программа нарисовала все вместе - и координатную плоскость,и сам график. Я понимаю, что нужно создать отдельную функцию, но как ее потом вызвать, если в
C++
1
glutDisplayFunc()
уже есть функция? Заранее спасибо за ответ.

Добавлено через 38 минут
Все, с координатной плоскостью разобрался. Исправил вот так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <Windows.h>
#include <glut.h>
using namespace std;
 
const int width = 800;
const int height = 600;
GLdouble a,b,c,d;
void Init()
{
    glClearColor(1.0,1.0,1.0,0.0);
    glColor3f(0.0f, 0.0f, 0.0f);
    glPointSize(1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,(GLdouble)width,0.0,(GLdouble)height);
    a=width/4.0;
    b=0.0;
    c=height/2.0;
    d=c;
}
void drawing()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_LINES);
    glVertex2i(400,600);
    glVertex2i(400,0);
    glVertex2i(0,300);
    glVertex2i(800,300);
    glEnd();
    glBegin(GL_POINTS);
    for(GLdouble x=-5;x<=5.0;x+=0.003){
        GLdouble y = x;
        glVertex2d(a*x+b,c*y-d);
    }
    glEnd();
    glFlush();
}
void main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(800,600);
    glutCreateWindow("График функции");
    glutDisplayFunc(drawing);
    Init();
    glutMainLoop();
}
Получилось вроде то, что нужно. Но с масштабированием все равно не могу разобраться. Подскажите, где можно про него почитать?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 08:50
Ответы с готовыми решениями:

OpenGL - масштабирование
Добрый день! Недавно стал разбираться ГЛ, т.к. потребовалось научиться строить поверхности в своей...

Масштабирование в OpenGL
Здравствуйте. Подскажите пожалуйста, как увеличить масштаб? gluOrtho2D(0, 35, 0, 35); ...

Масштабирование области видимости
glm::mat4 g_projMatrix = glm::ortho( x1, x2, y1, y2, z1, z2); А вот...

Масштабирование фрактала c++/openGL
Есть код вывода фрактала на форме. Подскажите как можно реализовать масштабирование фрактала?...

Масштабирование окна. Как запретить?
Как запретить масштабирование окна, создаваемого средствами opengl? glutInitWindowSize (screenW,...

2
MaxWolf
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 11
30.03.2014, 14:48 2
Ты можешь объявить координатную систему так, чтобы центр ее был в [0, 0] с помощью glOrtho. Можешь подравнять все с помощью высокоуровневых функций для настройки матриц glScale*(масштабирование), glTranslate*(перемещение), glRotate*(поворот). Все дело вкуса...
0
Sh@dow777
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
30.03.2014, 22:09  [ТС] 3
дело в том, что я только начал изучать OpenGL. нашел книгу Ф.Хилла "Программирование компьютерной графики". Там приводятся формулы для масштабирования:
http://www.cyberforum.ru/cgi-bin/latex.cgi?sx = Ax + B
http://www.cyberforum.ru/cgi-bin/latex.cgi?sy = Cy + D
Но как я ни экспериментирую с константами А и С, график находится где-то слева.
Если, допустим, я поменяю формулу на
http://www.cyberforum.ru/cgi-bin/latex.cgi?y=x*x
то параболы вообще не видно.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 22:09

Стрелка для вектора, масштабирование
Привет. необходимо сделать следующее : рисуется ломанная в 3д (с перемещением и масштабированием) ...

масштабирование
Здоровья Вам!!! прошу помощи! вот делаю такую карту http://namore.biz.ua/karta в Мазиле...

Масштабирование
Доброго времени суток! Пишу клиент-серверное приложение на PHP для набивки шишек. Решил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.