总是阻碍我做3D编程的一件事是无法理解数学是如何工作的.我可以使用方法和函数在编程流程中使用数学,然后它对我来说都是清晰和合乎逻辑的,但在数学符号中,我无法从它做出正面或反面.
我一直在阅读网站,观看研究所试图解释这个问题的视频,但他们都使用数学符号,我只是迷失在其中,我的思想不会将其转化为可理解的东西.我可能有缺陷.
另外,只是使用某人的代码不是我的兴趣,我想了解它背后的机制,逻辑.我很乐意使用其他人的代码,但我真的想了解它是如何工作的.
这个问题
你能用简单的术语向我解释没有数学符号,只是编程符号/函数/伪代码,如何沿所有3轴实现矩阵变换?
理想情况下我想要的是编写方法/对象的材料/理解,我可以在其中定义3个轴的角度,类似于glRotate,以旋转我所拥有的四边形/三角形的集合.(我正在尝试编写立方体形状的3D旋转而无需访问OpenGL函数来为我执行此操作,因为每次在显示列表中发生更改时,都会在一次绘制调用中完成.)
我做了什么?
我试图制作一个90度的变换函数来获得数学的悬念,但是在制作一个理论上最简单的矩阵时却完全失败了.你可以在http://jsfiddle.net/bLfg0tj8/5/看到我失败的尝试.
Vec3 = function(x,y,z) {
this.x = x;
this.y = y;
this.z = z;
}
Matrix = function Matrix() {
this.matrixPoints = new Array();
this.rotationPoint = new Vec3(0,0,0);
this.rotationAngle = 90;
}
Matrix.prototype.addVector = function(vector) {
this.matrixPoints.push(vector);
}
Matrix.prototype.setRotationPoint = function(vector) {
this.rotationPoint = vector;
}
Matrix.prototype.setRotationAngle = function(angle) {
this.rotationAngle = angle;
}
Matrix.prototype.populate = function() {
translateToOrigin = [[1,0,0-this.rotationPoint.x],
[0,1,0-this.rotationPoint.y],
[0,0,0-this.rotationPoint.z]];
rotationMatrix = [[0,-1,0],
[0,1,0],
[0,0,1]];
translateEnd …Run Code Online (Sandbox Code Playgroud)重要提示:这个问题与"PhysX" 完全没有关系,"PhysX"是一个计算机游戏物理系统(对于街机游戏中的物理学有用,如球类游戏等); PhysX是Unity3D和其他游戏引擎内置的系统; PhysX在这里完全无关紧要.
////////////////////更新(先读到底部)/////////////////////
我一直在记录值并搜索确切问题的位置,我想我找到了它.我的代码中有这样的东西
Velocity += Acceleration * Time.deltaTime;
position += Velocity * Time.deltaTime;
Run Code Online (Sandbox Code Playgroud)
加速度就像0,0000000000000009 ..现在.当代码流动时,速度应该增加,浮动没有问题.但是在开始时,地球的初始位置是(0,0,23500f)你可以在我最后给出的图表中看到这一点.
那么现在当我将速度*timedelta(此时类似于0,00000000000000005)添加到23500的位置时,它基本上不会添加它.位置仍然是(0,0,23500)不像(0,0,23500.00000000000005),因此地球不移动,因此加速度不会改变.
如果我将地球的初始位置设置为0,0,0并且仍然将加速度设置为0.0000000000000000009以使其位置为(0,0,23500)然后"ADDS"速度*timedelta.它变得类似于(0,0,000000000000000000005)并且继续增加.当float为0时,添加这么小的值没有问题.但是如果浮点数类似于23500,那么它就不会增加小值.
我不知道这是完全统一的问题还是c#的漂浮.
这就是为什么我不能让它与小值一起工作.如果我能克服这一点,我的问题将得到解决.
////////////////////////////////////////////////// /////////////////////////////
我一直在开发n体植物以模拟我们的太阳系,因此我一直在收集数据以使其尽可能逼真.但是数据大小存在问题.我搜索了每一点互联网,我找不到人们如何克服这一点的单一解释.(如果是这样的话)所以我在这里尝试拍摄.
因此,为了保持行星之间的距离,半径和"质量"的比例,我创建了一个excel文件来计算所有数据.(因为有人为什么会把"地球的质量如果有"那个"半径图"在互联网上?)我将把ss作为附件.它基本上"标准化"或换句话说"缩放"行星的每个属性到给定的参考.在这种情况下,我把参考作为"地球的半径".
我团结一致,你知道,你不能在统一中使用"太大"或"太小"的价值观.所以我不得不缩小太阳能系统,"很多!"
因此,我使用牛顿万有引力定律,即F = GMm/r ^ 2,使其变得简单,我直接计算a = GM/r ^ 2,对于来自所有其他物体的给定物体.
因此,地球的"朝向太阳"的重力加速度的实际值大约是0,000006 km/s ^ 2,这在统一的工作中甚至是非常小的值,但它可以工作.然而,为了获得这个值,1我需要将地球的半径(比例)设置为6371单位,并将太阳比例设置为696,342 !,这对于将其统一起来来说太大了.
所以我说,让地球的半径为1,以统一为单位.因此,当半径改变时,一切都会改变,质量,距离......我保持行星的密度,并用新半径计算新体积的质量.所有计算都在附件中.
所以事实是,当我把地球的半径变为1时,对太阳的引力加速就像0,0000000000009那样小得可笑.当然,Unity不会使用这个值.
所以,如果我改变地球的半径,那么太阳的质量和半径变得非常大,然后再次,我无法使用它.
我不知道其他人如何解决这个问题,他们为解决这个问题做了什么,但正如我从这里看到的那样,看起来不可能对太阳系进行逼真的n体模拟.(至少统一)
所以我需要有10个代表来发布图片-_-,我会给出链接. http://berkaydursun.com/solar_system_simulator/data.PNG 另外一个目录是使用n体计算但具有UNREALISTIC值的工作实验太阳系模拟.它工作得很好,它甚至看起来有点接近真实,但不,它没有正确的比率^^你可以在这里测试它,如果你希望http://berkaydursun.com/solar_system_simulator/
编辑:WoW我几乎用"So"开始了每个段落^^
我正在研究用六边形网格制作的行星.不需要杆 - 使这更容易一些.有没有更好的方法将圆柱体变成具有均匀六边形/三角形的球体?
这是所需的步骤:
对于第2步,我只是使用Sin和Cos将顶点移动到圆形.对于第3步,现在我只是使用:vertices[i] = vertices[i].normalized * radius;
图像可视化当前的问题.
请注意,电极是故意切断的.红色部分显示六边形网格的样子.我必须保持它们的大小和方向大致相同,因为它们用于游戏和视觉元素.每个十六进制都有一个邻居列表,基本上就像一个图形.
我试图在窗口中绘制一些随机点作为星星,但点数没有显示.但其他对象正确显示.
我的源代码:
#include<windows.h>
#include <GL\glut.h>
#include <math.h> // For math routines (such as sqrt & trig).
GLfloat xRotated, yRotated, zRotated;
GLdouble radius=3;
GLfloat qaBlack[] = {0.0, 0.0, 0.0, 1.0}; //Black Color
GLfloat qaGreen[] = {0.0, 1.0, 0.0, 1.0}; //Green Color
GLfloat qaWhite[] = {1.0, 1.0, 1.0, 1.0}; //White Color
GLfloat qaRed[] = {1.0, 0.0, 0.0, 1.0}; //Red Color
// Set lighting intensity and color
GLfloat qaSpecularLight[] = {1.0, 1.0, 1.0, 1.0};
GLfloat emitLight[] = {0.9, 0.9, 0.9, 0.9};
GLfloat Noemit[] …Run Code Online (Sandbox Code Playgroud)