平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

WoW's terrain gloss map

WoW's terrain gloss map, why they store the redundant terrain texture???
   
黄金之路


RealtimeRendering纹理贴图章节谈及这种用法,由Bushnell和Mitchell提出.将Glossmap存放在纹理的Alpha通道中.Wow中地形纹理_s结尾的为带Glossmap纹理,专门提供给支持PixelShader的机器,低端机器载入不带_s的普通纹理(还是有大量数据冗余,浪费硬盘空间,why?).
地形有凹凸贴图吗?否定,实在太贵.
最烦的就是凹凸贴图,到哪见到的都是它,俗,俗的很.

posted @ 2005-10-30 13:45 linghuye 阅读(772) | 评论 (1)编辑 收藏

Lua编程低级错误

1.带有中文的lua教本没有保存成UTF8格式,导致中文字符串分析失败,太低级了.
2.LuaEdit这个工具不错,至少可以调试,还能检查基本语法.可惜是Delphi写的,不知什么时候就崩溃.

posted @ 2005-10-28 20:19 linghuye 阅读(766) | 评论 (1)编辑 收藏

官僚制度和程序设计

官僚制度者:以官僚们的根本利益为出发点而设计的制度称官僚制度.

大凡国内的公司企业,政府机构的制度的设计的根本不是为其面向的对象服务的,它设计的准则在于自身成本的最小化.当你办的手续不幸和公司,政府机构都有关联时,考验你意志力的时候就到了.由于这两方都追求各自的成本最小化,当然你的成本必然的就最大化了,于是你就像个皮球一样被踢来踢去,你抱怨,你咒骂,但是,制度被设计的时候,你的利益是不被考虑的.

程序设计也是一样,一个信息由于服务端和客户端都追求他们的成本和风险最小,也不断的被踢来踢去,幸好之上还有个程序员可以干涉这个制度,可以修正混乱的逻辑.

而一个公司跟它的员工们利益相见,斤斤计较,为了自身所谓的管理利益列出种种条款,言必称成本,动必以罚款的时候,这些制度的直接效果的危害远不如它带来的一种威胁的气氛,令那些觉得制度离自己甚远的人们也感到不时的不安和恶心.

而一个公司的制度如何,直接到它的行政部门办一下事情就知道了,这回政府机构没有卡我,倒是公司的部门要卡我1个月多,我对其办事成本的节约精神感到很满意,相信公司的管理者也同意我这个看法.于是,可想而知,这个公司的职能部门对成本也是很节约的,一道道的申请,一道道的请示,以让管理者们有统治者的快感.但是要记住这条: 实际在做事的人的成本和利益是不被考虑在这个制度中的.

制度是一种侵蚀人的东西,当你的领导用行政指令要求你这样写程序时,当他们在设计游戏引擎时以制作成本为主导时,当有人说做1个10万人在线的游戏不如做10个1万人在线的游戏,我总是低声嘟囔着,你再横,也该把这种有巨大的士气杀伤力的话埋在心里.

上学时我最恶心的莫过于学分制度,它要求你修完选修的积分,而那些沉闷的选修大课,报名时黑压压几百人,平时稀稀拉拉,考试时又黑压压几百人,人头攒动,这就是一个制度公开地要求一个学生去作弊!而对程序也来搞这种分数制时,我难以想见其中的利益纠缠和可能的丑恶.而对于我,在工作中认识到的朋友才是最重要的,其他的,当你离开的时候,都散了,就像那天上的浮云.

posted @ 2005-10-19 17:06 linghuye 阅读(429) | 评论 (1)编辑 收藏

OpenGL 2D模式总结

设cx,cy为窗口的高和宽
1. glOrtho(0, cx, cy, 0, -1, 1);   // Windows窗口坐标模式
2. glOrtho(0, cx, 0, cy, -1, 1);   // 直角坐标系模式
3. 默认 glDrawPixels(m_gxImg.nWidth, m_gxImg.nHeight, m_gxImg.format, GL_UNSIGNED_BYTE, m_gxImg.data); 从FrameBuffer下方往上方画,使用 glPixelZoom(1.0f, -1.0f);使得从上往下画.假设使用Windows窗口坐标模式,则等同于Windows模式.但此时的图像数据也应该是从上至下的,才能对应. 
4.从下到上存放图像的格式:Bmp,tga,ico
   从上到下存放的为:jpg,png

