|
|
2009年6月30日
如何上下颠倒一个场景的成像? 我的第一个念头是想把镜头上下颠倒(Up向量取负)即可,后来想想不对,镜头上下颠倒后,世界也左右颠倒了. 然后想可以在投影矩阵上搞鬼,因为经过正常投影矩阵作用后的顶点的y值分布在[-1,1]之间,所以对y取负,就可以使画面颠倒呈现(而且对上层毫无影响).如果使用可编程流水线,只要在VertexShader里将输出的gl_Position的y值取负即可.如果使用固定流水线,需要将正常的投影矩阵左乘(DX是右乘)一个Scale(1.0f, -1.0f, 1.0)矩阵即可,也可以直接将正常投影矩阵的第2行(DX是第2列)取负. 实作后,果然画面正确地上下颠倒了.但是发现,从VS到PS的法线的插值结果不对了,图像化PS中的法线值后呈现的颜色和无颠倒的图像颜色完全不同,似乎前后颠倒了,如下: void main() { gl_Position = ftransform(); gl_Position.y = -gl_Position.y; // 将顶点法线传入PS gl_TexCoord[0] = vec4(gl_Normal, 1.0); } void main() { // 将法线值显示出来 gl_FragData[0] = gl_TexCoord[0]; } 根据Perspective-Correct Interpolation的数学原理,深度值倒数是线性插值的,而从VS到PS的数值是根据深度值倒数做的插值:   研究公式后,觉得y值取负理应不会影响到z值的正确计算,z值不变,整个插值的结果应该是不变的,茫然不知所以. 今天突然想到,y值取负后,所有三角形成像颠倒了,三角形的顶点顺序也逆反了,原来逆时针的变成了顺时针,影响了GL_CULL_FACE,输出的画面会呈现前后颠倒的假象,实作下果然如此,修改了CULL_MODE后,终于得到想要的画面了. 其实,我想说,搞图形学,你不懂数学原理能行吗? Reference:Mathematics for 3D Game Programming and Computer Graphics
2009年6月28日
1.MSDN中给出的glOrtho矩阵数学表达式是不符合实践的,是误导的. 2.很多网站上的glOrtho数学表达式是错误的,查资料时要注意. 3.正确的表达式应该是 http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml 4.注意在传入参数时,far/near是正数,但实际的含义是指-far,-near,因为OpenGL是右手坐标系,镜头空间的+Z指向观察者,-Z才指向世界深处.
2009年6月18日
Reference to: http://www.ai-blog.net/archives/2008_07.html
今天某人问到我3D游戏的寻路,我现在的公司是从来只做伪3D,绝对不做真3D的,我是没实作过3D寻路的. 我想起Game Gems里有篇文章论述这个问题,当初只是粗略看了看,有点印象,接着搜索资料时,找到这篇博客文. 看完上文,我对3D游戏的寻路再无疑惑,真是完美的方案,强烈推荐阅读. 贴几张原文中的图,呵呵,魔兽世界的寻路方案也知道了. 


2009年4月17日
1.使用CreateWindowExW创建控件,如 hEditWnd = CreateWindowExW(WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE, L"Edit", NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL, 0, 0, 300, 24, m_hWnd, (HMENU)IDC_UNICODE_EDIT, NULL, NULL);
2.在焦点进入Edit控件时,进入自己的消息泵,此消息泵使用GetMessageW,DispatchMessageW来完成消息分发. m_bStopMonitorUnicodeEdit = false; for(;;) { if(m_bStopMonitorUnicodeEdit) break; MSG msg = { 0 }; BOOL bRet = ::GetMessageW(&msg, NULL, 0, 0); if(bRet == -1) { continue; // error, don't process } else if(!bRet) { break; // WM_QUIT! exit message loop } ::TranslateMessage(&msg); ::DispatchMessageW(&msg); }
4.在焦点退出Edit控件时, 退出消息泵. m_bStopMonitorUnicodeEdit = true;
Reference: 在网络上查过资料,那些回答都是垃圾,连问题的根源都没摸著边.
清明加年假,休了5天,在妻子的老家,一个闽浙赣三省交界的乡村过的.春暖花开,过得相当的惬意.回福州的客车上,暮色霭霭,望着窗外,想着自己何时才能过上惬意的人生,想给自己放假时就放假,放个几天也可,几个月也可,十几年也可,不用为生计发愁.虽然,现在的薪资也算高了,但是离开这份工作,我的生活依然没有保障,这种感觉让我非常地不舒服.
我经常想,没有经济自由就没有独立人格,写出程序也都是垃圾.我在公司里写的全是丑陋的产品代码,没有生气,没有灵魂,我自己看着都觉得恶心.我在公司里写的没有一个是完全按自己的思路实现的程序,全是市场,上头,保持兼容,保持稳定的思路.我就是一个代码工人,听到有人叫我牛人,我都觉得非常害臊,我大部分时间写的代码都是在养家糊口,只能在博客里发发牢骚,写写自己喜欢的代码.
还有公司里评比,评审这些事,我憎恶这种感觉,源于我憎恶被别人考试这种感觉.大学毕业时,就因这种感觉跟系主任和论文指导老师都闹翻了,因为他们总让我感觉,他们能左右我的前路,如果不听从他们的建议,他们能损害我的利益,这种感觉令我非常不舒服,浑身上下每个毛孔都不舒服.
工作几年后,在工作中总是碰到无穷无尽的Bug,很多Bug很烦人,扰得几天心绪不宁,一直在想这些Bug到底是怎么回事,即使休息时一想起这些Bug,就像想起不开心的往事,搞得心情很糟.所以,之后我学会了在非工作时间忘记这些事情,不在休息时去想这些问题,否则生活会相当地痛苦.怎样忘记这些Bug? 一定学工作无所谓些!不能为了几行代码,电脑里的几段指令,这些虚无的技术,搞得自己的实体生活都不开心,回家多陪陪老婆孩子才是生活的真正意义.
为,早日退休,过上无忧无虑的生活,而奋斗终生!
2009年4月14日
Pixel Shader实现Galaxy效果,ShaderX2中使用cg实现.此Demo使用glsl和hlsl实现. http://www.cnitblog.com/Files/linghuye/GalaxyTexture.rar
按Enter键切换galaxy模式,按小键盘数字键切换变换速度. References: ShaderX2: Galaxy Texture
2009年3月19日
2009年2月8日
DestinyMatrix底层实现下的图像边缘检测shader. OpenGL&DirectX实现. Shader源码改编于<ShaderX2> Advanced Image Processing with DirectX 9 Pixel Shaders http://www.cnitblog.com/Files/linghuye/EdgeDetection.rarhttp://www.cnitblog.com/Files/linghuye/RobertsCross.rar
2009年2月3日
实验整合Scaleform与我的DestinyMatrix引擎,写的Demo,仅作测试. http://www.cnitblog.com/Files/linghuye/ScaleformDemo2.rar
2009年1月23日
http://www.ebookee.com.cn
这是个搜索电子书的搜索引擎,搜索到的文件大多放在国外的下载服务站点上,下载很慢但是确实能下载.
我最近在上面找到: RealTimeRendering 2nd RealTimeRendering 3rd(最新第3版,Amazon上卖八十多美刀) Artificial Intelligence for Games.pdf Advanced Lighting and Materials With Shaders.pdf Mobile 3D Graphics with OpenGL ES and M3G.pdf The.Art.of.Multiprocessor.Programming.pdf RealisticRayTracing.djv
凡是出过电子版的大多都能查到,并下载到. 比如: Collision Detection in Interactive 3D Environments Game.Physics Physically-Based Rendering
|