Skip to content

Commit

Permalink
Numen new classes signed by Me
Browse files Browse the repository at this point in the history
Update calculation optimized, and used in necessary cases.
Vertex array in BoundingBox
  • Loading branch information
agustindev committed Aug 20, 2012
1 parent 8ba234c commit c8688a8
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 82 deletions.
75 changes: 54 additions & 21 deletions src/min3d/core/BoundingBox.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
package min3d.core;

import android.util.Log;
import numen.algorithms.Algorithms;
import numen.algorithms.Geo3dAlgorithms;
import numen.algorithms.Quaternions;
import min3d.vos.Number3d;

/**Agustin Gandara - Numen Library**/

public class BoundingBox{

//8 vertex
protected Number3d[] vertex;
/**Vertex array ORDER**//*
protected Number3d mmm;
protected Number3d mmM;
protected Number3d mMm;
protected Number3d mMM;
protected Number3d Mmm;
protected Number3d MmM;
protected Number3d MMm;
protected Number3d MMM;
protected Number3d MMM;*/

private Number3d center;
private Number3d Max;
Expand All @@ -29,15 +32,32 @@ public BoundingBox(Number3d number) {
this.Max = new Number3d(number.x, number.y, number.z);//= center.clone();
this.MinUpdated = center.clone();
this.MaxUpdated = center.clone();
this.vertex = new Number3d[8];
this.createBox();
}

public boolean existsCameraVoCollition(Object3d obj, Number3d positionNew, Number3d targetNew){

public BoundingBox() {
this.center = new Number3d(0, 0, 0);
this.Min = center.clone();
this.Max = center.clone();
this.MinUpdated = center.clone();
this.MaxUpdated = center.clone();
this.vertex = new Number3d[8];
}

public void updateValues(Object3d obj){
float[] euler = {obj.rotation().x, obj.rotation().z, obj.rotation().y};
float[] quat = Quaternions.getQuatFromEuler(euler);

this.createBox();
//this.createBox();
this.updateBox(obj.position(), quat, obj.scale());
}

public boolean existsCameraVoCollition(Number3d positionNew, Number3d targetNew){

//float[] euler = {obj.rotation().x, obj.rotation().z, obj.rotation().y};
//float[] quat = Quaternions.getQuatFromEuler(euler);
//this.createBox();
//this.updateBox(obj.position(), quat, obj.scale());

/*Log.d("minx-nup", String.valueOf(Min.x));
Log.d("miny-nup", String.valueOf(Min.y));
Expand Down Expand Up @@ -77,6 +97,8 @@ public void addVertex(Number3d number){
else if(number.y > Max.y) Max.y = number.y;
if(number.z < Min.z) Min.z = number.z;
else if(number.z > Max.z) Max.z = number.z;

this.createBox();
}

public void resetVertexToUpdate(Number3d number){
Expand All @@ -94,17 +116,29 @@ public void addVertexToUpdate(Number3d number){
}

public void createBox(){
this.mmm = new Number3d(Min.x, Min.y, Min.z);

this.vertex[0] = new Number3d(Min.x, Min.y, Min.z);
this.vertex[1] = new Number3d(Min.x, Min.y, Max.z);
this.vertex[2] = new Number3d(Min.x, Max.y, Min.z);
this.vertex[3] = new Number3d(Min.x, Max.y, Max.z);
this.vertex[4] = new Number3d(Max.x, Min.y, Min.z);
this.vertex[5] = new Number3d(Max.x, Min.y, Max.z);
this.vertex[6] = new Number3d(Max.x, Max.y, Min.z);
this.vertex[7] = new Number3d(Max.x, Max.y, Max.z);
/*this.mmm = new Number3d(Min.x, Min.y, Min.z);
this.mmM = new Number3d(Min.x, Min.y, Max.z);
this.mMm = new Number3d(Min.x, Max.y, Min.z);
this.mMM = new Number3d(Min.x, Max.y, Max.z);
this.Mmm = new Number3d(Max.x, Min.y, Min.z);
this.MmM = new Number3d(Max.x, Min.y, Max.z);
this.MMm = new Number3d(Max.x, Max.y, Min.z);
this.MMM = new Number3d(Max.x, Max.y, Max.z);
this.MMM = new Number3d(Max.x, Max.y, Max.z);*/
}

public void updateBox(Number3d position, float[] rotation, Number3d scale){
for(int i = 0 ; i< this.vertex.length ; i++)
this.updatePoint(i, position, rotation, scale);
/*
this.mmm = this.updatePoint(this.mmm, position, rotation, scale);
this.resetVertexToUpdate(this.mmm);
this.mmM = this.updatePoint(this.mmM, position, rotation, scale);
Expand All @@ -121,26 +155,25 @@ public void updateBox(Number3d position, float[] rotation, Number3d scale){
this.addVertexToUpdate(this.MMm);
this.MMM = this.updatePoint(this.MMM, position, rotation, scale);
this.addVertexToUpdate(this.MMM);
*/
}

public Number3d updatePoint(Number3d point, Number3d position, float[] rotation, Number3d scale){
public void updatePoint(int i, Number3d position, float[] rotation, Number3d scale){

//Rotation
/*Log.d("minx", String.valueOf(point.x));
Log.d("miny", String.valueOf(point.y));
Log.d("minz", String.valueOf(point.z));*/
Number3d newPoint = Quaternions.rotatePoint(point, rotation);
/*Log.d("minx-up", String.valueOf(point.x));
Log.d("miny-up", String.valueOf(point.y));
Log.d("minz-up", String.valueOf(point.z));*/
Number3d newPoint = Quaternions.rotatePoint(this.vertex[i], rotation);
//Scale
newPoint.x = Algorithms.scale(newPoint.x, scale.x);
newPoint.y = Algorithms.scale(newPoint.y, scale.y);
newPoint.z = Algorithms.scale(newPoint.z, scale.z);
newPoint.x = Geo3dAlgorithms.scale(newPoint.x, scale.x);
newPoint.y = Geo3dAlgorithms.scale(newPoint.y, scale.y);
newPoint.z = Geo3dAlgorithms.scale(newPoint.z, scale.z);
//Position
newPoint.x += position.x;
newPoint.y += position.y;
newPoint.z += position.z;
//SaveVertex
//this.vertex[i] = newPoint;

return newPoint;
if(i == 0) this.resetVertexToUpdate(newPoint);
else this.addVertexToUpdate(newPoint);
}
}
61 changes: 19 additions & 42 deletions src/min3d/core/Object3dContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ public Object3dContainer()
* Subclass Object3dContainer instead of Object3d if you
* believe you may want to add children to that object.
*/
public Object3dContainer(int $maxVerts, int $maxFaces)
{
public Object3dContainer(int $maxVerts, int $maxFaces) {
super($maxVerts, $maxFaces, true,true,true);
}

Expand Down Expand Up @@ -82,76 +81,54 @@ public Object3d getChildAt(int $index)
/**
* X/Y/Z position of object.
*/

/*public void positionPlus(float x, float y, float z){
public void positionPlus(float x, float y, float z){
_position.x += x;
_position.y += y;
_position.z += z;
//boundingBox.updateValues(this);
//Dinamic collitions - Plus funciton into object Container
for(int i = 0; i< this.numChildren();i++){
//this.getChildAt(i).boundingBox.positionPlus(x, y, z);
}
for(int i = 0; i< this.numChildren();i++)
this.getChildAt(i).boundingBox.updateValues(this);
}

public void positionPlus(Number3d plus){
_position.x += plus.x;
_position.y += plus.y;
_position.z += plus.z;
//Dinamic collitions - Plus funciton into object Container
for(int i = 0; i< this.numChildren();i++){
//this.getChildAt(i).boundingBox.positionPlus(plus.x, plus.y, plus.z);
}
}*/
positionPlus(plus.x, plus.y, plus.z);
}

/**
* X/Y/Z euler rotation of object, using Euler angles.
* Units should be in degrees, to match OpenGL usage.
*/
/*public void rotationPlus(float x, float y, float z){
public void rotationPlus(float x, float y, float z){
_rotation.x += x;
_rotation.y += y;
_rotation.z += z;
//boundingBox.updateValues(this);
//Dinamic collitions - Plus funciton into object Container
for(int i = 0; i< this.numChildren();i++){
//this.getChildAt(i).boundingBox.rotationPlus(x, y, z);
}
for(int i = 0; i< this.numChildren();i++)
this.getChildAt(i).boundingBox.updateValues(this);
}

public void rotationPlus(Number3d plus){
_rotation.x += plus.x;
_rotation.y += plus.y;
_rotation.z += plus.z;
//Dinamic collitions - Plus funciton into object Container
for(int i = 0; i< this.numChildren();i++){
//this.getChildAt(i).boundingBox.rotationPlus(plus.x, plus.y, plus.z);
}
}*/
rotationPlus(plus.x, plus.y, plus.z);
}

/**
* X/Y/Z scale of object.
*/

/*public void scalePlus(float x, float y, float z){
public void scalePlus(float x, float y, float z){
_scale.x += x;
_scale.y += y;
_scale.z += z;
//boundingBox.updateValues(this);
//Dinamic collitions - Plus funciton into object Container
for(int i = 0; i< this.numChildren();i++){
//this.getChildAt(i).boundingBox.scalePlus(x, y, z);
}
for(int i = 0; i< this.numChildren();i++)
this.getChildAt(i).boundingBox.updateValues(this);
}

public void scalePlus(Number3d plus){
_scale.x += plus.x;
_scale.y += plus.y;
_scale.z += plus.z;
//Dinamic collitions - Plus funciton into object Container
for(int i = 0; i< this.numChildren();i++){
//this.getChildAt(i).boundingBox.scalePlus(plus.x, plus.y, plus.z);
}
}*/
scalePlus(plus.x, plus.y, plus.z);
}

