18 Jan 2011

外接液晶屏幕有水波纹【终极解决办法】

问题关键词:
笔记本外接显示器,一般是液晶显示器,出现水波纹,出现闪屏,并且,症状会在放电影的时候加重,颜色越深约明显。如果将笔记本电源拔掉,水波纹消失,一切回复正常。一旦插上电源,外接屏幕又开始闪屏。

此症状一般在大显示屏(20寸以上)会经常出现。

这个问题,至少在我周边两位同事都有同样的现象出现,并且,百思不得其解。

尝试了N多办法:换插线板;插在不同的插线板上;移走干扰设备;还订购了加粗了“VGA”线

正解是:将笔记本的三脚插头,接上一个“二脚转接头”,也就是将笔记本电源适配器的三脚插头变成二脚插头,再接到接线板上即可.

6 Jan 2011

VS2008 OpenGL 配置


方式一:----->
第一步,选择一个编译环境
现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev- C++等,它们都是支持OpenGL的。我选择Visual Studio 2008作为学习OpenGL的环境。
第二步,安装GLUT工具包
GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows环境下的GLUT下载地址:(大小约为150k)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
Windows 环境下安装GLUT的步骤:
1、将下载的压缩包解开,将得到5个文件
2、把glut.h复制到x:\Program Files\Microsoft\Visual Studio 9.0\VC\include\GL文件夹中,如果没有GL这个文件夹则可以自己新建一个。
3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(即与include并排的lib文件夹下)。
4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32 文件夹内。
第三步,建立一个OpenGL工程
选择 File->New->Project,然后选择Win32 Console Application,(不是 win32 application).选择一个名字,然后按OK。
在弹出的对话框左边点Application Settings,找到Empty project 并勾上,选择Finish。然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c来作为文件结尾。
搞定了,就跟平时的工程没什么两样的。

第一个OpenGL程序
一个简单的 OpenGL程序如下:(注意,如果需要编译并运行,需要正确安装 GLUT,安装方法如上所述)
#include 
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
    glFlush();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow(" 第一个OpenGL程序");
    glutDisplayFunc(&myDisplay);
    glutMainLoop();
    return 0;
}
该程序的作用是在一个黑色的窗口中央画一个白色的矩形。下面对各行语句进行说明。

首先,需要包含头文件#include ,这是GLUT的头文件。
本来OpenGL程序一般还要包含和,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。

然后看main函数。
int main(int argc, char *argv[]),这个是带命令行参数的main函数,各位应该见过吧?没见过的同志们请多翻翻书,等弄明白了再往下看。
注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。
1、glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句 glutInit(&argc, argv)就可以了。
2、 glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。更多信息,请自己Google。当然以后的教程也会有一些讲解。
3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。
4、 glutInitWindowSize,这个也简单,设置窗口的大小。
5、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
6、 glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧)。
7、glutMainLoop,进行一个消息循环。(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了。)

在glutDisplayFunc函数中,我们设置了“当需要画图时,请调用myDisplay函数”。于是myDisplay函数就用来画图。观察 myDisplay中的三个函数调用,发现它们都以gl开头。这种以gl开头的函数都是OpenGL的标准函数,下面对用到的函数进行介绍。
1、 glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍。
2、 glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。
3、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。
===============================================================
这个时候会有一个控制台和一个窗口,如果不想让它显示这个控制台,则要以文件中加入
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
===============================================================
方式二:----->
1、建工程同一。
2、把所需要的头文件和.lib文件都放在工程下
3、在源文件中这样引用:
   #pragma comment( lib, "glut32.lib")
  
   #include "glut.h"
当然,想加入哪个lib或是.h就把它写在这里就OK了。

注:#pragma comment(lib,"glut32.lib")表示链接glut32.lib这个库。
和在工程设置里写上链入glut32.lib的效果一样,不过这种方法写的
程序别人在使用你的代码的时候就不用再设置工程settings了。

强烈推荐此法。

30 Dec 2010

一个很简单的opengl例子

一个很简单的opengl例子 # include <GL/glut.h>
# include <stdlib.h>

