main函数是由系统调用的吗??yes or no
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了main函数是由系统调用的吗??yes or no相关的知识,希望对你有一定的参考价值。
No,别的函数可以调用main函数。下面是最简单的例子:语言:c++
程序设计平台:microsoft visual c++ 6.0
#include <iostream>
using namespace std;
void fun(); //声明函数fun
int main()
cout<<"111111111"<<endl;
fun(); //调用fun函数
return 0;
void fun() //定义函数fun
main(); //fun函数中调用main函数
结果:没有出现语法错误,程序可以运行。 参考技术A yes,main函数是可以生成可执行程序的函数,只能是系统调用 参考技术B no,别的函数也可以调用main函数 参考技术C no的!
OpenGL - 动画是由着色器完成的吗?
【中文标题】OpenGL - 动画是由着色器完成的吗?【英文标题】:OpenGL - Are animations done by shaders? 【发布时间】:2014-04-02 12:26:15 【问题描述】:我开始学习 OpenGL,并学会了如何使用顶点和片段着色器来显示图形和东西。 我创造了一个(非常)程式化的人,现在我想让它移动他的胳膊和腿。 问题是:我应该直接在 main 中调用的计时器函数中更改 VBO 中的顶点数据(就像我所做的那样),还是应该在顶点着色器中完成一项工作,而不接触顶点数据?
我想答案是第一个,但我觉得它会使 CPU 过载,而不是让 GPU 工作。
【问题讨论】:
【参考方案1】:两种方法都可以正常工作:如果您的目标是更多地利用 GPU,然后在顶点着色器中进行转换,否则您可以使用 CPU。但是请记住,如果检查冲突,您需要 CPU 端存在数据....
本质上:
在 GPU 上进行操作意味着您只需要发送一次网格数据,然后您可以发送矩阵变换来对其进行变形或动画处理。 这是理想的,因为它大大降低了 CPU-> GPU 之间的数据传输带宽。 这也可能意味着您可以仅将网格的一份副本上传到 GPU,并对网格的许多不同实例应用变换以实现不同但相似的模型(即发送到 GPU 的熊网格以规模 *2 规模 *1 制作实例并为熊爸爸、熊妈妈和熊宝宝缩放 *0.5,然后发送一个 Goldilocks 网格,现在您在内存中有 2 个网格以获得 4 个不同的模型)。
但是,转换后的网格不会立即在 CPU 端可用,因此网格完美碰撞检测将更加密集。
在 CPU 上制作动画意味着您可以访问转换后的网格,但主要需要注意的是,您必须在每一帧和每个实例中将整个网格上传到 GPU:更多的工作、更多的数据和更多的内存在两个 CPU 上用完和 GPU 方面。
CPU 优势
当前的精确网格可随时用于您需要的任何目的。CPU 缺点
CPU 和 GPU 之间的海量数据传输:每个实例每个模型每个帧一个传输GPU 优势:
上传较少的网格数据(如果您只需要一个模型的变体,则一次) 以快速并行方式转换单个实例 CPU->GPU 带宽最小化:只需要发送转换 GPU 是并行化的,可以比 CPU 更高效地处理网格数据GPU 的缺点
网格不适合网格完美的碰撞检测缓解将 GPU 数据传输回 CPU 的开销:
利用边界框(轴对齐或非轴对齐,根据您的喜好):这允许小型数据集在 CPU 端表示模型(每个框 8 个点,而不是每个网格数百万个点)。如果边界框发生碰撞,则从 GPU -> CPU 传输网格并进行精细计算以获得精确的网格到网格碰撞检测。这以最少的开销实现了两全其美。
由于在处理网格时 GPU 的性能可能比 CPU 高出数十、数百甚至数千倍,因此很快就会明白为什么要将这一领域的高性能编码外包给 GPU。
p>希望这会有所帮助:)
【讨论】:
belanecbn.sk/3dtutorials/index.php?id=20 有一个很好的关于如何执行着色器动画的演示,lcg.ufrj.br/Cursos/GPUProg/GLSLfirst 有另一组有用的链接,antongerdelan.net/opengl 有一些有用的链接,最后@987654324 有一个方便的练习列表@ 该评论中的第一个链接将我转到一个被我的 ESET 防病毒软件阻止的站点,说它有木马,所以要小心。 他们发布时没有任何木马,但是我回家后会检查它们,如果需要,可能会将原始代码发布到其他地方:) 不用担心,我确实看到它是从 2014 年开始的,并且无法知道链接将来是否会变坏,所以只是想向遇到您答案的其他人指出/将来发表评论!【参考方案2】:根据平台和 OpenGL 版本,您可以通过直接更改顶点缓冲区中的数据(软件动画)或将顶点组与相应的动画矩阵(硬件动画)相关联来制作动画。
如果您选择第二种方法(在可能的情况下推荐),您可以将这些矩阵中的一个或多个作为统一发送到顶点着色器,可能为每个矩阵关联一些“权重”因子。
请记住,当您拥有大量顶点时,软件动画会使 CPU 过载,而硬件动画几乎是免费的,您只需将顶点与正确的矩阵相乘,而不是着色器中的模型-视图-投影一. GPU 还针对数学运算进行了高度优化,并且与 CPU 相比速度非常快。
【讨论】:
感谢您的回答,但我是这个“领域”的新手,所以我不太了解如何制作硬件动画。 “动画矩阵”是什么意思,这个“权重”因子是什么? 您可以从OpenGL网页查看本教程:opengl.org/wiki/Skeletal_Animation以上是关于main函数是由系统调用的吗??yes or no的主要内容,如果未能解决你的问题,请参考以下文章