首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Android绘制三维数学函数

用Android绘制三维数学函数
EN

Stack Overflow用户
提问于 2018-05-27 22:27:36
回答 1查看 785关注 0票数 3

作为我项目的一部分,我需要使用android在android中绘制2D和3D功能。我知道如何绘制2D函数,但我正在与3D函数进行斗争。

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

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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 14:06:13

我知道如何绘制2D函数,但我正在与3D函数进行斗争。 绘制3D函数的最佳方法是什么?我需要什么,从哪里开始? 我不是在寻找完成所有工作的代码或外部库,我只需要知道自己需要学习什么才能做到这一点。

由于您已经了解了2D并希望升级到3D,所以有一种简单且非最佳的方法:

  • 决定您需要多少z深度: 目前,你在绘图函数中对x和y的限制是1920和1080 (甚至4096x4096),如果你想要节省内存和一些低分辨率的东西,请使用1920x1080x1000的大小--这将使用1000倍的内存,并且具有潜力的来将一些调用的绘制时间增加1000倍--但这就是3D的成本。 一个更实用的极限是由8192,8192,16384组成的矩阵,但是要知道,视频游戏在那个分辨率的需要4-6 6GB的图形卡上工作得很体面(更好一些)--所以你会从这个尺寸开始消耗一些内存。 很容易实现一个更小的绘图空间,然后简单地增加您的分配和限制变量,这不仅测试未来的增长将顺利进行,而且它允许一切运行更快,而您正在解决but。
  • 在函数中添加一个三维: 例:不是简单的line_draw(x,y)函数,而是将它更改为line_draw(x,y,z),使用全局变量z_limit (或您决定给它命名)来测试z没有超出限制。 您需要确定最大距离上的对象是点还是不可见。在测试所有z的过去时,限制值更改为限值(从而使其成为可见点)是有用的。对于成品,一旦超过了正在实现的极限,最好是不可见。
  • 从分配绘图缓冲区开始,首先实现一个函数,没有必要(可能还有很大的挫折感)改变一切,并希望它能正常工作--但如果没有,那么如果每个函数都有共同的错误,您就会有很多麻烦。
  • 一旦这个3D缓冲区填充了一个图像(从几行3D线条开始,比如全屏大小的" X“和"+"),您就可以从最大的Z first (EG: z=1000)开始,绘制到2D屏幕X、Y。一旦完成了该层,z就会减少,并继续绘制每个层,直到达到0为止,即离您最近的对象。 这是最简单(也是最慢的)方法,以确保最近的对象掩盖了最遥远的对象。

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

选择诸如8192这样的数字的原因是,在用C (或您选择的任何语言)编写函数之后,您需要使用几个版本的来优化它们,每个都是用汇编语言编写的,为特定的GPU和GPU体系结构进行了优化。如果没有特别优化的版本,一切都会非常缓慢。

我知道您不希望使用库,但是查看几个应该会让您了解所涉及的工作以及如何实现自己的工作。不需要复制,而是改进。

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

Reddit - "我想从零开始创建一个3D引擎。我从哪里开始?

达沃斯- "教程系列:学习如何用C#、TypeScript或JavaScript从头开始编写三维软引擎

GameDev.StackExchange - "如何为Windows编写自己的三维图形库?[封闭]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50557083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档