/* 初始化材料属性、光源属性、光照模型,打开深度缓冲区 */
void init ( void )
{
GLfloat mat_specular [ ] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess [ ] = { 50.0 };
GLfloat light_position [ ] = { 1.0, 1.0, 1.0, 0.0 };

glClearColor ( 0.0, 0.0, 0.0, 0.0 );
glShadeModel ( GL_SMOOTH );

glMaterialfv ( GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv ( GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv ( GL_LIGHT0, GL_POSITION, light_position);

glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glEnable (GL_DEPTH_TEST);
}

/*调用GLUT函数,绘制一个球*/
void display ( void )
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(1.0, 40, 50);
glFlush();
}


/* 定义GLUT的reshape函数,w、h分别是当前窗口的宽和高*/
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ( );
if (w <= h)
glOrtho (-1.5, 1.5, -1.5 * ( GLfloat ) h / ( GLfloat ) w, 1.5 * ( GLfloat ) h / ( GLfloat ) w, -10.0, 10.0 );
else
glOrtho (-1.5 * ( GLfloat ) w / ( GLfloat ) h, 1.5 * ( GLfloat ) w / ( GLfloat ) h, -1.5, 1.5, -10.0, 10.0);
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity ( ) ;
}


/* 定义对键盘的响应函数 */
void keyboard ( unsigned char key, int x, int y)
{
/*按Esc键退出*/
switch (key)
{
case 27:
exit ( 0 );
break;
}
}


int main(int argc, char** argv)
{
/* GLUT环境初始化*/
glutInit (&argc, argv);
/* 显示模式初始化 */
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
/* 定义窗口大小 */
glutInitWindowSize (300, 300);
/* 定义窗口位置 */
glutInitWindowPosition (100, 100);
/* 显示窗口,窗口标题为执行函数名 */
glutCreateWindow ( argv [ 0 ] );
/* 调用OpenGL初始化函数 */
init ( );
/* 注册OpenGL绘图函数 */
glutDisplayFunc ( display );
/* 注册窗口大小改变时的响应函数 */
glutReshapeFunc ( reshape );
/* 注册键盘响应函数 */
glutKeyboardFunc ( keyboard );
/* 进入GLUT消息循环,开始执行程序 */
glutMainLoop( );
return 0;
}

23 Dec 2010

stasm+opencv




要使用STASM来定位面部特征点,步骤如下: 项目的预编译头加入stasm_dll.lib,然后复制stasm_dll.dll,stasm_dll.hpp和stasm_dll.lib到cpp所在文件夹,最后把data文件夹copy到cpp的上级文件夹,在cpp中引用#include "stasm_dll.hpp"即可.




12 Dec 2010

ZT: OpenGL教程收藏



1.DancingWind NEHE中文教程
       NEHE是十分不错的opengl教程,由浅入深,配合实例讲解。而DancingWind本着一颗分享的心,制成中文版。看官不必一课一课按顺序看但每一课都应该认真看,英文可在英文版教程观看……各位可以在这个网站下载。此外DancingWind还整合了几种OPENGL框架 、SDK()。

2.EastcowBoy  OpenGL入门学习


       连载于programfan.com论坛的入门教程,建议初学者重点看看。涉及的是OpenGL基础,真正的由浅入深,eastcowboy讲解认真详细,备足功课(崇拜ING)。也讲述了很多其他教程中很难包含的关于一点原理概念上的东西,帮助你更好理解opengl。各位可点以上链接,内有目录。(P.S.期待新作)

3.LightHouse3D
提供十分有针对性的教程,譬如三维地形技术啦Billboard公告牌技术啦GLSL教程等等。而且讲解详细,看后一定有所裨益。话说我初学GLSL就是从这里开始呢。(注意是英文哦。)另外貌似还有VRML(虚拟真实建模语言)的介绍呢。

4.Ozone3D
ozone3d.net 里面可以看到很多诱人的东西,我有机会一定得好好参详。此外网站也提供OpenGL教程,但是貌似跨度比较大的说,不太适合拿来初学。另外还有GLSL,Direct3D, Demoniak3D等等的教案,资源实在太丰富了。

5.SULACO
OpenGL的Dephi实现。记得网上也有一些Dephi版的NEHE教程了,可见学OpenGL不一定只有C/C++的。但是即使你手头上只有C/C++也可以看看sulaco的教程。不难明白的,而且更重要的是一些绚丽效果的实现手法。