posted @ 2005-10-14 23:12 linghuye 阅读(2706) | 评论 (2)编辑 收藏

压缩算法

RLE:http://www.arturocampos.com/ac_rle.html

posted @ 2005-10-08 21:44 linghuye 阅读(399) | 评论 (0)编辑 收藏

OpenGL Shader Language笔记

Vector: vec2,vec3,vec4/xyzw,rgba,stpq
Matrix: mat2,mat2,mat3
Sampler: sampler1D,sampler2D
Qualifiers have been added to manage the input and output of shaders: 
  1.attribute: From app to vertex shader
  2.uniform: From app to any shader 
  3.varying: Interpolated values from vertex shader to fragment shader
 

Shaders written in the OpenGL Shading Language can use built-in variables that begin with the reserved prefix "gl_" in order to access existing OpenGL state and to communicate with the fixed functionality of OpenGL.

the compiler for the OpenGL Shading Language is actually part of the OpenGL driver environment. This is one of the key differences between the OpenGL Shading Language and other shading language designs.

Varying variables provide an interface between Vertex and Fragment Shader. Vertex Shaders compute values per vertex and fragment shaders compute values per fragment. If you define a varying variable in a vertex shader, its value will be interpolated (perspective-correct) over the primitve being rendered and you can access the interpolated value in the fragment shader.

Varying can be used only with the data types float, vec2, vec3, vec4, mat2, mat3, mat4. (arrays of them too.)

References:
http://www.clockworkcoders.com/oglsl/

posted @ 2005-10-08 00:49 linghuye 阅读(2586) | 评论 (0)编辑 收藏

电脑故障排除备忘

1.WindowXP下菜单突然显式非Flat风格,或刷新出现问题,解决:换到Window2000风格再换回来.
2.安装下载的的英文Win2000系统

试图在WinXP下安装,报告版本太低,不能安装. 机器没有中文2000系统,硬盘全部NTFS格式,尝试进入Dos安装,不认硬盘,失败.

于是先备份现有XP下的NTDETECT.com和ntldr两个文件,笔写记下CDKey,再用光驱启动并安装一个光盘上的中文Window2000系统到D盘,安装完毕后进入Win2000桌面系统,执行下载的英文版的Win2000安装程序Setup.exe,安装程序为GUI模式,数据准备完毕后自动重启进入Dos模式,开始安装英文Win2000,再次选择D盘格式化,开始安装,完毕.

进入安装完毕的英文系统,添加中文语言包支持,将原先备份的两个文件复制回C:根目录,done!

3.安装j2sdk,出现Failed to extract file 'Dll_.ini' from the binary table问题.Windows Installer出现乱码.google:
发现,使用过 AppLocale 后,C:\WINDOWS\AppPatch

这个数据夹可能会出现 AppLoc.tmp 这个档案。

 

此档案可能会造成 Windows Installer 运作错误,

不但安装程序的画面变成乱码,还会随着安装程序,

把乱码带入 Registry,造成很多问题。

 

开启 %windir%\\AppPatch 目录

以「16进制编辑器」开启 AppLoc.tmp

把数字 11 改成数字 04 存盘

最后记得把 AppLoc.tmp 的 「只读」 勾起来

这样就完成了...

 

繁体 => 0404

香港 => 040C

简体 => 0408

微软写的软件一向都这么霸道.

posted @ 2005-10-03 10:02 linghuye 阅读(513) | 评论 (0)编辑 收藏

GL_NV_register_combiners及GL_NV_XXX 扩展

设显卡硬件拥有最大4层纹理,求如何不用PixelShader语言,实现(tex0 * tex1) * (1-src_alpha) + (tex2 * tex3)*src_alpha
结论:Impossible, Use Shader  is a wise solution                           2005.12.13

使用Nvidia对OpenGL的Texture Shader机制,Register Combiners,更灵活的纹理计算机制且不使用PixelShader,从 Geforce256 开始支持,属于早期的对Pixel Shader的支持,概念很复杂.

1.Register Combiners纹理混合机制并行于原有OpenGL纹理混合机制,使用glEnable(GL_REGISTER_COMBINERS_NV)激活该扩展机制,激活后原有纹理混合机制不再起作用(如为glTexEnv所设之参数),可使用glDisable(GL_REGISTER_COMBINERS_NV)再切换回常规的机制.