/**
* TODO: Use better lookup
Expand Down
9 changes: 4 additions & 5 deletions src/min3d/vos/CameraVoCollition.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@
import min3d.core.Object3d;
import min3d.core.Object3dContainer;

/**
* Encapsulates camera-related properties, including view frustrum.
*/
/**Agustin Gandara - Numen Library**/

public class CameraVoCollition extends CameraVo
{
ArrayList<Object3d> children;
Expand Down Expand Up @@ -57,13 +56,13 @@ private boolean existsCollition(Number3d positionNew, Number3d targetNew){
//Log.d("VERTEX", "INTERNAL");
if(obj instanceof Object3dContainer){
for (Object3d subObj : ((Object3dContainer) obj).children){
if(subObj.boundingBox.existsCameraVoCollition(obj, positionNew, targetNew)){
if(subObj.boundingBox.existsCameraVoCollition(positionNew, targetNew)){
colision = true;
break;
}
}
}else if(obj instanceof Object3d){
if(obj.boundingBox.existsCameraVoCollition(obj, positionNew, targetNew)) {
if(obj.boundingBox.existsCameraVoCollition(positionNew, targetNew)) {
colision = true;
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import min3d.Utils;

public class Algorithms {
/**Agustin Gandara - Numen Library**/

public class Geo3dAlgorithms {

//Scale Point Module
public static float scale(float moduleDimensionOne, float scale){
Expand Down
20 changes: 11 additions & 9 deletions src/numen/controllers/AnalogController.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package numen.controllers;

import numen.algorithms.Algorithms;
import numen.algorithms.Geo3dAlgorithms;
import min3d.core.Scene;
import min3d.vos.Number3d;
import android.view.MotionEvent;

/**Agustin Gandara - Numen Library**/

public class AnalogController {

//Controller
Expand All @@ -27,7 +29,7 @@ public class AnalogController {
private float dySecondary;
private boolean touchposition;
//Controllers constant
private final float degsens = 1.2f;
private final float degsens = 1.9f;
private final float movsens = 0.12f;
private final float spercent = 0.40f;
private final int degylimit = 25;
Expand Down Expand Up @@ -150,9 +152,9 @@ public void onUpdateControlRotation(){
this.degy -= (degsens/(area*spercent))*(this.dy-(area*(1-spercent)));
}

plus.x = Algorithms.rotationXAngle(degx);//(float)Math.cos(degx*Utils.DEG);
plus.z = Algorithms.rotationZAngle(degx);//(float)Math.sin(degx*Utils.DEG);
plus.y = Algorithms.rotationYAngle(degy);//(float)Math.sin(degy*Utils.DEG);
plus.x = Geo3dAlgorithms.rotationXAngle(degx);//(float)Math.cos(degx*Utils.DEG);
plus.z = Geo3dAlgorithms.rotationZAngle(degx);//(float)Math.sin(degx*Utils.DEG);
plus.y = Geo3dAlgorithms.rotationYAngle(degy);//(float)Math.sin(degy*Utils.DEG);
//scene.camera().target.x = scene.camera().position.x + (float)Math.cos(degx*Utils.DEG);
//scene.camera().target.z = scene.camera().position.z + (float)Math.sin(degx*Utils.DEG);
//scene.camera().target.y = scene.camera().position.y + (float)Math.sin(degy*Utils.DEG);
Expand Down Expand Up @@ -187,21 +189,21 @@ public void onUpdateControlPosition(){
}
//Update position up/down
//trigonometry = variationy * (float)Math.cos(degx*Utils.DEG);
plus.x += Algorithms.positionXFowardBack(variationy, degx);//trigonometry;
plus.x += Geo3dAlgorithms.positionXFowardBack(variationy, degx);//trigonometry;
//scene.camera().position.x += trigonometry;
//scene.camera().target.x += trigonometry;
//trigonometry = variationy * (float)Math.sin(degx*Utils.DEG);
plus.z += Algorithms.positionZFowardBack(variationy, degx);//trigonometry;
plus.z += Geo3dAlgorithms.positionZFowardBack(variationy, degx);//trigonometry;
//scene.camera().position.z += trigonometry;
//scene.camera().target.z += trigonometry;

//Update position left/rigth
//trigonometry = variationx * (float)Math.cos((degx*Utils.DEG)-90);
plus.x += Algorithms.positionXLeftRight(variationx, degx);//trigonometry;
plus.x += Geo3dAlgorithms.positionXLeftRight(variationx, degx);//trigonometry;
//scene.camera().position.x += trigonometry;
//scene.camera().target.x += trigonometry;
//trigonometry = variationx * (float)Math.sin((degx*Utils.DEG)-90);
plus.z += Algorithms.positionZLeftRight(variationx, degx);//trigonometry;
plus.z += Geo3dAlgorithms.positionZLeftRight(variationx, degx);//trigonometry;
//scene.camera().position.z += trigonometry;
//scene.camera().target.z += trigonometry;

Expand Down
12 changes: 8 additions & 4 deletions src/numen/main/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import javax.microedition.khronos.opengles.GL10;

/**Agustin Gandara - Numen**/

import numen.controllers.AnalogController;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
Expand Down Expand Up @@ -57,10 +59,12 @@ public void initScene(GL10 gl) {

//Objects
this.object = parser.getParsedObject();
this.object.position().x += 1f;
this.object.position().y += -1.3f;
this.object.rotation().x += -90;
this.object.rotation().z += 45;
this.object.positionPlus(1f, -1.3f, 0);
//this.object.position().x += 1f;
//this.object.position().y += -1.3f;
this.object.rotationPlus(-90, 0, 45);
//this.object.rotation().x += -90;
//this.object.rotation().z += 45;
this.scene.addChild(object);
}

Expand Down

0 comments on commit c8688a8

Please sign in to comment.