Curvas Catmull Rom e B-Spline em opengl C++

Tiberium Wolf

Power Member
Estou a fazer 1 trab em opengl no visual studio .net e nao tou a conseguir fazer as curvas Catmull Rom e B-Spline. Ja fiz a de Bezier mas estas duas nao sei como fazer. Supostamente sao so umas quantas linhas de codigo mas nao tou a ver como.

A de Bezier bastou me.

glMap1f(GL_MAP1_VERTEX_3, 0.0f, 1.0f, 3, 4, points);
glEnable(GL_MAP1_VERTEX_3);

glBegin (GL_LINE_STRIP);
for(j = 0; j <= 30; j++)
{
glEvalCoord1f ((float)j / 30.0f);
}
glEnd();


points -> vector de GLfloat 3*max_pontos onde guardo os pontos de controlo.

No enunciado do meu trab diz:
"A avaliação de todas as curvas cúbicas deverá utilizar o avaliador glEvalCoord1f() de OpenGL para curvas de Bézier, acompanhando-se da função glMap1f() e de glEnable(GL_MAP1_VERTEX_3)."





Ja agora tenho outra linha:
"Para um mesmo tipo de curva, à excepção da poligonal, os troços serão alternadamente desenhados com uma de duas cores diferentes mas de igual tonalidade (hue)."

Igual tonalidade ???
 
Calma jovem, só passaram umas horas...

No ano passado fiz esse trabalho numa cadeira na faculdade, o pedaço de código que apresentas não mostra nada do que é necessário, mas julgo que sei qual o teu problema.

O vector geométrico de uma curva de Bézier é bem diferente das Catmull Rom e B-Spline, não te deves guiar pelo código da primeira. A parte que apresentas deve ser igual em todas, no entanto a forma como a mesma é chamada é que já muda.

2 troços de Bézier só partilham do ponto de interpolação, os outros pontos não afectam o troço um do outro, isto é, imagina que tens 7 pontos [A B C D E F G], o Troço 1 tem o vector geométrico [A B C D] e o segundo troço tem o vector geométrico [D E F G].

Quanto a Catmull Rom e B-Spline a coisa já muda, cada 2 troços partilham de 3 pontos em comum, isto é, com 7 pontos fazes 4 troços, repara:
[A B C D]
[B C D E]
[C D E F]
[D E F G]

O teu problema está na forma de invocar a função que apresentas, que aparentemente está bem, não é nessa função.

Espero ter ajudado em alguma coisa ;)
 
Bem... isso ja eu sei. Neste ano a cadeira mudou. O codigo do ano passado nós tinhamos que fazer multiplicacoes das matrizes com o Q(t) e B(t) das curvas. Suppostamente agora é diferente usando funçoes do opengl para o efeito. O problema é que eu nao sei quais e como.
 
Back
Topo