您将需要对一个球体进行建模,并使其具有不同的颜色,以便在它旋转时您可以看到它不仅是一个球体,而且还在被渲染。
否则,空间中的球体,如果它是一种纯色,那么它周围没有参考点,看起来就像一个圆。
首先,您需要尝试绘制一个带有矩形的圆,因为这是您拥有的主要图元。
一旦您了解如何做到这一点,或者使用 Path 方法创建一个新的图元(例如三角形)并创建一个圆,那么您就可以将其移动到 3D。
3D 只是一个技巧,因为您将获取可能由方程式生成的模型,然后将其展平,因为您确定将看到哪些部分,然后显示它。
但是,您需要根据三角形与光源的距离以及该部分与光源的角度来更改三角形的颜色。
这是您可以开始进行优化的地方,因为如果您逐像素进行此操作,那么您就是在进行光线追踪。如果您有较大的块和点光源,并且对象正在旋转但没有四处移动,那么您可以重新计算每个三角形的颜色如何变化,那么只需更改颜色以模拟旋转即可。
该算法将取决于您想要进行哪些简化,因此当您获得经验时回来询问,展示您到目前为止所做的工作。
这是一个例子,下面我复制了3D球体部分,但请看整个article。
function Sphere3D(radius) {
this.point = new Array();
this.color = "rgb(100,0,255)"
this.radius = (typeof(radius) == "undefined") ? 20.0 : radius;
this.radius = (typeof(radius) != "number") ? 20.0 : radius;
this.numberOfVertexes = 0;
// Loop from 0 to 360 degrees with a pitch of 10 degrees ...
for(alpha = 0; alpha <= 6.28; alpha += 0.17) {
p = this.point[this.numberOfVertexes] = new Point3D();
p.x = Math.cos(alpha) * this.radius;
p.y = 0;
p.z = Math.sin(alpha) * this.radius;
this.numberOfVertexes++;
}
// Loop from 0 to 90 degrees with a pitch of 10 degrees ...
// (direction = 1)
// Loop from 0 to 90 degrees with a pitch of 10 degrees ...
// (direction = -1)
for(var direction = 1; direction >= -1; direction -= 2) {
for(var beta = 0.17; beta < 1.445; beta += 0.17) {
var radius = Math.cos(beta) * this.radius;
var fixedY = Math.sin(beta) * this.radius * direction;
for(var alpha = 0; alpha < 6.28; alpha += 0.17) {
p = this.point[this.numberOfVertexes] = new Point3D();
p.x = Math.cos(alpha) * radius;
p.y = fixedY;
p.z = Math.sin(alpha) * radius;
this.numberOfVertexes++;
}
}
}
}