我正在学习《从地面到地面的光线追踪》一书,用ABAP编写一个光线跟踪器。光线跟踪器能够创建计算机生成的图像。如果你想知道我在这项工作背后的动机,iot物联网,请查看我的第一个博客。在我的第三个博客中,我组装了各种C++类,并且第一次让光线追踪器运行。结果是一个红色球,我能够在辅助类ZCLY-ARTH-BITMAP的帮助下在DYPRO屏幕上显示。在这第四个博客席上,理财返利平台,我将使我的光线跟踪器呈现多个对象。因为我对转换没有信心,所以我深入研究了方法参数传递的主题。我将在这里与您分享我的发现。
要使用我的光线跟踪器渲染多个对象,必须进行一些调整。
首先,我需要一个新的跟踪器。跟踪器是"渲染场景[方法]之间的抽象[层],它计算每条光线的原点和方向,以及确定光线发生什么的代码"(Kevin Suffen,2007,p、 70)
第二个关键部分是类zcl\u art\u world中的hit\u bare\u bones\u objects方法:
此代码循环遍历场景中的所有对象,并通过着色记录实例(shade\u rec)返回最接近"相机"的生命点。
这是该功能的两个主要组成部分。
我当时能够创建我想放多少就放多少。但是,经过一段时间的尝试,我意识到这是多么的累人,我自己手工做所有的事情。
所以我想,海淘返现,为什么不用一个黑白的面具来决定在哪里放置球体,让电脑为我创建和定位它们。
面具
知识,我把渲染后的图像作为位图输出到dynpro用户界面,在这件事上帮了我很大的忙。
我给游戏带来了一些变化,随机分配了球体的大小和颜色以及采样的像素数。
我把结果组装成一个动画gif给你,因此,你可以更好地看到掩模和某些参数的改变是如何影响结果的。
由于我目前的几何处理效率低下,图像由多达1000多个球体组成,风控大数据,渲染时间长达一个多小时。
让我们进入我博客的第二个主题。对你们所有挑剔的人来说,这是有趣的部分。
我意识到,写博客极大地提高了我的光线跟踪器的质量。要真正把我博客的内容弄清楚,需要花费更多的时间和精力。最初的想法,比如"让我们写一个关于从C++到ABAP的方法参数转换",它会突然变成一个滚动条,从这里到月球和后面。通常这种深入的检查结果会出现在GiTub中的一张发行票胡或更多,以改进我的光线跟踪。在这个博客里,我将集中讨论参数传递,否则这篇文章就失去了控制(再次)。
导入、导出等关键字描述了传递给方法并由方法使用的参数的作用和可更改性。这些关键字在其他编程语言中通常没有明确地表达出来。
常见的类别通常被称为输入、输出或输入-输出参数。
为了完整起见,下表映射了,Adpp.C++支持从调用方传递参数的三种方法:按值、引用和指针,而ABAP支持两种:按值(…)和引用(…)。我学到的一条经验是:如果在C++中没有使用引用或指针参数,那么我必须实现。按值传递而不是按引用传递。从ABAP的角度来看,我明确地需要值(…)而不是引用(…)。…)
const是一个关键字,它告诉编译器参数不能更改–是常量。在这个规则中有例外,但是我不会在这里跳入这些。但是,云服务器有哪些,这不是由C++强制执行的。Suff.AUTY空关键字让你立即知道,这个方法没有一个返回的参数。value,reference
看到签名中的const是一个显式指示符,表明该参数是一个导入参数。因为在C++中关键字关键字const保证了该方法不能改变参数。但是,如果开发人员马马虎虎,那么即使没有const,参数也可能是导入的。代码示例:值、引用、指针-代码示例:值、引用是一个导出参数,但你需要检查方法内部,是否有多个赋值在那里进行。
代码示例:reference,pointer
代码示例:value,reference
与导出非常相似,我需要确保赋值旁边的参数值也在方法内使用。
代码示例:reference,指针的代码示例:Valuy,参考SuthAuto在绘制这个博客时,我发现很难理解传递类型和参数类型的结合。尤其是引用一个类的参数的传递值。该方法接收实例的副本。
ABAP不允许按值传递实例。只能传递实例引用的副本。意思是说,如果我想要一个实例的副本,我需要事先自己创建它。
但是我想知道,通过值传递和通过引用传递实例之间的ABAP有区别吗?
完全实现
是:在我的示例中,通过值比通过引用多消耗16字节的内存。
请右键单击以下屏幕截图并选择"Open image in new tab"(在新标签中打开图像)查看大小合适的图像。
我假设16个字节用于启动堆栈内存上的第二个引用,如下所示。
本博客结束本书第3章。