2.General Combiner和Final Combiner:显卡支持1-N个General Combiner,仅1个的Final Combiner,Geforce2支持2个General Combiner,Geforce2以上显卡支持8个.
一个General Combiner可用来作如下公式运算: (A op1 B) op3 (C op2 D),并输出A op1 B, C op2 D, (A op1 B) op3 (C op2 D)三个结果值到指定的Register上.
一个Final Combiner用来作如下运算 A*B+(1-A)*C+D.
每个General Combiner按序计算,并将计算结果值作为Input Register传入下一个General Combiner继续计算,最后传入Final Combiner完成最后的计算,生成的RGBA值继续传入Pixel处理管道,Depth Testing,blending...

3.API的作用就是定义这些A,B,C,D...变量,op1,op2,op3这些计算操作符,还有那些复杂的状态.

4.使用glCombinerParameteriNV(GL_NUM_GENERAL_COMBINERS_NV, 1)设置要使用的Combiner数量.
 
5.使用glCombinerParameterfvNV,传送常数颜色值到Texture Shader环境,以备随后使用GL_CONSTANT_COLOR0_NV引用之.

6.使用glCombinerInputNV将某输入参数绑定到某变量上,如
  glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_A_NV, GL_TEXTURE0_ARB, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
  取出纹理单元GL_TEXTURE0_ARB(input)的GL_RGB(componentUsage)值,作一下GL_UNSIGNED_IDENTITY_NV值域变换(mapping),并绑定到GL_COMBINER0_NV(stage)的GL_VARIABLE_A_NV(variable)的GL_RGB(portion)上,即前3个参数指定了目标变量,后3个参数指定了要赋予的状态值.
 
7.使用glCombinerOutputNV将某个Combiner的3个结果值绑定到下一轮的Combiner的Input Register上
  glCombinerOutputNV(GL_COMBINER0_NV, GL_RGB, GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE);
  将A op1 B结果绑定到GL_SPARE0_NV的GL_RGB(portion),丢弃(GL_DISCARD_NV)没用到的2个计算值.
 
