Log in or register to post comments

Rendering Lines

April 14, 2012 - 5:51am #1

Hi Qulacomm community!
I worked a little bit on my AR-App for my Bachelor Thesis.
I tried several things, with mixed results.
First I calculated a natural cubic spline for some nice looking movements. Theoretical a nice idea, practical a absolute distaster :).

Then I wanted to improve my Tap-Event with a ray picking solution.

I Managed to get a BoundingBox from an Object at runtime:

void 
calculateBoundingBox()
{
int i = 0;
float MaxX = uSchiffOneTextureVerts[i] , MinX = uSchiffOneTextureVerts[i] , MaxY = uSchiffOneTextureVerts[i+1] , MinY = uSchiffOneTextureVerts[i+1] , MaxZ = uSchiffOneTextureVerts[i+2] , MinZ = uSchiffOneTextureVerts[i+2];

	for (i = 0; i < (uSchiffOneTextureNumVerts); i+=3)
	{
		//Min/Max Berechnung für die X Werte innerhalb des Float Arrays
		if (uSchiffOneTextureVerts[i] <= MinX)
		{
			MinX = uSchiffOneTextureVerts[i];
		} else if (uSchiffOneTextureVerts[i] > MaxX)
		{
			MaxX = uSchiffOneTextureVerts[i];
		}
		
		//Min/Max Berechnung für die Y Werte innerhalb des Float Arrays
		if (uSchiffOneTextureVerts[i+1] <= MinY)
		{
			MinY = uSchiffOneTextureVerts[i+1];
		} else if (uSchiffOneTextureVerts[i+1] > MaxY)
		{
			MaxY = uSchiffOneTextureVerts[i+1];
		}
		
		//Min/Max Berechnung für die Z Werte innerhalb des Float Arrays
		if (uSchiffOneTextureVerts[i+2] <= MinZ)
		{
			MinZ = uSchiffOneTextureVerts[i+2];
		} else if (uSchiffOneTextureVerts[i+2] > MaxZ)
		{
			MaxZ = uSchiffOneTextureVerts[i+2];
		}
		
	}

	LOG("MinX: %f, MaxX: %f, MinY: %f, MaxY: %f, MinZ: %f, MaxZ: %f",MinX, MaxX, MinY, MaxY, MinZ, MaxZ);

	float BB[] = {
	//front
	MaxX, MaxY, MaxZ, //P7
	MaxX, MinY, MaxZ, //P3
	MinX, MaxY, MaxZ, //P1
	
	MinX, MinY, MaxZ, //P5
	MinX, MaxY, MaxZ, //P1
	MaxX, MinY, MaxZ, //P3
	
	//back
	MaxX, MaxY, MinZ, //P8
	MaxX, MinY, MinZ, //P4
	MinX, MaxY, MinZ, //P2
	
	MinX, MinY, MinZ, //P6
	MinX, MaxY, MinZ, //P2
	MaxX, MinY, MinZ, //P4
	
	//top
	MaxX, MaxY, MaxZ, //P7
	MinX, MaxY, MaxZ, //P1
	MinX, MaxY, MinZ, //P2
	
	MaxX, MaxY, MinZ, //P8
	MaxX, MaxY, MaxZ, //P7
	MinX, MaxY, MinZ, //P2
	
	//bottom
	MaxX, MinY, MaxZ, //P3
	MinX, MinY, MaxZ, //P5
	MinX, MinY, MinZ, //P6
	
	MaxX, MinY, MinZ, //P4
	MaxX, MinY, MaxZ, //P3
	MinX, MinY, MinZ, //P6
	
	//right
	MaxX, MaxY, MaxZ, //P7
	MaxX, MinY, MaxZ, //P3
	MaxX, MinY, MinZ, //P4
	
	MaxX, MaxY, MinZ, //P8
	MaxX, MinY, MinZ, //P4
	MaxX, MaxY, MaxZ, //P7
	
	//left
	MaxX, MaxY, MaxZ, //P1
	MaxX, MinY, MaxZ, //P5
	MaxX, MinY, MinZ, //P6
	
	MaxX, MaxY, MinZ, //P2
	MaxX, MinY, MinZ, //P6
	MaxX, MaxY, MaxZ  //P1
	
	};
	
	int size = sizeof(BB) / sizeof(float);
	LOG("Size: %i",size);
	
	for(int count=0; count < size ; count++)
	{
	LOG("Size: %i",count);
	BBUebergabe[count] = BB[count];
	};
}