6.UltimateGameProgramming
这里的教程就更加“逐步”了,十分适合给初学者一直看下去学下去。其最大特点是教程间的关联性,基本每个例子都代表一项特性并都与上下文相关。缺点是,教案是“代码”,意味着看代码学习,所以初学者还是“以此为辅”吧。(注意需要.net编译器)

7.SwiftlessGameProgramming
同样是适合初学者循序渐进地学习的教程,而且附有一定的讲解。有C++版和Basic版。关键词是“一步一步来”,恩,是的,学习不可急进。

当然,系统地学习就要有书在旁,如经典的《OpenGL编程权威指南》(红宝,现在有中文第六版了)、《OpenGL编程基础》等等,但是,要记得ZwqXin在上篇文章说过的:行为决定态度啊。

再提供一些相关网站。OPENGL在这个世界上学习资源还是很多的。

Opengl.org -WIKI
Opengl.org-掌握最新信息。

Debevec
关注图形学前沿技术。

GameDev
一个属于3D技术的强大社区,高手云集于此。


开始学习OpenGL可以直接上手的awx文件
点此下载(for VC++6.0)

1 Dec 2010

ZT: Greasemonkey-让Firefox加速的油猴

Greasemonkey 是一个 firefox 扩展, 它具有通过编写脚本来改变被访问网页的功能。使用它,能使您访问的网站更便于阅读或者更便于使用。使用它,您能修复网页渲染的缺陷,而无须烦扰网站 管理员。使用它,您能让网页更好地使用残疾人援助技术,清楚响亮地说出网页内容,或者将网页内容变为盲文。使用它,您能自动地获得其它网站的数据,从而使 两个网站更好地相互链接起来。 什么是GreaseMonkey脚本?

原文链接:http://hzzgood48.com/?tag=%E6%B2%B9%E7%8C%B4%E8%84%9A%E6%9C%AC

Greasemonkey 是一个 firefox 扩展, 它具有通过编写脚本来改变被访问网页的功能。使用它,能使您访问的网站更便于阅读或者更便于使用。使用它,您能修复网页渲染的缺陷,而无须烦扰网站 管理员。使用它,您能让网页更好地使用残疾人援助技术,清楚响亮地说出网页内容,或者将网页内容变为盲文。使用它,您能自动地获得其它网站的数据,从而使 两个网站更好地相互链接起来。

然而 Greasemonkey 本身并没有作这些事。实际上,在您安装它之后,您注意到根本没有任何变动…直到您开始安装一种叫做“用户脚本”的东西。用户脚本(user script)就是一大块 javascript 代码,还有些附加信息,用来告诉 Greasemonkey 脚本应该在何时何地运行。每个用户脚本能够针对具体页面,具体网站,或者 一批网站。用户脚本能做到您在 Javascript 中可做到的任何事情。实际上,它能做得更多,因为 Greasemonkey 提供了专供用户脚本使用的函数。via
如何安装GreaseMonkey和脚本?

Greasemonkey的安装非常简单,和安装其它所有Firefox插件一样,到官方主页下载http://www.greasespot.net, 选择工具 (T)单。您应该看到四个菜单项:启用 (E)、管理用户脚本 (U)…、新建 用户脚本 (N)…和用户脚本命令 (C)。 只要管理用户脚本 (U)…可以使用,那么就装好了。装用户脚本也很简单,点击要安装的脚本链 接,会弹出一个标题为“Greasemonkey 安装过程”的对话框,其中显示了将要安装的用户脚本名称,简介以及作用与排除的页面列表。确定安装即可。
GreaseMonkey脚本推荐

下面就推荐一些比较受欢迎的Greasemonkey脚本。
1. Gmail的Greasemonkey脚本

Google Account Multi-Login

可以将Gmail右上角的Logout变成选择多个Gmail帐号切换按钮,适合多个Gmail帐号使用者。

Right Click Menu in Gmail

在你的Gmail中增加右键功能,右键包括“inbox”, “compose new”, “sent messages”, “contacts”等。

Folders4Gmail

用类似文件夹的形式来管理你的Lables。

Gmail Super Clean

