void TerrainRenderer::render(){ updateMatricies(); float cam_x, cam_y, cam_z; cameraManager->getPos(&cam_x, &cam_y, &cam_z); //Test code /*QuadTreeNode *cursor = quadTree->root; while(cursor->tlNode){ cursor = cursor->tlNode; } drawHeightmap(0.0, 0.0, 1.0, cursor->heightmap);*/ QuadTreeNode *r = quadTree->root; drawNode(0.0, 0.0, 1.0, r); /* printf("Camera: (%f, %f, %f)\n", cam_x, cam_y, cam_z); if(isVisible(0.0, 0.0, 0.0, 1.0, 1.0)){ printf("Visible!\n"); glutSolidCube(1.0f); }*/ }
void Camera3D::moveRelative ( float dx, float dy, float dz ) { Vector3DF vec ( dx, dy, dz ); vec *= invrot_matrix; to_pos += vec; from_pos += vec; updateMatricies (); }
void Camera3D::setAngles ( float ax, float ay, float az ) { ang_euler = Vector3DF(ax,ay,az); to_pos.x = from_pos.x - cos ( ang_euler.y * DEGtoRAD ) * sin ( ang_euler.x * DEGtoRAD ) * mDolly; to_pos.y = from_pos.y - sin ( ang_euler.y * DEGtoRAD ) * mDolly; to_pos.z = from_pos.z - cos ( ang_euler.y * DEGtoRAD ) * cos ( ang_euler.x * DEGtoRAD ) * mDolly; updateMatricies (); }
void Camera3D::moveToPos ( float tx, float ty, float tz ) { to_pos += Vector3DF(tx,ty,tz); float dx, dy, dz; dx = cos ( ang_euler.y * DEGtoRAD ) * sin ( ang_euler.x * DEGtoRAD ) ; dy = sin ( ang_euler.y * DEGtoRAD ); dz = cos ( ang_euler.y * DEGtoRAD ) * cos ( ang_euler.x * DEGtoRAD ); from_pos.x = to_pos.x + dx * mOrbitDist; from_pos.y = to_pos.y + dy * mOrbitDist; from_pos.z = to_pos.z + dz * mOrbitDist; updateMatricies (); }
void Camera3D::moveOrbit ( float ax, float ay, float az, float dd ) { ang_euler += Vector3DF(ax,ay,az); mOrbitDist += dd; float dx, dy, dz; dx = cos ( ang_euler.y * DEGtoRAD ) * sin ( ang_euler.x * DEGtoRAD ) ; dy = sin ( ang_euler.y * DEGtoRAD ); dz = cos ( ang_euler.y * DEGtoRAD ) * cos ( ang_euler.x * DEGtoRAD ); from_pos.x = to_pos.x + dx * mOrbitDist; from_pos.y = to_pos.y + dy * mOrbitDist; from_pos.z = to_pos.z + dz * mOrbitDist; updateMatricies (); }
void Camera3D::setOrbit ( float ax, float ay, float az, Vector3DF tp, float dist, float dolly ) { ang_euler.Set ( ax, ay, az ); mOrbitDist = dist; mDolly = dolly; float dx, dy, dz; dx = cos ( ang_euler.y * DEGtoRAD ) * sin ( ang_euler.x * DEGtoRAD ) ; dy = sin ( ang_euler.y * DEGtoRAD ); dz = cos ( ang_euler.y * DEGtoRAD ) * cos ( ang_euler.x * DEGtoRAD ); from_pos.x = tp.x + dx * mOrbitDist; from_pos.y = tp.y + dy * mOrbitDist; from_pos.z = tp.z + dz * mOrbitDist; to_pos.x = from_pos.x - dx * mDolly; to_pos.y = from_pos.y - dy * mDolly; to_pos.z = from_pos.z - dz * mDolly; updateMatricies (); }
Camera3D::Camera3D () { mProjType = Perspective; mWire = 0; up_dir.Set ( 0.0, 1.0, 0 ); // frustum params mAspect = 800/600.0; mDolly = 5.0; mFov = 40.0; mNear = 0.1; mFar = 6000.0; mTile.Set ( 0, 0, 1, 1 ); for (int n=0; n < 8; n++ ) mOps[n] = false; mOps[0] = false; // mOps[0] = true; // mOps[1] = true; setOrbit ( 0, 45, 0, Vector3DF(0,0,0), 120.0, 5.0 ); updateMatricies (); }