nieproporcjonalne rozmiary "obiektów"

0

Teoretycznie kwadrat powinien mieć rozmiar 2x2 piksele, ale...

Proszę o wytłumaczenie, jak chłop krowie na miedzy :)

#include <GL/glut.h>

int width = 1280;
int height = 720;

void Display() {
        glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
        glClear( GL_COLOR_BUFFER_BIT );

        glBegin( GL_QUADS );
                glColor3f( 1.0f, 0.0f, 0.0f );

                glVertex2f( -1.0f, -1.0f );
                glVertex2f( 1.0f, -1.0f );
                glVertex2f( 1.0f, 1.0f );
                glVertex2f( -1.0f, 1.0f );
        glEnd();

        glFlush();
}

void Reshape( GLsizei width, GLsizei height ) {
        if( height == 0 ) height = 1;

        GLfloat aspect = (GLfloat) width / (GLfloat) height;

        glViewport( 0, 0, width, height );
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();

        if( width >= height ) gluOrtho2D( -1.0 * aspect, 1.0 * aspect, -1.0, 1.0 );
        else gluOrtho2D( -1.0, 1.0, -1.0 / aspect, 1.0 / aspect );
}

int main( int argc, char** argv ) {
        glutInit( &argc, argv );
        glutInitWindowSize( width, height );
        glutCreateWindow( "opengl" );
        glutDisplayFunc( Display );
        glutReshapeFunc( Reshape );
        glutMainLoop();

        return 0;
}
0

A jaki masz rezultat? Wg mojej wiedzy to wcale nie powinien mieć rozmiaru w pikselach, tylko w "jednostkach".

0

Dokładnie taki:user image
Przeglądam różne przykłady, nie widzę wzmianki o "jednostkach". Dopiero przyswajam OpenGL.

0

troche taki offtop ale moze Vulkan zamiast openGL?

https://www.khronos.org/vulkan/

3

Wg mnie masz kwadrat taki, jaki chciałeś. Spójrz, jaki sens by miał zapis:

glVertex2f( -1.2f, -1.1f );

jeśli jednostką byłyby piksele? "Płótno", na którym rysujesz ma swoje określone wymiary w swoim układzie współrzędnym, ze swoimi jednostkami. To oznacza, że punkt 0,0 nie będzie w lewym górnym roku ekranu, tylko gdzieś indziej. Prawdopodobnie idealnie na środku ekranu. Punkt (-1.0; 0.0) nie oznacza, punktu odsuniętego jeden piksel od środka ekranu. Oznacza punkt odsunięty o jedną jednostkę. Tak naprawdę nie ma sensu w silnikach graficznych posługiwanie się pikselami (czasami ma, ale to pewne ustalone przypadki). Bo jeśli chcesz mieć kwadrat 2 x 2 to miałbyś go zawsze na każdej rozdzielczości. Na bardzo niskich rozdzielczościach byłby duży, na bardzo wysokich nawet niewidoczny. Chodzi głównie chyba o proporcje. Poczytaj o jednostkach w openGL: google + "opengl units". Na dzień dobry już wyskakuje kilka ciekawych pytań.

1 użytkowników online, w tym zalogowanych: 0, gości: 1