8.使用glFinalCombinerInputNV定义Final Combiner的输入变量 
  glFinalCombinerInputNV(GL_VARIABLE_A_NV, GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
  将GL_SPARE0_NV(input)的GL_RGB(componentUsage)作一下GL_UNSIGNED_IDENTITY_NV值域变换(mapping),并绑定到FinalCombiner的A变量上.
 
9.最终输出的Fragment的Alpha值等于为Final Combiner定义的GL_VARIABLE_G_NV取值.

glEnable(GL_REGISTER_COMBINERS_NV);

glCombinerParameteriNV(GL_NUM_GENERAL_COMBINERS_NV, 
1);

float vClr[4= 1.0f1.0f1.0f1.0f };
glCombinerParameterfvNV(GL_CONSTANT_COLOR0_NV, vClr);

// 实现ADD_MODULATE    tex0 + tex1
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_A_NV, GL_TEXTURE0_ARB, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_B_NV, GL_CONSTANT_COLOR0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_C_NV, GL_TEXTURE1_ARB, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_D_NV, GL_CONSTANT_COLOR0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glCombinerOutputNV(GL_COMBINER0_NV, GL_RGB, GL_DISCARD_NV, GL_DISCARD_NV, GL_SPARE0_NV, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE);

glCombinerInputNV(GL_COMBINER0_NV, GL_ALPHA, GL_VARIABLE_A_NV, GL_TEXTURE0_ARB, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);
glCombinerInputNV(GL_COMBINER0_NV, GL_ALPHA, GL_VARIABLE_B_NV, GL_CONSTANT_COLOR0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);
glCombinerInputNV(GL_COMBINER0_NV, GL_ALPHA, GL_VARIABLE_C_NV, GL_TEXTURE1_ARB, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);
glCombinerInputNV(GL_COMBINER0_NV, GL_ALPHA, GL_VARIABLE_D_NV, GL_CONSTANT_COLOR0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);
glCombinerOutputNV(GL_COMBINER0_NV, GL_ALPHA, GL_DISCARD_NV, GL_DISCARD_NV, GL_SPARE0_NV, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE);
    
glFinalCombinerInputNV(GL_VARIABLE_A_NV, GL_CONSTANT_COLOR0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);
glFinalCombinerInputNV(GL_VARIABLE_B_NV, GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_C_NV, GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_D_NV, GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_G_NV, GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);

    // 实现BLEND_MODULATE    tex0 * tex1
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_A_NV, GL_TEXTURE0_ARB, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_B_NV, GL_TEXTURE1_ARB, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glCombinerOutputNV(GL_COMBINER0_NV, GL_RGB, GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE);

glCombinerInputNV(GL_COMBINER0_NV, GL_ALPHA, GL_VARIABLE_A_NV, GL_TEXTURE0_ARB, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);
glCombinerInputNV(GL_COMBINER0_NV, GL_ALPHA, GL_VARIABLE_B_NV, GL_TEXTURE1_ARB, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);
glCombinerOutputNV(GL_COMBINER0_NV, GL_ALPHA, GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE);
    
glFinalCombinerInputNV(GL_VARIABLE_A_NV, GL_CONSTANT_COLOR0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);
glFinalCombinerInputNV(GL_VARIABLE_B_NV, GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_C_NV, GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_D_NV, GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_G_NV, GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA);

References:(无基本使用方法和简单示例文档)
http://developer.nvidia.com/object/programmable_texture_blending.html
http://oss.sgi.com/projects/ogl-sample/registry/NV/register_combiners.txt
http://developer.nvidia.com/object/registercombiners.html

posted @ 2005-10-01 11:48 linghuye 阅读(740) | 评论 (1)编辑 收藏

祭N6600文

维年月日,于我一周之蹂躏下,N6600显卡终于与昨晚凌晨1:30分悲愤地告别了这个伤痛的世界,失去了视频输出信号.

在其短暂的一生中,在我学习高压的研究之下,它经历了所有的OpenGL扩展功能函数,运行了所有的Nvida的Demo,残喘在3D Mark测试之下,呻吟在魔兽世界的高阶图设下,终于力不能支倒在我杀手级的DestinyMatrix 3D引擎之下,死机了.其时,它正播放着我爱我家的DVD画面,同时在DestinyMatrix下加载了500个以上的顶点硬件缓冲,500个以上的Alpha纹理图,在384 * 384 * 4的三角片下,光荣地黑屏了.

轻轻的走,正如它轻轻的来.生亦何苦,死亦何哀! 短暂的一生,它作了显卡该作的事,为我的知识进步作出了巨大贡献.

十年生死两茫茫,不思量,自难忘,千里孤坟无处话凄凉.言有穷而情不可终,汝其知也邪?其不知也邪?呜呼哀哉,尚飨!

                                                                linghuye写于新换回来的N6200GE下           
References:
《祭十二郎文》 韩愈

posted @ 2005-09-30 11:39 linghuye 阅读(449) | 评论 (1)编辑 收藏

DestinyMatrix开发手扎.2700

场景图系统使得引擎实体从管理层中分离出来,实体不参加管理层的运作,也不带管理的数据.
对一个物质实体而言,其不存在可见性这一属性数据,可见性是由管理层控制的,即物质实体是唯物主义,场景图是唯心主义.

场景图是个宽松的,随意的管理层,其任务是为各种各样的SceneNode保持最基本的层次关系,这个层次关系可以用来实现从上到下的空间变换,渲染状态的最小化切换.

从ISceneNode派生出各方面的SceneNode,表达对自己管理的场景的理解,即一个ISceneNode从概念上就是个小场景图,但其算法是单一的,如4叉,8叉,BSP等,从而实现一个大场景图中包含应用各种算法的小场景图.
而最上层的场景图是一种由人力控制,排序,维护的场景图,它的节点是泛用容器节点类型,基本概念是可以在编辑器中显式地创建一个容器式的节点,并为节点加载内容场景.
万事万物都可以纳入场景图,因为它的上层是宽松的逻辑概念.

10.4 完成基本场景图程序设计.
11.4 笑傲江湖马戏团 :)
11.08,终于一个雏形诞生了,真正基于场景图,渲染API层完全隔离,采用统一的Material+Mesh渲染抽象,渲染状态切换最小化,骨骼动画框架,仿WoW游戏镜头控制.
12.12  地形算法整合清理,整合原先写成的UI,脚本模块,整合wmo加载和渲染模块,完善重新思考引擎的Mesh概念,加入基本的Shader以支持复杂光照模型.基本地平线剔除代码.多次代码重构.


posted @ 2005-09-29 11:12 linghuye 阅读(1783) | 评论 (3)编辑 收藏

仅列出标题
共23页: First 11 12 13 14 15 16 17 18 19 Last