目前正在使用C#开发3D媒体引擎,我遇到了一个小难题.我找到了我的rending循环,我有一个很棒的插件架构和内容管理系统,甚至还有一个计划好的材料管道.然后引擎计划使用DirectX和OpenGL(通过'渲染器'插件),以及两个API的可编程管线.
无论如何,在本周初,我开始研究用于处理顶点的引擎抽象层(我现在已经担心这几周了).正如你们中的一些人所知,图形API之间的顶点处理并不完全相关或相同.好吧有点相关;),但不一样.在OpenGL处理中,顶点非常简单,您可以创建自定义顶点结构,将其发送到GPU,然后让着色器处理其余部分.这对于灵活的图形管线是完美的,OpenGL不需要知道每个顶点包含哪些元素.另一方面,DirectX需要我们为每个顶点结构创建声明,然后将它们发送到GPU.
问题是我不知道传递了什么类型的顶点结构,我肯定希望避免创建抽象层,该抽象层涉及通过枚举和一些抽象的"VertexDeclaration"类声明顶点的每个元素; 这会导致一些问题:
1)获得顶点元素至少可以说是一种痛苦.我可以使用一些'VertexSemantic'并询问顶点'a - z'的位置,但是当处理像骨骼动画这样的顶点时,它会有很多开销.
2)考虑到发动机的主要焦点是"新手",不是非常人性化.我希望用户能够创建自定义顶点和网格缓冲区,而不必声明大量对象,消耗宝贵的开发时间.
3)更多?
现在,我可以使用属性执行某些操作,然后在DirectX渲染器内创建顶点结构的声明.例如,继续创建一些枚举:
// for getting the format layout of the element
public enum ElementFormat
{
Float, Float2, Float3, Byte, etc, etc
}
// for determining the 'usage'
// (here is 'another' where DirectX limits vertex structures ><)
public enum ElementUsage
{
Position, Normal, Color, TextureCoord, etc, etc
}
Run Code Online (Sandbox Code Playgroud)
现在我可以创建一个用户可以应用于顶点结构中每个元素的"字段"的属性:
public class VertexElementAttribute : Attribute
{
#region Properties
/// <summary>
/// Gets the total size (in bytes) of the element.
/// </summary>
public …Run Code Online (Sandbox Code Playgroud) 我对人们如何构建他们的Clojure源代码感兴趣.
习惯于Java,我非常熟悉每个源代码文件一个类的范例,将所有数据和方法定义与适当的注释和注释等捆绑在一起.
然而,Clojure提供了更多的灵活性,我不确定我应该如何构建我的项目(可能最终成为一个中等大小的应用程序,可能是5,000行,有三个或四个不同的子系统)
特别是我正在努力:
是否有一种现成的或惯用的方式来声明Julia程序中的入口点(即相当于mainC或if __name__ == "__main__"Python中的构造)?
这似乎是一个重要的功能,以便编写不会在交互模式下使用的更大的结构化代码,但我找不到任何关于如何在Julia中实现这一点的提示,如果有的话(可能的逃生途径)可能正在编写一个任意函数作为服务main,然后在主模块末尾的顶层调用它一次,但这不优雅,甚至可能效率不高).TIA.
我在我的项目中使用Underscore.js.几乎所有文件都有这行代码:var _ = require('underscore').该require函数是同步的,因此每次使用时都会加载相同的文件.这是正确的做法吗?这不会影响性能吗?
而不是这样,可以在app.js文件中定义一个全局变量吗?
_ = require('underscore')
Run Code Online (Sandbox Code Playgroud)
我已经读过你不应该使用全局变量,但这似乎是一个有效的用例.
我在使用多个注释时遇到问题,这些注释或多或少都说相同的事情,但针对不同的框架,我想将它们全部归为一个自定义注释。目前它看起来像这样:
@Column(name = "bank_account_holder_name")
@XmlElement(name = "bank_account_holder_name")
@SerializedName("bank_account_holder_name")
@ApiModelProperty(name = "bank_account_holder_name", value = "The name of the recipient bank account holder")
public String bankAccountHolderName;
Run Code Online (Sandbox Code Playgroud)
如您所见,它们都重复相同的字符串,我想将它们组合起来,但我还没有找到这样做的方法。
是否有可能做到这一点,或者我是否必须继续这样做或更改/创建一个新框架?
我正在写一个关于极长功能的小型学术研究项目.显然,我不是在寻找编程错误的例子,而是寻找100,200和600行长函数的例子.
我将使用为希伯来大学编写的硕士学位编写的脚本来调查Linux内核源代码,该脚本测量不同的参数,如代码行数,函数复杂度(由MCC测量)和其他好东西.顺便说一句,这是一个关于代码分析和推荐阅读材料的简洁研究.
我很感兴趣,如果你能想出为什么任何函数应该特别长的任何好理由?我将研究C,但任何语言的例子和论据都会很有用.
我正在研究的项目是一个包装为Python包的业务逻辑软件.这个想法是各种脚本或应用程序将导入它,初始化它,然后使用它.
它目前有一个顶级的init()方法,用于初始化和设置各种事物,一个很好的例子是它使用数据库连接设置SQLAlchemy并存储SA会话以供以后访问.它存储在我的项目的子包中(即myproj.model.Session,因此其他代码可以在导入模型后获得有效的SA会话).
长话短说,这使我的包装成为有状态的.我正在为项目编写单元测试,这种安全行为会带来一些问题:
我应该以某种方式重构我的包,因为当前的结构不是最好的(可能的)练习(tm)?:)
我应该把它留在那里,每次安装/拆除整件事吗?如果我要实现完全隔离,这意味着在每次测试中完全擦除并重新填充数据库,那不是太过分了吗?
这个问题实际上是关于整体代码和测试结构的,但是对于我的测试我使用nose-1.0的价值.我知道Isolate插件可能对我有所帮助,但我想在测试套件中做一些奇怪的事情之前得到正确的代码.
阅读以下内容后,我想我明白将最简单的脚本包装在 main() 函数中的价值。
我应该在 main() 内部还是外部定义所有函数?
有正确或错误的方法吗?两种方法的优缺点是什么?
该express-generator工具创建一个名为 的文件bin/www并将其用作应用程序的主要入口点。我相信我已经看到其他几个模块也这样做了,但绝大多数只是使用index.js.
这背后的理由是什么?当然,我理解为什么您要将服务器和用于设置程序的代码拆分为单独的模块,但为什么bin/www而不呢index.js?为什么将主入口点嵌套到比它调用的内容更深两层的程序中?并删除文件扩展名,使其更加缺乏描述性?
这背后是否有一个聪明的、不明显的原因?我也应该将其用于我的节点模块吗?
谢谢你!
[编辑]:
所有好的答案,谢谢大家!我已经接受了这一观点,指出这是包含可执行文件的包的标准行为。这是我在这方面遇到的更多阅读:
假设我有一个字符串列表/元组,
COLOURS = [
"White",
"Black",
"Red"
"Green",
"Blue"
]
for c in COLOURS:
# rest of the code
Run Code Online (Sandbox Code Playgroud)
有时我忘记在列表中的每个条目后面放置逗号("Red"在上面的代码片段中)。这会产生一个"RedGreen"而不是两个单独的"Red"列表"Green"项。
由于这是有效的 Python,因此没有 IDE/文本编辑器显示警告/错误。错误的值仅在测试过程中才会引起注意。
我应该使用什么写作风格或代码结构来防止这种情况?
code-structure ×10
python ×3
express ×2
function ×2
javascript ×2
node.js ×2
annotations ×1
c ×1
c# ×1
clojure ×1
code-design ×1
frameworks ×1
java ×1
julia ×1
mcc ×1
opengl ×1
slimdx ×1
state ×1
unit-testing ×1
vertexdata ×1