在Android中绘制3D数学函数

时间:2018-05-27 22:27:36

标签: android android-studio opengl-es

作为我项目的一部分,我需要使用android studio在android中绘制2D和3D功能。我知道如何绘制2D功能,但我正在努力学习3D功能。

绘制3D功能的最佳方法是什么?我需要什么,从哪里开始?

我不是在寻找完成所有工作的代码或外部库,我只需要知道自己需要学习什么才能自己完成。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

我知道如何绘制2D功能,但我正在努力使用3D功能。

     

绘制3D功能的最佳方法是什么?我需要什么,从哪里开始?

     

我不是在寻找能够完成所有工作的代码或外部库,我只需要知道自己需要学习什么才能自己完成。

由于您已经了解2D并希望进入3D,因此有一种简单且非最佳的方法:

  • 决定你想要多少 z 深度:

    EG:目前你在绘图功能中对x和y的限制是1920和1080(甚至是4096x4096),如果你想节省内存并且有点低分辨率使用大小为1920x1080x1000 - 这将使用1000x更多内存并具有 潜力 ,可将部分调用的绘制时间增加1000倍 - 但这是3D的成本。

    更实用的限制是8192,8192,16384的矩阵,但要注意那个分辨率为need 4-6GB graphic cards的视频游戏能够正常工作(更好一点) - 所以你从那个大小开始,我会嚼掉一些主要的记忆。

    实现较小的绘图空间并简单地增加您的分配并限制变量很容易,这不仅可以测试未来的增加是否会顺利进行,而且可以让您在整理错误时更快地运行所有内容。 / p>

  • 为函数添加第三维:

    EG:而不是简单地将line_draw(x,y)更改为line_draw(x,y,z)的函数,而是使用全局变量z_limit(或者你决定命名它的任何东西)来测试z不做'超过限制。

    您需要确定最大距离处的物体是否为点或不可见。测试时所有 z 超过限制值(因此使它们成为可见点)的测试非常有用。对于成品,一旦超过您正在实施的限制,最好不会看到它。

  • 首先分配绘图缓冲区并首先实现单个函数,没有任何意义(并且可能非常沮丧)改变一切并希望它能够正常工作 - 它应该但是如果它如果每个功能都有一个共同的错误,你不会在你的盘子上有很多。

  • 一旦你有一个3D图像缓冲区填充图像(从一些3D线开始,例如全屏大小的“X”和“+”),你可以通过开始绘制到2D屏幕X,Y首先在 Z 最大值(EG:z = 1000)。完成图层递减 z 并继续后,绘制每个图层直到达到零,即最接近您的图层。

    这是确保最近的物体遮挡最远物体的最简单(也是最慢)的方法。

现在看起来好吗?您不希望远程对象与最近的对象具有相同的大小(或更大),您希望确保缩放它们。

选择8192等数字的原因是因为 C (或您选择的任何一种语言)中编写功能后,您需要使用多个版本对其进行优化每个,用汇编语言编写,针对特定的CPU和GPU架构进行了优化。如果没有专门优化的版本,一切都将非常缓慢。

我知道你不想使用图书馆,但是看几个应该让你了解所涉及的工作以及如何实现自己的工作。无需复制,改进。

有类似的问题和答案可能填补空白:

Reddit - “I want to create a 3D engine from scratch. Where do I start?

达沃斯 - “Tutorial series: learning how to write a 3D soft engine from scratch in C#, TypeScript or JavaScript

GameDev.StackExchange - “How to write my own 3-D graphics library for Windows? [closed]