Any Improvements are welcome!

With the gathered vertices i tried to draw colored triangles:

My actual purpose is to implement a ray-box-intersection. In fact that the 2D solution makes a lot of problems, if the 3D-Object is watched from the side.

I copied two methods from the domino example

  • projectScreenPointToPlane
  • linePlaneIntersection

I solved the actual Tap-Event a little bit different than in the domino example, anywhere.

I implemented a lot of Log messages for some tests .

Quote:

04-14 12:23:16.070: I/IMAGE_TARGETS(944): MinX: -0.072848, MaxX: 0.069527, MinY: -0.175295, MaxY: 0.082582, MinZ: -0.258850, MaxZ: 0.222944
04-14 12:23:16.070: I/IMAGE_TARGETS(944): Size: 108

04-14 12:23:17.200: I/IMAGE_TARGETS(944): Configure Video Background : Video (640,480), Screen (480,800), mSize (600,800)
04-14 12:23:17.430: I/IMAGE_TARGETS(944): getFocalLength(): 617.117981, 618.848022
04-14 12:23:17.430: I/IMAGE_TARGETS(944): getPrincipalPoint(): 320.000000, 240.000000
04-14 12:23:17.430: I/IMAGE_TARGETS(944): getDistortionParameters(): 0.154197, -0.377212, -0.001747, -0.000489

04-14 12:23:19.960: I/IMAGE_TARGETS(944): tapx: 169.857819, tapy: 366.257507

04-14 12:23:19.960: I/IMAGE_TARGETS(944): halfScreenWidth: 240.000000
04-14 12:23:19.960: I/IMAGE_TARGETS(944): halfScreenHeight: 400.000000

04-14 12:23:19.960: I/IMAGE_TARGETS(944): halfViewportWidth: 300.000000
04-14 12:23:19.960: I/IMAGE_TARGETS(944): halfViewportHeight: 400.000000

04-14 12:23:19.960: I/IMAGE_TARGETS(944): x: -0.233807
04-14 12:23:19.960: I/IMAGE_TARGETS(944): y: 0.084356

04-14 12:23:19.960: I/IMAGE_TARGETS(944): lineStart.data[0]: -0.361336, lineStart.data[1]: 0.717794, lineStart.data[2]: 0.337030

04-14 12:23:19.960: I/IMAGE_TARGETS(944): lineEnd.data[0]: 3.171073, lineEnd.data[1]: -7.679066, lineEnd.data[2]: -3.885688

04-14 12:23:19.960: I/IMAGE_TARGETS(944): intersection.data[0]: -0.079402, intersection.data[1]: 0.047611, intersection.data[2]: 0.000000

//2D Solution.
04-14 12:23:19.960: I/ImageTargets(944): ToucEvent X: 169.85782| Detect X: 229.65517
04-14 12:23:19.960: I/ImageTargets(944): ToucEvent Y: 366.2575| Detect Y: 450.0

Looks something wrong for you guys?

How can I imagine the lineEnd, lineSTart and intersection vector? Why is everything normalized to -1 and 1?

How can i do a ray cast with these values, anyone an idea?

To my actual thread title.
I want to display my BoundingBox without any filling.
I tried the following shading:

Quote:

static const char* PointVertexShader = " \
\
attribute vec4 PointvertexPosition; \
uniform mat4 modelViewProjectionMatrix; \
\
void main() \
{ \
gl_Position = modelViewProjectionMatrix * PointvertexPosition; \
} \
";

static const char* PointFragmentShader = " \
\
precision mediump float; \
void main() \
{ \
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); \
} \
";

And

Quote:

/*for(int i = 0; i glDrawArrays(GL_TRIANGLE_STRIP, i*3, 4);*/

But nothing is drawn at runtime.
I Know it is saturday and I have a lot of questions, hopefully I get all of them answered :p.

- Robert

Re: Rendering Lines

April 15, 2012 - 5:16am #2

++UPDATE++

I think my ray cast is working.
For more information look at this site "http://www.wiziq.com/tutorial/162714-6-837-4-Ray-Casting-2-More-Intersection"

Everything what you need is:

  • lineStart
  • normalized lineDir
  • BBox Max
  • BBox Min

I'm still looking for some help to draw my cube without any filling!

- Robert

Log in or register to post comments