Quem aqui entende de OpenGL ? [RESOLVIDO]

1. Quem aqui entende de OpenGL ? [RESOLVIDO]

Pedro Souza Pereira
UmCaraAToa

(usa )

Enviado em 28/10/2014 - 09:11h

Olá pessoal , me aventurando aqui no VOL , achei um tutorial de opengl (muito bom , por sinal) e estou com uma duvida no meu programa :


#include <GL/glut.h>
#include <stdio.h>

void DesenhaNaTela(void)
{
glClear(GL_COLOR_BUFFER_BIT);

glLoadIdentity();

gluLookAt( 0.0f, 0.0f, 10.0f,
0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f);


glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();

glutSwapBuffers();
}

void Inicializa (void)
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Define cor fundo para preto
}


void cliqueMouse(int button, int state, int x, int y){

if(button == GLUT_LEFT_BUTTON){
if(state == GLUT_DOWN){
// Eu queria fazer colocar um quadrado quando apertar com o mouse , mas não consegui
}
}

void alteraTamanhoTela(int w, int h) {

// Função é chamada caso a tela tenha tido alterada

if (h == 0)
h = 1;

float proporcao = w * 1.0 / h;

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glViewport(0, 0, w, h);

gluPerspective(45.0f, proporcao, 0.1f, 100.0f);

glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(320,240);
glutInitWindowPosition(100,100);
glutCreateWindow("Manipulação Teclado e Mouse");
glutDisplayFunc(desenhaNaTela);
glutIdleFunc(desenhaNaTela);
glutReshapeFunc(alteraTamanhoTela);
glutMouseFunc(cliqueMouse);
glutKeyboardFunc( Teclado );
glutSpecialFunc( TeclaEspeciais);
Inicializa();
glutMainLoop();
}


Alguém poderia me ajudar ?

Ficaria muito agradecido

Até mais




  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 28/10/2014 - 10:21h

Amigo , primeiramente , parabéns por ter tomado a iniciativa de aprender o OpenGL!

Segundo , consegui resolver seu problema ,mas como você está usando o GLUT , ai complica , pois precisa usar variaveis globais , para esse programa ainda não tem problema , mas para programas futuros , ai terá !

Acho que é assim que você deseja :


#include <GL/glut.h>
#include <stdio.h>

int posX = -1,posY = -1;

void desenhaNaTela(void)
{
glClear(GL_COLOR_BUFFER_BIT);

glLoadIdentity();

glPointSize(20); // Tamanho do ponto

glBegin(GL_POINTS);
glVertex2i(posX,posY);
glEnd();

glutSwapBuffers();
}
void inicializaOpenGL(){

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

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(0,400,400,0);
/* Isso define que o inicio da tela (lado superior esquerdo) será o ponto (0,0), assim não tem pontos negativos , então para esse programa irá funcionar , agora se tivesse os valores negativos , não iriam funcionar corretamente.
*/

glMatrixMode(GL_MODELVIEW);

}
void cliqueMouse(int button, int state, int x, int y){

if(button == GLUT_LEFT_BUTTON){
if(state == GLUT_DOWN){
posX = x;
posY = y;
}
}
}
void alteraTamanhoTela(int w, int h) {

// Função é chamada caso a tela tenha tido alterada

if (h == 0)
h = 1;

float proporcao = w * 1.0 / h;

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glViewport(0, 0, w, h);

gluPerspective(45.0f, proporcao, 0.1f, 100.0f);

glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char** argv)
{
glutInit (&argc,argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (400,400);
glutInitWindowPosition(100,100);
glutCreateWindow ("Teste do GLUT");
glutDisplayFunc (desenhaNaTela);
glutIdleFunc (desenhaNaTela);
glutReshapeFunc (alteraTamanhoTela);
glutMouseFunc (cliqueMouse);
inicializaOpenGL ();
glutMainLoop ();
}



Futuramente farei um artigo de SDL usando o OpenGL , dai não será necessário utilizar variáveis globais


Espero ter ajudado

Qlq coisa 'tamo' ae!

[]'s

T+

3. Re: Quem aqui entende de OpenGL ? [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 28/10/2014 - 10:44h

Thihup

é uma boa idéia, artigos sôbre OpenGl. Há poucos aqui no VOL

#Bug no Vol : Thihup , vc manja alturas , boa sorte !


4. Re: Quem aqui entende de OpenGL ? [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 28/10/2014 - 11:02h

albfneto escreveu:

Thihup

é uma boa idéia, artigos sôbre OpenGl. Há poucos aqui no VOL


Olha , não querendo se gabar , mas acho que tem apenas o meu artigo de OpenGL

Já estou fazendo o OpenGL + SDL , mas estou tentando simplificar ao máximo e deixar a mesma essência.

Talvez ainda faça mais alguns artigos de OpenGL e sobre o novo SDL 2 , que é muito bom , tem uma compatibilidade enorme com o OpenGL


[]'s

T+


5. Re: Quem aqui entende de OpenGL ? [RESOLVIDO]

Pedro Souza Pereira
UmCaraAToa

(usa )

Enviado em 28/10/2014 - 11:30h

Thihup escreveu:

Amigo , primeiramente , parabéns por ter tomado a iniciativa de aprender o OpenGL!


Obrigado , é um grande esforço para achar alguem que entenda do assunto e não cobre nada por ensinar / explicar

Thihup escreveu:
Segundo , consegui resolver seu problema ,mas como você está usando o GLUT , ai complica , pois precisa usar variaveis globais , para esse programa ainda não tem problema , mas para programas futuros , ai terá !


Olha, eu aprendi que variaveis globais são ruins mesmo de utilizar , pq vc aloca uma variavel e no fim utiliza ela poucas vezes, o correto seria ou utilizar ponteiros ou fazer uma gambiarra tipo essa

Thihup escreveu:
Acho que é assim que você deseja :


Aquele enorme código ....


Futuramente farei um artigo de SDL usando o OpenGL , dai não será necessário utilizar variáveis globais


Então , eu testei e seu codigo funcionou direitinho, agora que consegui fazer isso , vou tentar fazer um paint (rsrs).

Aguardo ansiosamente seu outro artigo sobre o OpenGL , vi que vc é de menor , mas mesmo assim conseguiu passar um assunto de 'gente grande'


Valeu mesmo

Merece com certeza melhor resposta

Abraços

Até Mais







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts