Ir para o conteúdo
SM

Janela OpenGL

Mensagens Recomendadas

SM

Boas, como se redimensiona uma janela em openGL de forma a nunca deformar o seu conteudo ?

deixo aqui a função que tinha pra reshape :

void myReshape(GLsizei w, GLsizei h) {
   glViewport(0, 0, w, h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, -2.0f, 2.0f);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}

Editado por thoga31
Colocado GeSHi + removidas maiúsculas do título

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

- saber o rácio largura altura

- converter os dados conforme esse racio

void myReshape(GLsizei w, GLsizei h) {
   double ratio = 0.0;

   glViewport(0, 0, w, h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();

   if (w > h)
   {
       ratio = w / h;
       glOrtho(-2.0f * ratio,
                2.0f * ratio,
               -2.0f,
                2.0f,
               -2.0f,  2.0f);
   }
   else
   {
       ratio = h / w;
       glOrtho(-2.0f,
                2.0f,
               -2.0f * ratio,
                2.0f * ratio,
               -2.0f,  2.0f);
   }

   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}

ps : não testado

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

foi confirmar (não testei, vi na net) é parece que eu estava correcto ...

se continuas com problemas então não será no código apresentado e terás de dar um exemplo do que está a acontecer (e provavelmente mais código relacionado com o problema)


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
SM

Com esse código sempre que tento mudar o tamanho da janela , ela desaparece.. O que posso fazer para isso nao acontecer?

E quando recupero a execução a janela já esta maior e a imagem do viewport toda deformada.

Editado por SM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
SM

#include "main.h"

#include <GLUT/glut.h>

void myReshape(GLsizei w, GLsizei h) {

double ratio = 0.0;

glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

if (w > h)

{

ratio = w / h;

glOrtho(-2.0f * ratio,

2.0f * ratio,

-2.0f,

2.0f,

-2.0f, 2.0f);

}

else

{

ratio = h / w;

glOrtho(-2.0f,

2.0f,

-2.0f * ratio,

2.0f * ratio,

-2.0f, 2.0f);

}

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

void myDisplay(void) {

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT);

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

glBegin(GL_POLYGON);

glVertex3f(-1.0f, -1.0f, 0.0f);

glVertex3f(0.0f, -1.0f, 0.0f);

glVertex3f(0.0f, 1.0f, 0.0f);

glVertex3f(-1.0f, 1.0f, 0.0f);

glEnd();

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

glBegin(GL_POLYGON);

glVertex3f(1.0f, 1.0f, 0.0f);

glVertex3f(1.0f, -1.0f, 0.0f);

glVertex3f(0.0f, -1.0f, 0.0f);

glVertex3f(0.0f, 1.0f, 0.0f);

glEnd();

glFlush();

}

int main(int argc, char** argv) {

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize (400, 400);

glutInitWindowPosition (-1, -1);

glutCreateWindow(" Teste");

glutDisplayFunc(myDisplay);

glutReshapeFunc(myReshape);

glutMainLoop();

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
void myReshape(GLsizei w, GLsizei h) {
   double ratio = (GLdouble)w / (GLdouble)h;

   glViewport(0, 0, w, h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   if (ratio >= 1.0)
   {
       glOrtho(-2.0f * ratio,
               2.0f * ratio,
               -2.0f,
               2.0f,
               -2.0f,  2.0f);
   }
   else
   {
       glOrtho(-2.0f,
               2.0f,
               -2.0f * (1.0 / ratio),
               2.0f * (1.0 / ratio),
               -2.0f,  2.0f);
   }
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.