我正在编写一个3d引擎,我遇到了DirectX文档中描述的LookAt算法:
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) l
Run Code Online (Sandbox Code Playgroud)
现在我得到它在旋转方面的工作方式,但我不太明白的是为什么它将矩阵的平移组件放在那些点积上.稍微检查一下,它似乎是根据新基础矢量投影到眼睛/摄像机位置上的一小部分来调整摄像机位置.
问题是为什么需要这样做?它完成了什么?
我需要根据可执行文件名更改应用程序的功能.没什么大不了的,只是更改显示的字符串和一些内部标识符.该应用程序是由本机和.Net C++ - CLI代码混合编写的.
我看过的两种方法是在Win32中解析GetCommandLine()函数,并在.Net中填充AppDomain和其他东西.但是,使用GetCommandLine并不总是有效,因为从调试器运行时命令行为空.而.Net AppDomain的东西似乎需要大量的东西.
那么在C++/CLI中确定可执行文件名称的最好/最简单/最有效的方法是什么?(我有点希望我错过了.Net中可用的简单内容.)
编辑:我应该提到的一件事是,这是一个使用C++/CLI的Windows GUI应用程序,因此无法访问传统的C风格主函数,它使用Windows WinMain()函数.
Windows命令提示符执行具有相同名称但不同扩展名的文件的顺序是什么?
例如,我有一堆可执行文件(something.cmd,something.bat,something.exe).当我在命令提示符中键入"something"时(如果它们在路径上等),将执行以下哪些操作?如果该文件不存在,那么将执行哪一个?
有没有描述这个的参考?
我正在寻找一个有人可以访问的算法,它将计算包含一组其他边界球体的最小边界球体.我已经考虑了一段时间,并提出了一些初步的解决方案,但我不相信这些必然是最准确或最少计算的(最快).
我的第一个解决方案是最简单的天真解决方案,即平均球形中心以获得中心点,然后计算从计算中心到每个球体中心的最大距离加上其半径,作为半径.所以伪代码如下:
function containing_sphere_1(spheres)
center = sum(spheres.center) / count(spheres)
radius = max(distance(center, spheres.center) + radius)
return Sphere(center, radius)
end
Run Code Online (Sandbox Code Playgroud)
然而,我觉得它不是那么计算上便宜,也不是很准确,因为产生的球体可能比它需要的大得多.
我的第二个想法是使用迭代算法来计算最小边界球.它是通过连续测试另一个球体来计算的,如果测试的球体在边界内,则不做任何事情,否则从可用的两个球体计算新的边界球体.新的边界球体的中心位于两个中心之间的矢量之间,如果它延伸到球体表面,半径是该线条长度的一半(从新中心到球体表面).
function containing_sphere_2(spheres)
bounds = first(spheres)
for each sphere in spheres
if bounds does not contain sphere
line = vector(bounds.center, sphere.center)
extend(line, bounds.radius)
extend(line, sphere.radius)
center = midpoint(line)
radius = length(line) / 2
bounds = Sphere(center, radius)
end
end
return bounds
end
Run Code Online (Sandbox Code Playgroud)
最初我认为这将是要走的路,因为它是迭代的并且看起来相当逻辑上一致,但是在做了一些阅读后,最值得注意的是文章"最小的封闭盘(球和椭圆体)"由Emo Welzl我不是不是这么肯定.
据我所知,该算法的基础是3维中一组点上的最小边界球可以由最多4个点(在封闭球体的表面上)确定.因此,该算法通过选择4个点进行迭代,然后测试其他点以查看它们是否在内部,如果它们不是新的边界球,则构造特征为新点.
现在算法严格处理点,但我认为它可以应用于处理球体,主要的复杂因素是在构造封闭球体时对半径进行处理.
那么,对于一组给定的球体,创建最小边界球的"最佳"算法是什么,至少是计算成本最高的算法?
我在这里描述了其中一个答案吗?一些伪代码或算法会很棒.
我正在使用HAML为网站生成一些静态html页面,我想将常见组件拆分为可以包含在多个页面中的部分,就像在Rails中一样.但是我不想使用整个Rails堆栈来执行此操作,因为它看起来有点矫枉过正.
我在互联网上环顾四周,但没有找到任何东西,比做以下事情更好:
Haml::Engine.new(IO.read("header.haml")).render
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法在HAML中包含所谓的部分内容?我缺少的现有过滤器或命令?
最近几个月我一直在构建Ruby on Rails站点,我只使用了少量的内置JavaScript函数.但是,我将在未来几周和几个月内进行更多的JavaScript开发,并且我正在讨论要使用哪个JavaScript框架.
一方面jQuery似乎是更受欢迎的,但是再次将Prototype内置到Rails中.几年前我还在网上阅读了一些文章,讨论jQuery在某些方面是如何更简洁,但在其他方面却很邋and,并提出了各种其他意见.
所以我的问题是那些使用过两者的人(最近最近):
谢谢
我刚刚开始一个新的ATL/WTL项目,我想知道是否还需要全局_Module变量?
回到我开始使用WTL几年后,您需要(至少对于ATL 3.0)定义一个全局变量,例如:
CAppModule _Module;
Run Code Online (Sandbox Code Playgroud)
让ATL正常工作.但是最近我在某处读到了这可能不再需要了(但是向导生成的代码仍然使用它).我还搜索了Visual C++ include目录,它只在几个地方选择了_Module - 最着名的是ATL COM注册表内容.
那么我现在还需要定义一个全局变量来使用ATL吗?
math ×2
.net ×1
3d ×1
atl ×1
batch-file ×1
c++ ×1
c++-cli ×1
cmd ×1
command-line ×1
graphics ×1
haml ×1
javascript ×1
jquery ×1
projection ×1
prototypejs ×1
ruby ×1
winapi ×1
windows ×1
wtl ×1