{"id":4460,"date":"2018-08-24T21:25:36","date_gmt":"2018-08-24T13:25:36","guid":{"rendered":"http:\/\/www.bookcard.net\/wordpress\/?p=4460"},"modified":"2018-08-24T21:25:36","modified_gmt":"2018-08-24T13:25:36","slug":"android_game_3d_vector","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/android_game_3d_vector\/","title":{"rendered":"Android\u904a\u6232\u4e4b3D\u77e2\u91cf"},"content":{"rendered":"<figure id=\"attachment_4461\" aria-describedby=\"caption-attachment-4461\" style=\"width: 1200px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/08\/Android_Game_3D_Vector.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4461\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/08\/Android_Game_3D_Vector.jpg\" alt=\"\" width=\"1200\" height=\"800\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/08\/Android_Game_3D_Vector.jpg 1200w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/08\/Android_Game_3D_Vector-300x200.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/08\/Android_Game_3D_Vector-768x512.jpg 768w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2018\/08\/Android_Game_3D_Vector-1024x683.jpg 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><figcaption id=\"caption-attachment-4461\" class=\"wp-caption-text\">Android\u904a\u6232\u4e4b3D\u77e2\u91cf<\/figcaption><\/figure>\n<p>\u8207\u300e<a href=\"https:\/\/www.bookcard.net\/wordpress\/android_game_2d_vector\/\">2D\u77e2\u91cf<\/a>\u300f\u76f8\u6bd4\u300e3D\u77e2\u91cf\u300f\u50c5\u662f\u5728x,y\u8ef8\u5ea7\u6a19\u52a0\u4e0az\u8ef8\u5ea7\u6a19.\u9084\u6709\u300e\u9ede\u7a4d\u300f\u548c\u300e\u53c9\u7a4d\u300f\u904b\u7b97.\u8207\u7e5e\u8ef8\u65cb\u8f49\u7b97\u6cd5. \u7121\u5de6\u8a08\u7b97\u5411\u91cf\u89d2\u5ea6\u51fd\u5f0f.<\/p>\n<p>public class VECTOR3D {<\/p>\n<p>3D\u6d6e\u9ede\u6578\u5ea7\u6a19<\/p>\n<p>public float x,y,z;<\/p>\n<p>\u89d2\u5ea6\u8f49\u5f27\u5ea6<\/p>\n<p>public static float DEGREES_TO_RADIANS = ((1.0f\/180.0f)* (float)Math.PI);<\/p>\n<p>\u5f27\u5ea6\u8f49\u89d2\u5ea6<\/p>\n<p>public static float RADIANS_TO_DEGREES = ((1.0f\/(float)Math.PI)*180.0f);<\/p>\n<p>\u7528\u65bc\u7e5e\u8ef8\u65cb\u8f49<\/p>\n<p>private static final float[] matrix = new float[16];<\/p>\n<p>private static final float[] inVec = new float[16];<\/p>\n<p>private static final float[] outVec = new float[16];<\/p>\n<p>\u8cfc\u9020\u51fd\u5f0f\u4e26\u8a2d\u5b9ax,y,z<\/p>\n<p>public VECTOR3D(float x, float y,float z){<\/p>\n<p>this.x = x;<\/p>\n<p>this.y = y;<\/p>\n<p>this.z = z;<\/p>\n<p>}<\/p>\n<p>\u62f7\u8c9d3D\u77e2\u91cf<\/p>\n<p>public VECTOR3D Copy(){<\/p>\n<p>VECTOR3D v;<\/p>\n<p>v=new VECTOR3D(x,y,z);<\/p>\n<p>return v;<\/p>\n<p>}<\/p>\n<p>\u91cd\u8a2d3D\u77e2\u91cf\u6578\u503c<\/p>\n<p>public VECTOR3D set(VECTOR3D v){<\/p>\n<p>this.x = v.x;<\/p>\n<p>this.y = v.y;<\/p>\n<p>this.z = v.z;<\/p>\n<p>return this;<\/p>\n<p>}<\/p>\n<p>3D\u77e2\u91cf\u52a0\u6cd5\u904b\u7b97<\/p>\n<p>public VECTOR3D add(VECTOR3D v){<\/p>\n<p>this.x = this.x + v.x;<\/p>\n<p>this.y = this.y + v.y;<\/p>\n<p>this.z = this.z + v.z;<\/p>\n<p>return this;<\/p>\n<p>}<\/p>\n<p>3D\u77e2\u91cf\u6e1b\u6cd5\u904b\u7b97<\/p>\n<p>public VECTOR3D sub(VECTOR3D v){<\/p>\n<p>this.x = this.x &#8211; v.x;<\/p>\n<p>this.y = this.y &#8211; v.y;<\/p>\n<p>this.z = this.z &#8211; v.z;<\/p>\n<p>return this;<\/p>\n<p>}<\/p>\n<p>3D\u77e2\u91cf\u4e58\u6cd5(\u5373\u7e2e\u653e)<\/p>\n<p>public VECTOR3D mul(float scalar){<\/p>\n<p>this.x = this.x * scalar;<\/p>\n<p>this.y = this.y * scalar;<\/p>\n<p>this.z = this.z * scalar;<\/p>\n<p>return this;<\/p>\n<p>}<\/p>\n<p>\u8a08\u7b973D\u77e2\u91cf\u9577\u5ea6<\/p>\n<p>public float Len(){<\/p>\n<p>float len;<\/p>\n<p>len = (float) Math.sqrt(x*x+y*y+z*z);<\/p>\n<p>return len;<\/p>\n<p>}<\/p>\n<p>3D\u77e2\u91cf\u55ae\u4f4d\u5316,\u9577\u5ea6\u70ba1<\/p>\n<p>public VECTOR3D normer(){<\/p>\n<p>float len;<\/p>\n<p>len = Len();<\/p>\n<p>if(len != 0){<\/p>\n<p>x = x \/ len;<\/p>\n<p>y = y \/ len;<\/p>\n<p>z = z \/ len;<\/p>\n<p>}<\/p>\n<p>return this;<\/p>\n<p>}<\/p>\n<p>\u7e5e\u67d0\u8ef8\u65cb\u8f49,\u5148\u5b9a\u7fa93D\u77e2\u91cf,\u7136\u5f8c\u8a2d\u7f6e\u77e9\u9663\u70ba\u96f6,\u7136\u5f8c\u7528rotateM()\u65cb\u8f49,\u5728\u4e58\u4ee53D\u5411\u91cf<\/p>\n<p>public VECTOR3D rotate(float angle,float axisX,float axisY,float axisZ){<\/p>\n<p>inVec[0] = x;<\/p>\n<p>inVec[1] = y;<\/p>\n<p>inVec[2] = z;<\/p>\n<p>inVec[4] = 1;<\/p>\n<p>Matrix.setIdentityM(matrix, 0);<\/p>\n<p>Matrix.rotateM(outVec,0, angle, axisX, axisY, axisZ);\/\/ \u9078\u8f49<\/p>\n<p>Matrix.multiplyMV(outVec, 0, matrix, 0, inVec, 0);<\/p>\n<p>x = outVec[0];<\/p>\n<p>y = outVec[1];<\/p>\n<p>z = outVec[2];<\/p>\n<p>return this;<\/p>\n<p>}<\/p>\n<p>\u8a08\u7b97\u51693D\u77e2\u91cf\u4e4b\u9593\u8ddd\u96e2<\/p>\n<p>public float Dist(VECTOR3D v){<\/p>\n<p>float distX = this.x &#8211; v.x;<\/p>\n<p>float distY = this.y &#8211; v.y;<\/p>\n<p>float distZ = this.z &#8211; v.z;<\/p>\n<p>float dist = (float)Math.sqrt(distX*distX + distY*distY + distZ*distZ);<\/p>\n<p>return dist;<\/p>\n<p>}<\/p>\n<p>\u8a08\u7b97\u5169\u500b3D\u77e2\u91cf\u4e4b\u9593\u8ddd\u96e2\u5e73\u65b9<\/p>\n<p>public float DistSquared(VECTOR3D v){<\/p>\n<p>float distX = this.x &#8211; v.x;<\/p>\n<p>float distY = this.y &#8211; v.y;<\/p>\n<p>float distZ = this.z &#8211; v.z;<\/p>\n<p>float dist = distX*distX + distY*distY + distZ*distZ;<\/p>\n<p>return dist;<\/p>\n<p>}<\/p>\n<p>\u8a08\u7b97\u5169\u500b3D\u5411\u91cf\u53c9\u7a4d,\u53c9\u7a4d\u662f\u4e00\u500b\u5411\u91cf,\u5b83\u8207va\u548cvb\u5782\u76f4.<\/p>\n<p>void cross(VECTOR3D va, VECTOR3D vb){<\/p>\n<p>x =\u00a0 ( (va.y * vb.z) &#8211; (va.z * vb.y) );<\/p>\n<p>y = -( (va.x * vb.z) &#8211; (va.z * vb.x) );<\/p>\n<p>z =\u00a0 ( (va.x * vb.y) &#8211; (va.y * vb.x) );<\/p>\n<p>}<\/p>\n<p>\u8a08\u7b973D\u5411\u91cf\u9ede\u7a4d.\u8fd4\u56de\u503c\u70ba\u6d6e\u9ede\u6578<\/p>\n<p>float dot(VECTOR3D v){<\/p>\n<p>return( (x * v.x) + (y * v.y) + (z * v.z) );<\/p>\n<p>}<\/p>\n<p>3D\u5411\u91cf\u53d6\u53cd\u6578<\/p>\n<p>VECTOR3D inverse(){<\/p>\n<p>this.x = -this.x ;<\/p>\n<p>this.y = -this.y ;<\/p>\n<p>this.z = -this.z ;<\/p>\n<p>return this;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8207\u300e2D\u77e2\u91cf\u300f\u76f8\u6bd4\u300e3D\u77e2\u91cf\u300f\u50c5\u662f\u5728x,y\u8ef8\u5ea7\u6a19\u52a0\u4e0az\u8ef8\u5ea7\u6a19.\u9084\u6709\u300e\u9ede\u7a4d\u300f\u548c\u300e\u53c9\u7a4d\u300f\u904b\u7b97.\u8207\u7e5e\u8ef8\u65cb\u8f49\u7b97\u6cd5. \u7121 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_game_3d_vector\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">Android\u904a\u6232\u4e4b3D\u77e2\u91cf<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,11],"tags":[2],"class_list":["post-4460","post","type-post","status-publish","format-standard","hentry","category-android","category-algorithm","tag-android","entry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/4460","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/comments?post=4460"}],"version-history":[{"count":1,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/4460\/revisions"}],"predecessor-version":[{"id":4462,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/4460\/revisions\/4462"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=4460"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=4460"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=4460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}