1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

OpenGL/C++

Discussão em 'Programação' iniciada por OubeLa, 1 de Outubro de 2008. (Respostas: 9; Visualizações: 1435)

  1. OubeLa

    OubeLa Power Member

    [​IMG]

    Bem, estou a precisar de fazer uma torre igual a essa aí :002: alguma ideia de como fazer? Basicamente em cima é um quadrado, e em baixo é um quadrado em que as arestas passam a ser arcos, como se fossem 4 quartos de circulos.

    Não quero que me façam, quero apenas uma ideia de como fazer isto. Actualmente a minha ideia é fazer o quadrado de cima e os 4 quartos de circulo em baixo, e guardar os pontos em 2 vectores diferentes. E depois fazer um ciclo para desenhar cada "fatia" do objecto, e dentro desse ciclo for fazer outro ciclo for onde ia usando os valores dos pontos anteriores para calcular os novos pontos. Estes pontos tinham "pesos", para fazer tipo uma média ponderada.

    Cumprimentos
     
    Última edição: 1 de Outubro de 2008
  2. zep

    zep Power Member

    Posso enviar-te um ficheiro neutro (CAD) com essa construção ou em *.iges ou em *.step.
    Depois editas em wordpad de forma a ver as linhas de construção da peça.

    Não sei se isto pode vir a ser útil?????

    Não te esqueças de partir a secção circular em 4 partes de forma a que os seus vértices coincidem com os da secção quadrada.
     
    Última edição: 1 de Outubro de 2008
  3. OubeLa

    OubeLa Power Member

    Se puderes agradecia, desde que dê para abrir com um editor de texto. Obrigado :)


    Já agora pessoal, como é que aplico uma textura a um cilindro por exemplo? E outra questão: é possível aplicar uma textura apenas numa parte de uma figura? Por exemplo, imaginem que tenho um rectângulo e tenho que aplicar uma textura apenas em metade do rectangulo.

    Cumprimentos
     
  4. zep

    zep Power Member

    Penso que terás de partir o Rectangulo em 2.
     
  5. OubeLa

    OubeLa Power Member

    Bem, e lá volto eu com as dúvidas. Tenho que construir um grafo (não ciclico, portanto, do tipo arvore) em que em cada nó são definidas transformações geométricas, e depois nas folhas tenho de aplicar a totalidade das transformações dos nós que antecederam essa folha.

    O grafo já está construido, o problema está mesmo em guardar as matrizes de transformações.

    Código:
    float matrix[4][4];
    
        glPushMatrix();
        glLoadIdentity();
        glTranslatef(3.0, 0.0, 0.0);
        glGetFloatv(GL_MODELVIEW_MATRIX, &matrix[0][0]);
    
        cout << endl << endl << "Matriz: " << endl;
        for (int i = 0; i != 4; i++)
        {
            for (int j = 0; j != 4; j++)
                cout << matrix[i][j] << "  ";
    
            cout << endl;
        }
    
        glPopMatrix();
    Porque é que o conteúdo da matriz "matrix" é

    Código:
    1 0 0 0
    0 1 0 0
    0 0 1 0
    0 0 0 1
    E não

    Código:
    1 0 0 3
    0 1 0 0
    0 0 1 0
    0 0 0 1
    ? Não estou mesmo a perceber.
     
  6. jahred

    jahred Power Member

    tens que dizer ao opengl sobre que matriz fazer as operações, falta-te glMatrixMode( GL_MODELVIEW ); e não precisas de fazer glPushMatrix nem glPopMatrix...

    Código:
    glMatrixMode( GL_MODELVIEW );
        glLoadIdentity();
        glTranslatef(3.0, 0.0, 0.0);
        glGetFloatv(GL_MODELVIEW_MATRIX, &matrix[0][0]);
    
    	cout << endl << endl << "Matriz: " << endl;
        for (int a = 0; a != 4; a++)
        {
            for (int b = 0; b != 4; b++)
                cout << matrix[a][b] << "  ";
    
            cout << endl;
        }
    
    tanto é que glGetFloatv(GL_MODELVIEW_MATRIX é mesmo pra pegar na matriz MODELVIEW.

    se estiveres na dúvida porque é que não aparece

    Código:
    1 0 0 3
    0 1 0 0
    0 0 1 0
    0 0 0 1
    
    mas sim

    Código:
    1 0 0 0
    0 1 0 0
    0 0 1 0
    3 0 0 1
    
    é porque é do próprio opengl ocupar as posições 13 14 e 15 da matriz (de 1 a 16):

     
    Última edição: 12 de Novembro de 2008
  7. OubeLa

    OubeLa Power Member

    Infelizmente não me resolveu o problema, continua a aparecer

    1 0 0 0
    0 1 0 0
    0 0 1 0
    0 0 0 1

    Alguma ideia? Obrigado pela ajuda ;)
     
  8. jahred

    jahred Power Member

    lamento, mas deve ser algum problema teu... porque eu testei o teu código e de facto não deu... acrescentei ao teu código aquela linha e deu... limitei-me a acrescentar ao teu código aquilo...
     
  9. OubeLa

    OubeLa Power Member

    Já sei porque é que não dava, era um problema de estar a usar display lists.

    Já agora, tenho outra dúvida: eu tenho uma função recursiva, e o que quero é guardar sempre as transformações a cada chamada. A maneira como guardo a transformação actual é como está aí, mas como é que vou actualizando? Uso a função glMultMatrixf()? Depois surge-me outra dúvida: tenho de na mesma fazer o glMatrixMode(GL_MODELVIEW); ?
     
  10. OubeLa

    OubeLa Power Member

    Já consegui resolver. É usar o glGetFloatv e, também, o glMultMatrix() para ir multiplicando a matriz. Obrigado pela ajuda ;)
     

Partilhar esta Página