Thursday, September 25, 2008

GLFW

时间过的真快,这个博客又可以访问了,真是太棒了,发一个跨平台GL框架的helloworld.
希望大家能重新把这个站点建立起来,用了那么多平台后发现还是这个好。

#include  <GL/gl.h>
#include  <GL/glu.h>
#include  <GL/glext.h>
#include  <GL/glfw.h>
int main(int argc,char** argv){    
int running = GL_TRUE;    glfwInit();   if(!glfwOpenWindow(300,300,0,0,0,0,0,0,GLFW_WINDOW)){
glfwTerminate();
return 0;                                                
}    
while(running){
glClear(GL_COLOR_BUFFER_BIT); 
glfwSwapBuffers(); 
running=!glfwGetKey(GLFW_KEY_ESC&&
   glfwGetWindowParam(GLFW_OPENED);    
}    
glfwTerminate();    
return 0;
}


Wednesday, May 30, 2007

理想主义者的站点

交了一个新朋友,发现又一个理想主义者的论坛。
一群为了blender在中国的发展而奔波的年轻人。很值得支持他们一下。
大家有空多去逛逛。
CG世界风光无限哦^_^
http://bbs.blendercn.org

Tuesday, April 24, 2007

资源分享

一篇很好的文章
《高质量c++编程》
http://oss.org.cn/man/develop/c&c++/c/c.htm

Thursday, April 19, 2007

资源分享

突然间好无方向感
在eclipse那烂烂的cdt下呆了一周半,沉迷在改彭玉的代码中,装库装的麻木了,一个粗糙的半成品框架丢在那里,突然间方向感丢失了,在兴趣与现实之间游荡,不知道是因为我是个超现实主义者,还是周期性的低迷,总之,方向感丢了,一个晚上的荒芜足够心痛了,就这样吧,继续为性格付出代价吧,忍者无敌.

以下所有这些我都是刚用的,我是个彻底的菜鸟,给出来希望可以给大家一点方便:

/--------------------------------------/
SDL即Simple DirectMedia Layer,类似DirectX,是完整的游戏、多媒体开发包,但不同的是它跨越几乎所有的平台,有各种语言的接口,多种语言的文档,而这一切都是广大志愿者完成的。目前扩展部分还没有正式的文档,以下为核心部分文档的向导部分。
相关网址:
http://tech.itdb.cn/n/200608/10/n20060810_52768.shtml
http://www.libsdl.org/intro.cn/toc.html
http://www.libsdl.org/faq.php?action=listentries&category=2
http://blog.csdn.net/snaill/archive/2005/02/05/282000.aspx
http://popul.jqcq.com/computer/gdev/1154046338.shtml
http://www.daniweb.com/techtalkforums/post337926.html

推荐指数:*****
评价:不要以为上面的文档都是正确的,bug到处有,自己慢慢调吧,不要怕遇到问题,学习的模式就是
问题->搜索答案->解决?下一个问题:搜索|自己解决->下一个问题


/--------------------------------------/
eclipse 自然不用我多说了,不懂的话自己google
eclipse SDK 下载:
http://www.eclipse.org/downloads/
eclipse上可以装一大堆插件,不嫌繁琐的话慢慢试试吧,晕死你:
http://hw.cnblogs.com/articles/251148.html
eclipse 下安装cdt+mingw的文档找啊睿要吧,他那边好东西多的是,别浪费了,当然只有你很好的使用才会得到更好的后续资源.
恩,添加库的include 和lib类似于vc6,大同小异,想想IDE的目的就知道了,恩,要不然你可以想想不要vc或者eclipse的话你在txt文档里写的代码如何编译,生成目标文件,链接,生成可执行文件,流程弄清楚了自然就明白了.


/--------------------------------------/
opencv 图像处理库
官方文档上十分详细的介绍和例子
资源:
http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5


/--------------------------------------/
audiere音频库:
http://audiere.sourceforge.net/
还没开始用,所以没有中文文档资源,你用到的话发到这边吧


/--------------------------------------/
c++标准stl库学习:
呵呵,这个当然是Stephen Prata的c plusplus最详细了,需要整本书的程序电子版本的话找a睿吧
或者发我emial:mhsy2003@gmail.com


/--------------------------------------/

最后,去读懂彭玉的基于sdl+opengl编写的游戏代码吧,完了之后就不用再说c++的哪个东西没用过了
要看原著,好像在218.193.53.74上有专门放置在某个旮旯角落.openglguide那书也是很简单明了的.


...
依旧的追寻,
未知的梦想.
...

Monday, April 16, 2007

【李胜睿说……】如何访问课程blog

如何访问课程blog
1.www.blogger.com可以访问,并没有被禁掉。所以我们依然可以正常的编辑文章。
2.www.blogspot.com被大陆禁掉了,所以我们无法直接访问blog的页面。

因此采用如下的域名访问blog:
pkblogs.com/XXXXXX
其中XXXXXX.blogspot.com 为你要访问的blog。

例如: pkblogs.com/xmugradeone
就可以访问本页面,呵呵,欢迎大家继续支持本课程。

OpenGL学习笔记2007-4-16

在8.1,也就是第一个粒子系统

glBegin(GL_TRIANGLE_STRIP); //
绘制粒子

glTexCoord2f(1.0f, 1.0f); glVertex3f(x + 0.5f, y + 0.5f, z);

glTexCoord2d(0.0f, 1.0f); glVertex3f(x - 0.5f, y + 0.5f,
z);

glTexCoord2d(1.0f, 0.0f); glVertex3f(x + 0.5f, y - 0.5f,
z);

glTexCoord2d(0.0f, 0.0f); glVertex3f(x - 0.5f, y - 0.5f,
z);

glEnd();


就是画个正方形,然后绑定纹理?
用三角形去凑不容易理解。
直接


glBegin(GL_QUADS); //
绘制粒子
glTexCoord2d(0.0f, 1.0f); glVertex3f(x - 0.5f, y +
0.5f, z);

glTexCoord2f(1.0f, 1.0f); glVertex3f(x + 0.5f, y + 0.5f,
z);

glTexCoord2d(1.0f, 0.0f); glVertex3f(x + 0.5f, y - 0.5f,
z);

glTexCoord2d( 0.0f, 0.0f); glVertex3f(x - 0.5f, y - 0.5f, z);

glEnd();

直接画正方形即可



另外关于8.2有一点要注意
在VC6下是不能编译通过的。
在8.2中
void Font01Init()函数里面有这么一段代码,
for (int i = 0 ; i 《 30; ++i) dropSpeed[i] =
float(rand()%50 + 20); // 通道的下降速度
for (int i=0;
i《FONT_COUNT; ++i)
{
for (int j=0; j《FONT_COUNT; ++j)
{

我很确定,作者不是在Visual C++ 6中写出来的。
因为这个是标准的C语法
而VC用的不是标准C编译器,而是带有M$风格的。MS编译器会认为这样的代码,i重定义了。可是标准C规定,在for里面定义的变量,只有在该循环里面才有效。
换句话,这段代码只有在标准的C++编译器里面才能编译通过
如果要在M$的VC里面编译通过,必须放弃第二个i的定义声明,直接使用。

Monday, March 19, 2007

[转载]分形数学的沟通

分形数学的沟通

2007-3-10FranPeking / WudaokouSculpting in Time / Speakeasy Café

人的思维 / 个体或单位的意识
确定存在一个规律法则 / 可用迭代函数系统表述
自变量取一合适值 / 函数值则存在分形思维中的自相似信息

一直的认为以家庭为单位的存在和发展
与一个村庄和城镇 / 一个城市和区域 / 一个民族和国家的存在发展有着必然的相似性
比如怎样的发展和富裕
比如怎样的与邻里和周围的社会保持或战争或和谐的关系
有时候觉得国家之间的外交就像小时候玩的过家家 / Hehe
而从这些都是自然的存在来讲 / 确实应该具有相似性
因为确认的是 / 自然中的所有东西具有严格的规律
也可以表述为 / 自然并不是混沌中随意的自然
比如自然数e的存在 / 比如黄金分割点 / 是规律性的东东
另一类的 / 很多形状的排列
比如含羞草的树叶 / 比如玫瑰花的层层含苞怒放
比如大陆的海岸线 / 比如划破夜空的闪电 / 比如层层分支的人体血管
比如分子光谱分布 / 比如动植物的DNA
太多的 / 也可以说所有自然的东东 / 都符合其一定的规律

一直的思考 / 也提及过数次 / 当然没有专门的论证和表述
当下一直做的一件事情
那就是用数学的语言来表述诸如我想到的这些东东
也就是我所确定的一个课题 / 文理在数字世界的沟通 / 简称文理的沟通

近段时间看数学 / 发现开始提及的那些规律性东东
有一种非常艺术和美丽的数学语言来表述
那就是三十多年前刚刚确立的 / 分形数学

数学上定义的分形数学
说它的研究对象是自然界和非线性系统中没有特征长度的几何形体
这里分形理论的数学基础是分形几何
广义一些 / 那就是自然界中
有许多东东都在某种程度上存在自相似特性
即它们中的一个部分和它的整体或者其它部分都十分形似
这个自相似性是分形的灵魂
它使得分形的任何一个片段都包含了整个分形的信息

可惜啊偶没早存在那怕五十年 / Haha
不过的 / 偶所关注的 / 不是分形几何 / 以及分形的物体
而是隶属整个自然的分形思维 / 比如这段文字开始提到的家庭与国家等的关系
另外的 / 当然还包括个体人的思维
和一个群体 / 或者不同时期不同地域群体之间的关系

用数学的语言来表述分形的存在大概是 / 分形之间的关系是一种递归和迭代 / 可以用迭代函数系统来表述
也就是说 / 这里存在一个函数 / 这个函数 / 表述的就是其中的规律和法则
用思维的语言来讲
人的思维 / 个体或单位的意识
确定存在一个规律法则 / 可用迭代函数系统表述
自变量取一合适值 / 函数值则存在分形思维中的自相似信息

分形的世界是美丽的 / 艺术的 / 和谐的
比如一个国家如果掌握了国家结构Essential分形单位
建立和谐国家的愿望肯定能实现那么一个区域 / 一个城市 / 一个村庄 / 一个家庭也是
只是这是一件非常不易得的东东
而再加上规律法则结构必然相应的有反规律法则结构存在
所以的目前阶段 / 和谐还是人们的美好愿望
如果能找到国家结构Essential分形单位 / 那就好喽 / Hehe

http://frankriel.spaces.live.com/blog/cns!99D98DF6F3835E6E!178.entry?_c=BlogPart

Wednesday, March 14, 2007

OpenGL学习笔记

314,白色情人节。黄昏,放学路上,广播女孩用甜美的声音主持着白色情人节专题。Kiss the rain的曲子回响耳边,我却不由自主得咧了咧嘴。我怎么能感伤呢?犯贱,绝对不行!我是光棍,但是光棍也应该是幸福的!

今天初步掌握了光源的设置

步骤如下:

一、初始化变量(当窗口建立时=>全局):

  • 定义光源位置
  • 定义环境光的颜色
  • 定义漫反射光的颜色
  • 定义镜面反射光的颜色


二、把光源变量和光源控制联系起来(你定义了光源变量,但是计算机怎么知道呢?所以必须关联起来,这个不知道能不能叫做把变量实体化??)(当窗口重新加载时=>Initialize() ):

  • 创建光源位置
  • 创建环境光
  • 创建漫反射光
  • 创建镜面反射光


三、开启光源(重绘图像时 => WinMain => DrawSceneGL):

  1. 开启光源(就像拉开电源总开关)
  2. 开启指定光源(然后开启某个家电的电源)


具体实现如下(照搬阿睿的例子)

定义全局变量

//
定义位置在屏幕右上方的光源

GLfloat light_position0[] = {2.0f, 2.0f, 2.0f, 1.0f}; // 设置光源的位置
GLfloat light_ambient0[] = {1.0f, 1.0f, 1.0f, 1.0f}; //
定义环境光的颜色
GLfloat light_diffuse0[] = {1.0f, 0.1f, 0.1f, 1.0f}; //
定义漫反射光的颜色
GLfloat light_specular0[] = {1.0f, 0.3f, 0.3f, 1.0f};
//
定义镜面反射光的颜色



这样是定义了四个GLfloat型的数组,理解不?

Initialize()函数中关联这四个变量

glLightfv(GL_LIGHT0, GL_POSITION, light_position0); // 创建光源位置
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient0); //
创建环境光
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse0); //
创建漫反射光
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular0); //
创建镜面反射光



最后在DrawSceneGL()函数中实现光源

glEnable(GL_LIGHTING); //启用光源
glEnable(GL_LIGHT0); //启用光源
LIGHT0




最后:
遗憾的是,目前这个方法实现光源有一个缺点,那就是光照的alpha值是100%的,也就是说给照到的物体颜色会变成和光源一样,这样就太假了。我们需要的是透明的自然光。事情总是有办法的,我们一起摸索。
加油吧。

还有,因为我比较菜,心得难免会有一些错误或者不足,请大家发现了不要吝啬,告诉我哦。

另外,关于坐标系旋转的体会。

坐标系三个参数是x, y, z
但是不是说是说物体按x, y, z方向转动,而是物体绕着x, y, z轴转动。

也就是说如果你在x这里加参数,那么其实物体是竖着,如自行车方向着你开来或者驶去的方向转动的。