Closed luismrsilva closed 9 years ago
Ideia: usar módulo da velocidade pra mudar a altura da camara.
Eis a minha soluçao.
void CarCamera::update() {
const auto xy_offset = _car->getOrientation().normalized()
* _car->_bottom_length * (-3);
const auto z_offset = Vector3( 0, 0,
(_car->_bottom_height + _car->_top_height) * 2 );
setPosition(_car->getPosition() + xy_offset + z_offset);
setCenter(_car->getPosition() + _car->getOrientation());
Camera::update(); // calculate matrixes
}
Sendo orientation a orientação do carro, ou seja, um vetor que diz:
Tendo em conta que não têm o vetor orientation, a solução do @luismrsilva não me parece muito má.
Ficou fácil de fazer depois de resolver o #16.
Agora a posição da câmara é:
pos // pos do carro
+ Vector3(0, 0, 0.3 + speed*0.25) // aumeta Z com a velocidade
- speed_v * 0.5 // afasta-se com a velocidade
- Vector3(0.5, _car->getXYAngle() // mantem distancia minima ao carro
Ou seja, a câmara segue o carro com uma distância mínima de 0.5. Para além disso, afasta-se do carro à medida que a velocidade aumenta (com fator de 0.5). No Z, tem altura mínima de 0.3 e sobre com o módulo da velocidade (com fator de 0.25).
Deve-se ao facto de a posição da camara ser pos_carro-speed_carro; Quando speed é nulo, a camara fica na mesma posição que o carro e não se vê nada.
Sugestão de solução: distância mínima entre a camara e o carro; Posição da camara passa a ser (d_min + pos_carro - speed_carro); Problema: não é fácil fazer as contas. Ver #16 .