コード例 #1
0
ファイル: TPCamera.cpp プロジェクト: graemebr/Camera-Models
void TPCamera::update()
{
	look = glm::vec3(character->getPosition().x, height, character->getPosition().y);

	glm::vec3 newEye(character->getPosition().x - character->getFacing().x*3.7, height + 1.0, character->getPosition().y - character->getFacing().y*3.7);
	newEye = checkCollisionWithSquares(newEye, houseLocations, houseWidth / 2);
	newEye = checkCollisionWithSquares(newEye, treeLocations, treeRadius);
	eye = newEye;
}
コード例 #2
0
/**********************************
now i use the first 4 cameras to update the view, because these 4 cameras locate in the same side.  
void gluLookAt(	GLdouble eyeX,
GLdouble eyeY,
GLdouble eyeZ,
GLdouble centerX,
GLdouble centerY,
GLdouble centerZ,
GLdouble upX,
GLdouble upY,
GLdouble upZ);
第一组eyex, eyey,eyez 相机在世界坐标的位置
第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置
第三组upx,upy,upz 相机向上的方向在世界坐标中的方向
你把相机想象成为你自己的脑袋:
第一组数据就是脑袋的位置
第二组数据就是眼睛看的物体的位置
第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体)。

**********************************/
void ThreeDWidget::UpdateView()
{
	int minCamera = _numCameras > 4 ? 4 : _numCameras;
	Vector3f newEye(0, 0, 0);
	Vector3f newCenter(0, 0, 0);
	for(int i = 0; i < minCamera; i++)
	{
		newEye += _cameraCenters[i];
	}
	newEye(0, 0) = newEye(0, 0) / minCamera * 3;
	newEye(1, 0) /= newEye(1, 0) / minCamera * 3;
	newEye(2, 0) = newEye(2, 0) / minCamera * 3;
	newCenter(1, 0) = newEye(1, 0) / 2;

	//set view
	_eye.x = newEye(0, 0);
	_eye.y = newEye(1, 0);
	_eye.z = newEye(2, 0);
	_center.x = newCenter(0, 0);
	_center.y = newCenter(1, 0);
	_center.z = newCenter(2, 0);
}