Hi, I try toayt the LookAt() method. My test let me know that it is usefull to set the object in the midle of the canvas.
If you want to focus on one object the setTranform is enough. You just nedd to get the transform3d of the transformgroup of the wiewplatform. Then set the position minus X of the objet to the transform3d. And i is fine. That only for focusing object. -----Message d'origine----- De : Lars van Gemerden <[EMAIL PROTECTED]> Ŕ : [EMAIL PROTECTED] <[EMAIL PROTECTED]> Date : mardi 27 avril 2004 13:33 Objet : Re: [JAVA3D] lookAt method >if you use these vectors to calculate a cross product: > >Vector3d vec1 = new Vector3d(x1-x2, y1-y2, z1-z2); >Vector3d vec2 = new Vector3d(x1-x2, y1-y2, z1-z2-1.0); <-- ?? right? > >the vectors can be paralel ( x1 == x2 && y1 == y2). This leaves you with a >null crossproduct(0,0,0). > >What should be the direction the normal vector? Could you tell me the idea >behind this? Is the point to generate an arrow in a default place/direction >and then use a linear transform to translate/rotate it to the right >place/direction? If this is true, it might be better to use a constructor of >Transform3D that takes a rotation matrix and a translation vector. By the >way, why do you use vectors to define the begin and endpoint of your arrow? >would like to help, but i use my own linear algebra package (not vecmath). > >Lars > > >-----Original Message----- >From: Discussion list for Java 3D API >[mailto:[EMAIL PROTECTED] Behalf Of Horst Sueggel >Sent: maandag 26 april 2004 19:48 >To: [EMAIL PROTECTED] >Subject: Re: [JAVA3D] lookAt method > > >Thank you very much for the answer. >But i have still the following problem: > >I have 2 Points given and i have to draw an arrow between point1 to point2. >So i have tried to solve my problem with the lookAt method. >But it seems that i haven't implemented my arrow in a right way. > >My sample code: > > >private Transform3D calculateRotationTransform3D(Vector3d source, Vector3d >target){ > // source position > double x1 = source.x; > double y1 = source.y; > double z1 = source.z; > // target position > double x2 = target.x; > double y2 = target.y; > double z2 = target.z; > // arrow length > double len = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + >(z1-z2)*(z1-z2)); > > > //middle of the two positions ( = position of arrow) > double x_middle = (x1+x2)/2; > double y_middle = (y1+y2)/2; > double z_middle = (z1+z2)/2; > // > Point3d eye = new Point3d(x_middle, y_middle, z_middle); > > // calculate temp normal vector (cross product)<-- i dont know if this is >right > Vector3d vec1 = new Vector3d(x1-x2, y1-y2, z1-z2); > Vector3d vec2 = new Vector3d(x1-x2, y1-y2, z1-z2-1.0); <-- ?? right? > Vector3d normalVec = new Vector3d(); > normalVec.cross(vec1, vec2); > > Vector3d temp = new Vector3d(normalVec); > temp.normalize(); > temp.scale(len/2.0d); > > Vector3d centerVec = new Vector3d(); > centerVec.add(new Vector3d(x_middle, y_middle, z_middle)); > //centerVec.add(temp); > normalVec.negate(); > centerVec.add(normalVec); > Point3d center = new Point3d(centerVec.x, centerVec.y, centerVec.z); > > > // Vector3d v1 = new Vector3d(x1-x2, y1-y2, z1-z2); > Vector3d v1 = new Vector3d(x_middle-normalVec.x, y_middle-normalVec.y, >z_middle-normalVec.z); > Vector3d v2 = new Vector3d(x_middle-normalVec.x, y_middle-normalVec.y, >z_middle-normalVec.z-1.0d); > Vector3d normal = new Vector3d(); > normal.cross(v1, v2); > > > Transform3D rot = new Transform3D(); > rot.lookAt(eye, center, normal); > rot.invert(); > > return rot; > } > >the call: >. >. >. >Transform3D caTransform = calculateRotationTransform3D(stPt, endPt); >TransformGroup caTransformGroup = new TransformGroup(caTransform); > >Node cArrowCylinder = new Cylinder((float)ArrowDia, (float)CylenderLen, >caAppearance); >Transform3D caTransform = calculateRotationTransform3D(stPt, endPt); >TransformGroup caTransformGroup = new TransformGroup(caTransform); >. >. >. >Node cArrowCylinder = new Cylinder((float)ArrowDia, (float)CylenderLen, >caAppearance); > >I would appreciate if you can verify or correct this code > >Greets, >Horst Sueggel > >=========================================================================== >To unsubscribe, send email to [EMAIL PROTECTED] and include in the body >of the message "signoff JAVA3D-INTEREST". For general help, send email to >[EMAIL PROTECTED] and include in the body of the message "help". > >=========================================================================== >To unsubscribe, send email to [EMAIL PROTECTED] and include in the body >of the message "signoff JAVA3D-INTEREST". For general help, send email to >[EMAIL PROTECTED] and include in the body of the message "help". > =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA3D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".
