Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2017, 07:50   #1
Silentfog
 
Регистрация: 21.10.2016
Сообщений: 6
По умолчанию Opengl , GL_QUADS и GL_POINTS - ошибки

Отрисовываю точку и прямоугольник в старой версии OpenGL через GLFW - прямоугольник получается ниже на пиксель. Вот код:

В начале , я координаты opengl перевёл таким способом в координаты пикселей

Код:
 PX_WIDTH = (float)2/window_w;
 PX_HEIGHT = (float)2/window_h;
При размере окна 700x800 , высота пикселя равна 0.0025 в координатах opengl

и теперь отрисовывая по этим координатам - точка отрисовывается как положено , а GL_QUADS на пиксель ниже:

Код:
 glColor3f(0.0 , 0.0 , 0.0);
        glBegin(GL_POINTS);
        glVertex2f(0.09 , 0.65);
        glEnd();
 
        glBegin(GL_QUADS);
        glVertex2f(0.1 , 0.65);
        glVertex2f(0.1 , 0.55);
        glVertex2f(0.2 , 0.55);
        glVertex2f(0.2 , 0.65);
        glEnd();
Silentfog вне форума Ответить с цитированием
Старый 04.05.2017, 11:51   #2
Silentfog
 
Регистрация: 21.10.2016
Сообщений: 6
По умолчанию

Решил проблему нелепым образом , самым настоящим костылём.

GL_POINTS и GL_QUADS при одной координате рисуются в соседних пикселях по вертикали . В итоге в функциях использующих GL_POINTS , например при значении 0,75 - пиксель находится в неправильной точке , а вот при 0,7499 отрисовывается уже на пиксель ниже. Таким образом во всех функциях использующих GL_POINTS- вычитаю эту десятитысячную долю..
Silentfog вне форума Ответить с цитированием
Старый 04.05.2017, 12:07   #3
b2soft
Упртй программер
Форумчанин
 
Регистрация: 26.11.2009
Сообщений: 150
По умолчанию

Цитата:
Сообщение от Silentfog Посмотреть сообщение
Решил проблему нелепым образом , самым настоящим костылём.

GL_POINTS и GL_QUADS при одной координате рисуются в соседних пикселях по вертикали . В итоге в функциях использующих GL_POINTS , например при значении 0,75 - пиксель находится в неправильной точке , а вот при 0,7499 отрисовывается уже на пиксель ниже. Таким образом во всех функциях использующих GL_POINTS- вычитаю эту десятитысячную долю..
И это Вам помогло во всех случаях использования GL_POINTS?
Думаю, проблема в машинном представлении float-чисел + растеризаторе
Можно попробовать явно задать размер точки:
Код:
glPointSize(1);
glBegin(GL_POINTS);
...
Насколько критична ошибка в один пиксель?
Помощь с кодом/лабами по С/С++
Контакты: ICQ 623334555 Skype: btwosoft; Mail: b2soft@yandex.ru
b2soft вне форума Ответить с цитированием
Старый 04.05.2017, 17:38   #4
Silentfog
 
Регистрация: 21.10.2016
Сообщений: 6
По умолчанию

Пиксель важен , нужны были обрамления толщиной в пиксель вокруг прямоугольников , и многие другие подобные отрисовки .

glPointSize не изменил положения. На хабре уже увидел большое обсуждение по работе растеризатора , и похоже много ещё открытий придётся сделать при отрисовке))
Silentfog вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Qt+OpenGL. Qt "не видит" функции OpenGL EnterFix Qt и кроссплатформенное программирование С/С++ 4 29.01.2013 18:59
Игра - викторина. Ошибки, ошибки, ошибки!.. three_cats Общие вопросы C/C++ 1 27.10.2012 21:47
OpenGL bigory Общие вопросы C/C++ 8 24.06.2010 14:26