美化Gmail界面。

Gmail HTML Signatures

为Gmail增加 html签 名,也可以使用我之前介绍的WiseStamp。

Gmail Filter Assistant

Fliter助手,增加一个Filter管理模块,是你能够方便的创建filter。

Gmail Addons

增加各种功能到Gmail,包括Calendar等。

Gmail + Reader Integrator

喜欢 Gmail 和 Google Reader 的你怎么可以错过这个在 Gmail 里面看 Google Reader 的 addon ?

Gmail Spam-count Hide

隐藏 Gmail 中垃圾邮件的计数。就是传说中眼不见为净的境界。
2. Google日历的Greasemonkey脚本

Google Calendar Header and Navigation Switcher

在 Google 日历的左侧和顶端显示小三角,点击它们可以隐藏 / 显示左侧栏和顶部空间,最大化主区域的面积,折叠状态可记忆。

Google Calendar Wheel Viewer

在月视图、自定义视图中用鼠标滚轮翻屏,这是 Google 日历自身没有提供的。

Google Calendar Display Current Time Line

在日视图、周视图、自定义视图中显示一条当前时间的红线,适合日程多的大忙人使用。
3. Google Reader的Greasemonkey脚本

Google Reader: Show Feed Favicons

在Google Reader中显示Feed Favicons。

Google Reader Subscribers Count

在右下角显示此feed有多少用户通过google reader订阅。

Google Reader Redux

安装后你的Google Reader里所订阅的RSS Feed将会作为一个新菜单项出现在Gmail左侧上方。

Google Reader Preview Enhanced

增加Feed网页预览功能。你可以在feed的List和expand视图进行预览。

Google Reader for wider screens

改变Google Reader现实宽度,以使宽屏电脑用户获得更好的用户体验。

Google reader full feed changer

现在有些Feed不是全文输出,怎么办呢,可以使用此脚本,实现获取feed全文。

Google Reader Minimalistic

获得最简洁的Google Reader界面。

Colorful List View

这个脚本的功能是给Google reader的list view根据不同的feed着色,效果是很华丽的。如果你的feed不多,用这个脚本可以清楚地分别出不同来源的文章,但如果你有几百个不同的feed, 这个脚本恐怕不适合你,太花了。

GoogleMonkeyR

超强的google搜索结果页增强脚本,功能包括多列显示搜索结果、移除右侧付费结果、给搜索结果编号、自动载入翻页结果等等。必装。
4. Google搜索的Greasemonkey脚本

Google Thumbnails

在搜索结果前增加网页的缩略图。

GoogleTagCloudMaker

利用搜索结果显示出一个Tag Cloud,让你更方便找到相关的内容。

Google 100

让Google每页显示100个搜索结果

Google Air Skin

可拥有多个Google应用服务的皮肤。

AutoPagerize (Pagination)

自动翻页脚本。

Google Ad Remover

从Google搜索结果中去除任何广告。

Google Account Multi-Login

多个Google账号登录。没什么需要解释的,如果有好几个Google账号的话,这个脚本很方便。

Google Shortcuts

也是针对Google搜索的一个脚本,安装后,在Google主页输入i:搜索内容 可以直接调用google图片搜索,输入w:搜索内容 则是调用wikpedia, y: 自然是youtube了。

Google Search Sidebar for FF3

为 Google 搜索结果页面加入一个右侧边栏,其中包括来自 Wikipedia、YouTube 和 Flickr 的搜索结果。只要 Google 一次,就能得到这许多结果,相当方便。

Multi-Column Results

将 Google 搜索结果分为多栏,使用 Alt + 1/2/3 组合键可在一栏、二栏、三栏切换,适合宽屏用户。

Google Time Search

提供选项,让你可以搜索指定时间范围内的网页(如过去 24 小时)。

Twitter Search on Google Search Pages

twitter 已经成为最为实时的信息中心,这个 GreaseMonkey 脚本能将 Twitter 搜索结果结成到 Google 中。

Fixed Topbar

提供一个悬浮的导航条,包括到新闻搜索、图像搜索和翻页的连接,可以节省你不少时间。

Delicious Search Results on Google

将 Delicious 的搜索结果集成至 Google。
5. 通用的浏览器辅助增强Greasemonkey脚本

