public void CalculatePositionTarget(out TGCVector3 pos, out TGCVector3 targetCenter) { targetCenter = TGCVector3.Add(Target, TargetDisplacement); var m = TGCMatrix.Translation(0, OffsetHeight, OffsetForward) * TGCMatrix.RotationY(RotationY) * TGCMatrix.Translation(targetCenter); pos = new TGCVector3(m.M41, m.M42, m.M43); }
/// <summary> /// Configurar valores de posicion y tamaño en forma conjunta /// </summary> /// <param name="position">Centro de la caja</param> /// <param name="size">Tamaño de la caja</param> public void setPositionSize(TGCVector3 position, TGCVector3 size) { var radius = TGCVector3.Scale(size, 0.5f); PMin = TGCVector3.Subtract(position, radius); PMax = TGCVector3.Add(position, radius); }
/// <summary> /// Genera la proxima matriz de view, sin actualizar aun los valores internos /// </summary> /// <param name="pos">Futura posicion de camara generada</param> /// <param name="targetCenter">Futuro centro de camara a generada</param> public void CalculatePositionTarget(out TGCVector3 pos, out TGCVector3 targetCenter) { //alejarse, luego rotar y lueg ubicar camara en el centro deseado targetCenter = TGCVector3.Add(Target, TargetDisplacement); var m = TGCMatrix.Translation(0, OffsetHeight, OffsetForward) * TGCMatrix.RotationY(RotationY) * TGCMatrix.Translation(targetCenter); //Extraer la posicion final de la matriz de transformacion pos = new TGCVector3(m.M41, m.M42, m.M43); }
/// <summary> /// Construye la grilla /// </summary> private GrillaRegularNode[,,] buildGrid(List <TgcMesh> modelos, TgcBoundingAxisAlignBox sceneBounds, TGCVector3 cellDim) { var sceneSize = sceneBounds.calculateSize(); var gx = (int)FastMath.Ceiling(sceneSize.X / cellDim.X) + 1; var gy = (int)FastMath.Ceiling(sceneSize.Y / cellDim.Y) + 1; var gz = (int)FastMath.Ceiling(sceneSize.Z / cellDim.Z) + 1; var grid = new GrillaRegularNode[gx, gy, gz]; //Construir grilla for (var x = 0; x < gx; x++) { for (var y = 0; y < gy; y++) { for (var z = 0; z < gz; z++) { //Crear celda var node = new GrillaRegularNode(); //Crear BoundingBox de celda var pMin = new TGCVector3(sceneBounds.PMin.X + x * cellDim.X, sceneBounds.PMin.Y + y * cellDim.Y, sceneBounds.PMin.Z + z * cellDim.Z); var pMax = TGCVector3.Add(pMin, cellDim); node.BoundingBox = new TgcBoundingAxisAlignBox(pMin, pMax); //Cargar modelos en celda node.Models = new List <TgcMesh>(); addModelsToCell(node, modelos); grid[x, y, z] = node; } } } return(grid); }
/// <summary> /// Actualiza el BoundingBox de la caja. /// No contempla rotacion /// </summary> private void updateBoundingBox() { var midSize = TGCVector3.Scale(size, 0.5f); BoundingBox.setExtremes(TGCVector3.Subtract(translation, midSize), TGCVector3.Add(translation, midSize)); }
/// <summary> /// Centro del Bounding Box /// </summary> public TGCVector3 calculateBoxCenter() { var axisRadius = calculateAxisRadius(); return(TGCVector3.Add(pMin, axisRadius)); }
private void updateBB() { var r = new TGCVector3(mesh.Radius, mesh.Radius, mesh.Radius); bb.setExtremes(TGCVector3.Subtract(mesh.Position, r), TGCVector3.Add(mesh.Position, r)); }
public void Move(TGCVector3 v) { positionEye.Add(v); cameraFinalTarget.Add(v); }
public void move(TGCVector3 v) { eye.Add(v); target.Add(v); }