渲染立方体的数学?

时间:2013-10-28 19:58:43

标签: vb.net math graphics 3d render

我的朋友和我正在学校的VB课程中从头开始制作一个3d渲染引擎,但我不确定形成多维数据集的数学运算是如何工作的。鉴于六个变量:

    rotX
    rotY
    rotZ
    lenX
    lenY
    lenZ

分别表示x,y,z上的旋转以及x,y,z上的长度,制作立方体的公式是什么?我知道我所要做的就是计算三个段,并从这些段中创建三个平行四边形,所以我只需要数学来找到这三个段是什么。 谢谢!

2 个答案:

答案 0 :(得分:1)

两种基本的3D对象表示都是你的数据不足。

  1. 表面表示

    • 对象是表面多边形/顶点/...
    • 的集合
    • 对于立方体,它是一组8个点+ 6个面的三角形/四边形
  2. 分析表示

    • 对象是描述对象的方程组
    • for cube是6个平面的交集
  3. 我认为你正在使用选项1所以你需要的是: - 位置 - 方向 - 大小

    通常轴对齐的立方体如下所示:

    const double a=1.0; //cube size;
    double  pnt[8][3]=  //cube points
        {
        +a,-a,+a,
        +a,+a,+a,
        -a,+a,+a,
        -a,-a,+a,
        +a,-a,-a,
        +a,+a,-a,
        -a,+a,-a,
        -a,-a,-a
        };
    int     tab[24]=
        {
        0,1,2,3,    // 1st.quad
        7,6,5,4,    // 2nd.quad
        4,5,1,0,    // 3th.quad ...
        5,6,2,1,
        6,7,3,2,
        7,4,0,3
        };
    

    对于大小和方向,您可以应用转换矩阵
    或者通过方向向量直接重新计算点

    • 所以你需要记住位置(点)和方向(3个向量)和大小(标量)
    • 以上所有内容均可存储在单个转换矩阵4x4
    • 但是如果你想要矢量,那么点将是这样的:

    P(+ a,-a,+ a) - > + a * I -a * J + a * K

    • 其中I,J,K是方向向量
    • a是立方体大小
    • P(+ a,-a,+ a)是上表中的原始轴对齐点

    选项2实现起来比较棘手,除非你真的需要它(光线追踪渲染),否则就忘了它。

答案 1 :(得分:0)

嗯,首先我们可以考虑如果事情更接近我们的愿景会发生什么。 它似乎偏向一边。 并且进一步思考,我们得出视觉是实际位置的线性函数。 所以让z越大,越接近某些东西。然后我们将x和z相乘以获得要渲染的x位置,并与y相同。然后通过将屏幕上的位置在一行中渲染到另一个预定义的位置来定义一条线,然后用它们定义实体。 我不知道旋转,但是)= 我希望这至少有助于理解。