小编Dae*_*min的帖子

计算LookAt矩阵

我正在编写一个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)

现在我得到它在旋转方面的工作方式,但我不太明白的是为什么它将矩阵的平移组件放在那些点积上.稍微检查一下,它似乎是根据新基础矢量投影到眼睛/摄像机位置上的一小部分来调整摄像机位置.

问题是为什么需要这样做?它完成了什么?

math 3d graphics projection

37
推荐指数
3
解决办法
8万
查看次数

如何在WindowsC++/CLI中获取应用程序可执行文件名?

我需要根据可执行文件名更改应用程序的功能.没什么大不了的,只是更改显示的字符串和一些内部标识符.该应用程序是由本机和.Net C++ - CLI代码混合编写的.

我看过的两种方法是在Win32中解析GetCommandLine()函数,并在.Net中填充AppDomain和其他东西.但是,使用GetCommandLine并不总是有效,因为从调试器运行时命令行为空.而.Net AppDomain的东西似乎需要大量的东西.

那么在C++/CLI中确定可执行文件名称的最好/最简单/最有效的方法是什么?(我有点希望我错过了.Net中可用的简单内容.)

编辑:我应该提到的一件事是,这是一个使用C++/CLI的Windows GUI应用程序,因此无法访问传统的C风格主函数,它使用Windows WinMain()函数.

.net winapi c++-cli

19
推荐指数
3
解决办法
3万
查看次数

命令提示符执行具有相同名称的文件的顺序(a.bat vs a.cmd vs a.exe)

Windows命令提示符执行具有相同名称但不同扩展名的文件的顺序是什么?

例如,我有一堆可执行文件(something.cmd,something.bat,something.exe).当我在命令提示符中键入"something"时(如果它们在路径上等),将执行以下哪些操作?如果该文件不存在,那么将执行哪一个?

有没有描述这个的参考?

windows command-line cmd batch-file

16
推荐指数
1
解决办法
6954
查看次数

如何计算包围其他边界球的最小边界球

我正在寻找一个有人可以访问的算法,它将计算包含一组其他边界球体的最小边界球体.我已经考虑了一段时间,并提出了一些初步的解决方案,但我不相信这些必然是最准确或最少计算的(最快).

第一个想法

我的第一个解决方案是最简单的天真解决方案,即平均球形中心以获得中心点,然后计算从计算中心到每个球体中心的最大距离加上其半径,作为半径.所以伪代码如下:

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我不是不是这么肯定.

Welzl的算法

据我所知,该算法的基础是3维中一组点上的最小边界球可以由最多4个点(在封闭球体的表面上)确定.因此,该算法通过选择4个点进行迭代,然后测试其他点以查看它们是否在内部,如果它们不是新的边界球,则构造特征为新点.

现在算法严格处理点,但我认为它可以应用于处理球体,主要的复杂因素是在构造封闭球体时对半径进行处理.

回到问题

那么,对于一组给定的球体,创建最小边界球的"最佳"算法是什么,至少是计算成本最高的算法?

我在这里描述了其中一个答案吗?一些伪代码或算法会很棒.

math collision-detection

14
推荐指数
2
解决办法
1万
查看次数

在Rails之外的HAML中渲染HAML部分

我正在使用HAML为网站生成一些静态html页面,我想将常见组件拆分为可以包含在多个页面中的部分,就像在Rails中一样.但是我不想使用整个Rails堆栈来执行此操作,因为它看起来有点矫枉过正.

我在互联网上环顾四周,但没有找到任何东西,比做以下事情更好:

Haml::Engine.new(IO.read("header.haml")).render
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法在HAML中包含所谓的部分内容?我缺少的现有过滤器或命令?

ruby haml

9
推荐指数
1
解决办法
4215
查看次数

jQuery和Prototype目前有什么区别?

最近几个月我一直在构建Ruby on Rails站点,我只使用了少量的内置JavaScript函数.但是,我将在未来几周和几个月内进行更多的JavaScript开发,并且我正在讨论要使用哪个JavaScript框架.

一方面jQuery似乎是更受欢迎的,但是再次将Prototype内置到Rails中.几年前我还在网上阅读了一些文章,讨论jQuery在某些方面是如何更简洁,但在其他方面却很邋and,并提出了各种其他意见.

所以我的问题是那些使用过两者的人(最近最近):

  • 从纯JavaScript和Ruby on Rails角度使用Prototype和jQuery有什么不同?
  • 它们之间是否存在显着差异,或者它们在功能和代码编写方面现在彼此非常接近?
  • 在必须重新考虑的事物和必须重写的代码方面,转换成本有多高?

谢谢

javascript jquery ruby-on-rails prototypejs

8
推荐指数
2
解决办法
5289
查看次数

ATL/WTL是否仍然需要使用全局_Module变量?

我刚刚开始一个新的ATL/WTL项目,我想知道是否还需要全局_Module变量?

回到我开始使用WTL几年后,您需要(至少对于ATL 3.0)定义一个全局变量,例如:

CAppModule _Module;
Run Code Online (Sandbox Code Playgroud)

让ATL正常工作.但是最近我在某处读到了这可能不再需要了(但是向导生成的代码仍然使用它).我还搜索了Visual C++ include目录,它只在几个地方选择了_Module - 最着名的是ATL COM注册表内容.

那么我现在还需要定义一个全局变量来使用ATL吗?

c++ wtl atl

4
推荐指数
1
解决办法
3625
查看次数