1 Востаннє редагувалося Betterthanyou (26.06.2016 15:55:05)

Тема: Qt, OpenGL, Створення ліній

При малювання сітки я помітив дивну річ, через одну лінію лінія більша десь на 1 піксель. Як намалювати лінії у висоту щоб вони всі були рівні ?
По ширині малюються лінії нормально (дивіться скрін)
Мій клас успадковується від QGLWidget

class WidgetOpenGL : public QGLWidget
{
    Q_OBJECT
public:
    explicit WidgetOpenGL();
    ~WidgetOpenGL();
    void initializeGL();
    void paintGL();
};

initializeGL

    setFixedSize(500, 500); // Задав фіксований (Не можна змінювати) розмір вікна
    glViewport(0, 0, 500, 500); // Такий самий розміри встановлюю в OpenGL

    /*Трішки віддаляю*/
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    glScaled( 0.9, 0.9, 0 );
    /*Задаю двовимірну систему координат*/ 
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluOrtho2D( -1000, 1000, -1000 , 1000 );

paintGL

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

    glBegin( GL_LINES );
    glColor3ub( 233, 68, 173 );

    for(int x = -1000; x <= 1000; x += 100) // Тут проблеми з лініями 
    {
        qDebug() << x;
        glVertex2i( x, 1000 );
        glVertex2i( x, -1000 );
    }
    qDebug() << "-";
    for(int y = -1000; y <= 1000; y += 100)
    {
        qDebug() << y;
        glVertex2i(  1000, y );
        glVertex2i( -1000, y );
    }
    glEnd();
Що виводить qDebug

X =
-1000
-900
-800
-700
-600
-500
-400
-300
-200
-100
0
100
200
300
400
500
600
700
800
900
1000
Y =
-1000
-900
-800
-700
-600
-500
-400
-300
-200
-100
0
100
200
300
400
500
600
700
800
900
1000

http://replace.org.ua/misc.php?action=pun_attachment&amp;item=1320&amp;download=0

Post's attachments

Untitled.png 23.2 kb, 216 downloads since 2016-06-26 

2

Re: Qt, OpenGL, Створення ліній

Можете весь проект кинути?

3 Востаннє редагувалося 0x9111A (25.12.2017 19:16:12)

Re: Qt, OpenGL, Створення ліній

Здається мені що проблема може бути зв’язаню з конвертацією int->float.
А взагалі, якщо цікавить OpenGL то викиньте цей сивий glBegin/glEnd або як його називають Immediate mode і працюйте з сучасним підходом (почианаючи з OpenGL 3.3)

Подякували: Betterthanyou2

4 Востаннє редагувалося Yola (28.12.2017 10:22:44)

Re: Qt, OpenGL, Створення ліній

А якщо ви заміните x+=100 на x += 1, що тоді намалюється?

---

А може це бути тому, що у вас в'юпорт має розмір 500х500, а межі ліній по від -1000 до 1000, тобто маємо коефіцієнт 4, і коли ви 1000 чи 800 чи ... ділите на 4 - це ціле число, а коли 900 чи 700 чи ..., то це х.5, що заокруглюється до х+1?

---

Я тут подумав, що x.5 заокруглюється не до x+1, а до x, але -x.5 заокруглється до -(x+1). Але тут це заокруглення не мало б мати значення, бо тут усюди -1000.

Подякували: Betterthanyou2

5 Востаннє редагувалося Betterthanyou (03.01.2018 19:25:40)

Re: Qt, OpenGL, Створення ліній

Ярослав написав:

Можете весь проект кинути?

https://drive.google.com/open?id=1AuLA1 … cG51HM_rgr
OpenGl_net - Проект
release - Виконуваний файл

6

Re: Qt, OpenGL, Створення ліній

Betterthanyou, Вам вдалось вирішити проблему?

7

Re: Qt, OpenGL, Створення ліній

Ні не вдалося вирішити проблему, якщо Вам не видно ліній про які я казав, спробуйте скористатися програмою "Magnifier".
Ця тема не актуальна, я її створив 26.06.2016, але якщо Ви знаєте рішення і причину, то мені було б цікаво дізнатися.

На даний момент я користуюся бібліотеками Qt або SFML для роботи з графікою і звуком (не OpenGL).

Подякували: 0xDADA11C71