GoogleTagCloudMaker

自动在搜索结果的右边生成标签云(tagcloud,覆盖了原来的赞助商广告),鼠标停留在某个标签上,就会把含有此标签的搜索结果显示在最前面。 可能我说的不是很清楚,原文也说的不是很清楚。安装一下,你就知道有多好用了。Gfan 必备!支持中文标签云哦。

Disable Text Ads

自动移除 VibrantMedia(IntelliTXT), Kontera 和 Linkworth
的内文文字广告。

RSS+Atom Feed Subscribe Button Generator

当你发现一个优秀的新博客时,你还在满屏幕找 RSS 订阅按钮吗?安装这个 addon 之后,你只需在左上角点击自动生成的订阅按钮。(感觉不是很实用,如果有高手会修改这个脚本的话,建议为这个脚本添加更强的功能:订阅到抓虾之类的按 钮。)

Textarea Backup

文本框备份。你每按下十个按键、每十秒、文本框失去焦点(就是一闪一闪的竖线状光标在文本框中消失的时候),该 addon 会自动备份一次。当文本成功提交到服务器时,保存的文字会自动删除。会自动还原的哦。

LookItUp

选中网页文字,按下” w “,右边会出现 Wikipedia 中该词的页面。原文说可以自定义,对高手来说可能比较简单。

Linkify ting

自动把一个 URL 地址变成可以点击的链接。

Google MP3

自动调用 Google MP3 Player 播放任意网页中的 MP3 ,关于 Google MP3 Player 是这样的,Gmail 会自动调用 Google MP3 Player 来播放附件中的 MP3 文件,既然 Gmail 能用这个播放器,我们当然也能拿来用了。

简 繁转换

用于对网页进行简繁体转换阅读。
6. 视频下载的Greasemonkey脚本

Apple Trailer Download

让你可以非常方便地从 movie trailers from apple.com 下载任意大小的视频。用法在你要下载的大小上右键,选择“链接另存为”。

Download Video

让你轻轻松松得到 YouTube, Google Video, Myspace, Metacafe, Break.com, Putfile, Dailymotion 和 Sevenload 里面的视频的真实地址。只要点击页面顶部黄色的 Get download link(s) to video(s) 就行。
7. Web 2.0网站增强的Greasemonkey脚本

del.icio.us Prettifier

是不是觉得 del.icio.us 的界面很没特色(很难看)?快安装上吧。

IMDB enlarge actor pictures on hover

放大 IMDB (电影资料库,这里我链接的是其中文版)中演员的照片。

AdSlicer for MySpace

移除 MySpace 中的广告和空白。

YouTube Googler

让 YouTube 的界面看起来想 Google Videos ,看来是某狂热 Gfan 的杰作。

Facebook Auto-Colorizer

facebook 颜色主题一个。

Digg – Add Mirror

在 digg it 按钮下添加这样几个按钮:在 DuggMirror , Coral Cache, Google Cache 和 Archive.org 中查看该 digg 。当该 digg 的源链接过期,你还是可以轻松地浏览该 digg 的详细内容。也可以当成代理来使用。

Last.fm Artist Fan Rank

last.fm 是一个 Web 2.0 音乐分享社区。我安装该 addon 之后,去了 Last.fm 一趟,不知道它到底是用来干嘛的。-_-|||(我已经修改了该 addon 的作用网页范围。)
8. 豆瓣相关Greasemonkey脚本

Reply buttons for new Douban

给每个帖子添加回复按钮和引用按钮,适用于豆瓣的评论,小组,日记,站务论坛,活动论坛,书影音论坛等。 点击回复按钮自动在下方的输入框中添加 @<用户ID>, 点击引用按钮则自动在下方的输入框中引用全文, 并会自动将输入焦点移至输入框,方便你在豆瓣的讨论。

Friends Toolbar for Douban

在豆瓣的”友邻广播”页面,增加一个浮动的联络用工具条。

Douban Sliding Navbar

悬停式的豆瓣二级导航栏,实现了2007.11.16豆瓣改版风波中部分用户主张的悬停式二级导航栏。

相要查找更多GreaseMonkey脚本,你可以到这个网站: http://userscripts.org/