1.登录
应该有个cookie选项,不然用户每次都得重新登录

2.用户名都是英文,再加上没有头像,使得用户辨识度低

3.个人工具箱里面,比如对签名档进行修改之后,会跳转到签名档修改成功提示页面,这个页面除了提示什么也没有,没有修改成功的签名档预览。

4.关于发帖
似乎用了extjs框架,和整体风格不符,界面太简陋,附件上传居然还要跳到其它页面进行操作,帖子正文里没有表情等增加互动感的元素。

5.发帖之后没有编辑功能,发完之后提供的选项太少,只有是否跳到发表的文章,我想更多的人回去看其它的帖而不是看自己刚才发的贴

6.没有全版搜索功能

总的来说现在的88web版完全没有利用web的多元性


 
 
由于有个vpn,所以要用VPN的地址,具体原因其实我不是很清楚,网络学的太差。。。。
恩,结果本地用VPN地址都不能访问,更别提远程了。
于是网上搜了下,可能是80端口被占用了,一怒之下把防火墙全关了!
结果还是访问不能,又在网上查了下,apache服务器的配置可能要改
httpd.conf里面  把ServerName改成了VPN地址   把监听端口也改了Listen 8000
还有
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>


然后听学长的把conf/extra里的httpd-vhosts.conf
NameVirtualHost *:8000

<VirtualHost VPN地址:8000>
    ServerAdmin webmaster@dummy-host.hpp.com
    DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.hpp.com"
    ServerName dummy-host.hpp.com
    ServerAlias www.dummy-host.hpp.com
    ErrorLog "logs/dummy-host.hpp.com-error.log"
    CustomLog "logs/dummy-host.hpp.com-access.log" common
</VirtualHost>

改成了如上所示
然后重启了下Apache,发现OK了 哈哈哈



后来发现可能是我断过VPN,重新连得时候VPN地址已经变了,所以以上步骤maybe有些不是必须的。。。。。囧里个囧

 
 
function getPart(){

var xmlhttp;
try{
xmlhttp=new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
try{
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){
try{
xmlhttp=new XMLHttpRequest();
}catch(e){}
}
}
var d=new Date();
var ms=d.getMilliseconds();

var url="getpart.php?id="+ms;

xmlhttp.open("get",url,true);
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4)
{
  if(xmlhttp.status==200)
  {
     if(xmlhttp.responseText!=""){
  document.getElementById("partdiv").innerHTML=unescape(xmlhttp.responseText);
  }
  }
  else{
  document.getElementById("partdiv").innerHTML="数据载入出错";
  }
 }
}
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
xmlhttp.send(null);
 
 
}

重点在于在IE里,对于同一个URL地址,IE短期内是不会再去访问服务器,而是读取缓存内的内容。问题终于大白,虽然设置了轮询,但是URL一直都是同一个,IE默认的不再访问服务器了。这样事情就好办了,给URL再加个时间戳之类的参数,果然可以可以正常轮询了。


 
 
.content{
margin:0 auto;
width:800px;
height:500px;
}



这个是绝对有效滴  留着备用!
 
 
前面已经提到过,载入一幅纹理所需要的时间是比较多的。因此应该尽量减少载入纹理的次数。如果只有一幅纹理,则应该在第一次绘制前就载入它,以后就不需要再次载入了。这点与glDrawPixels函数很不相同。每次使用glDrawPixels函数,都需要把像素数据重新载入一次,因此用glDrawPixels函数来反复绘制图象的效率是较低的(如果只绘制一次,则不会有此问题),使用纹理来反复绘制图象是可取的做法。
但是,在每次绘制时要使用两幅或更多幅的纹理时,这个办法就行不通了。你可能会编写下面的代码:

glTexImage2D( /* ... */ ); // 载入第一幅纹理
// 
使用第一幅纹理
glTexImage2D( /* ... */ ); // 
载入第二幅纹理
// 
使用第二幅纹理
// 
当纹理的数量增加时,这段代码会变得更加复杂。

在绘制动画时,由于每秒钟需要将画面绘制数十次,因此如果使用上面的代码,就会反复载入纹理,这对计算机是非常大的负担,以目前的个人计算机配置来说,根本就无法让动画能够流畅的运行。因此,需要有一种机制,能够在不同的纹理之间进行快速的切换。纹理对象正是这样一种机制。我们可以把每一幅纹理(包括纹理的像素数据、纹理大小等信息,也包括了前面所讲的纹理参数)放到一个纹理对象中,通过创建多个纹理对象来达到同时保存多幅纹理的目的。这样一来,在第一次使用纹理前,把所有的纹理都载入,然后在绘制时只需要指明究竟使用哪一个纹理对象就可以了。使用纹理对象和使用显示列表有相似之处:使用一个正整数来作为纹理对象的编号。在使用前,可以调用glGenTextures来分配纹理对象。该函数有两种比较常见的用法:

GLuint texture_ID;
glGenTextures(1, &texture_ID); // 
分配一个纹理对象的编号


或者:

GLuint texture_ID_list[5];
glGenTextures(5, texture_ID_list); // 
分配5个纹理对象的编号


零是一个特殊的纹理对象编号,表示默认的纹理对象,在分配正确的情况下,glGenTextures不会分配这个编号。与glGenTextures对应的是glDeleteTextures,用于销毁一个纹理对象。在分配了纹理对象编号后,使用glBindTexture函数来指定当前所使用的纹理对象。然后就可以使用glTexImage*系列函数来指定纹理像素、使用glTexParameter*系列函数来指定纹理参数、使用glTexCoord*系列函数来指定纹理坐标了。如果不使用glBindTexture函数,那么glTexImage*glTexParameter*glTexCoord*系列函数默认在一个编号为0的纹理对象上进行操作。glBindTexture函数有两个参数,第一个参数是需要使用纹理的目标,因为我们现在只学习二维纹理,所以指定为GL_TEXTURE_2D,第二个参数是所使用的纹理的编号。使用多个纹理对象,就可以使OpenGL同时保存多个纹理。在使用时只需要调用glBindTexture函数,在不同纹理之间进行切换,而不需要反复载入纹理,因此动画的绘制速度会有非常明显的提升。典型的代码如下所示:

// 在程序开始时:分配好纹理编号,并载入纹理
glGenTextures( /* ... */ );
glBindTexture(GL_TEXTURE_2D, texture_ID_1);
// 
载入第一幅纹理
glBindTexture(GL_TEXTURE_2D, texture_ID_2);
// 
载入第二幅纹理

 

// 在绘制时,切换并使用纹理,不需要再进行载入
glBindTexture(GL_TEXTURE_2D, texture_ID_1); // 
指定第一幅纹理
// 
使用第一幅纹理
glBindTexture(GL_TEXTURE_2D, texture_ID_2); // 
指定第二幅纹理
// 
使用第二幅纹理

 
 
当我们绘制一个三角形时,只需要指定三个顶点的颜色。三角形中其它各点的颜色不需要我们指定,这些点的颜色是OpenGL自己通过计算得到的。在我们学习OpneGL光照时,法线向量、材质的指定,都是只需要在顶点处指定一下就可以了,其它地方的法线向量和材质都是OpenGL自己通过计算去获得。纹理的使用方法也与此类似。只要指定每一个顶点在纹理图象中所对应的像素位置,OpenGL就会自动计算顶点以外的其它点在纹理图象中所对应的像素位置。这听起来比较令人迷惑。我们可以这样类比一下:在绘制一条线段时,我们设置其中一个端点为红色,另一个端点为绿色,则OpenGL会自动计算线段中其它各像素的颜色,如果是使用glShadeMode(GL_SMOOTH);,则最终会形成一种渐变的效果(例如线段中点,就是红色和绿色的中间色)。类似的,在绘制一条线段时,我们设置其中一个端点使用纹理图象中最左下角的颜色作为它的颜色,另一个端点使用纹理图象中最右上角的颜色作为它的颜色,则OpenGL会自动在纹理图象中选择合适位置的颜色,填充到线段的各个像素(例如线段中点,可能就是选择纹理图象中央的那个像素的颜色)。我们在类比时,使用了纹理图象中最左下角的颜色这种说法。但这种说法在很多时候不够精确,我们需要一种精确的方式来表示我们究竟使用纹理中的哪个像素。纹理坐标也就是因为这样的要求而产生的。以二维纹理为例,规定纹理最左下角的坐标为(0, 0),最右上角的坐标为(1, 1),于是纹理中的每一个像素的位置都可以用两个浮点数来表示(三维纹理会用三个浮点数表示,一维纹理则只用一个即可)。使用glTexCoord*系列函数来指定纹理坐标。这些函数的用法与使用glVertex*系列函数来指定顶点坐标十分相似。例如:glTexCoord2f(0.0f, 0.0f);指定使用(0, 0)纹理坐标。通常,每个顶点使用不同的纹理,于是下面这样形式的代码是比较常见的。

glBegin( /* ... */ );
    glTexCoord2f( /* ... */ );  glVertex3f( /* ... */ );
    glTexCoord2f( /* ... */ );  glVertex3f( /* ... */ );
    /* ... */
glEnd();


当我们用一个坐标表示顶点在三维空间的位置时,可以使用glRotate*等函数来对坐标进行转换。纹理坐标也可以进行这种转换。只要使用glMatrixMode(GL_TEXTURE);,就可以切换到纹理矩阵(另外还有透视矩阵GL_PROJECTION和模型视图矩阵GL_MODELVIEW,详细情况在第五课有讲述),然后glRotate*glScale*glTranslate*等操作矩阵的函数就可以用来处理对纹理坐标进行转换的工作了。在简单应用中,可能不会对矩阵进行任何变换,这样考虑问题会比较简单。

 
 
    混合就是在绘制时,不是直接把新的颜色覆盖在原来旧的颜色上,而是将新的颜色与旧的颜色经过一定的运算,从而产生新的颜色。新的颜色称为源颜色,原来旧的颜色称为目标颜色。传统意义上的混合,是将源颜色乘以源因子,目标颜色乘以目标因子,然后相加。
  
源因子和目标因子是可以设置的。源因子和目标因子设置的不同直接导致混合结果的不同。将源颜色的alpha值作为源因子,用1.0减去源颜色alpha值作为目标因子,是一种常用的方式。这时候,源颜色的alpha值相当于不透明度的作用。利用这一特点可以绘制出一些半透明的物体。在进行混合时,绘制的顺序十分重要。因为在绘制时,正要绘制上去的是源颜色,原来存在的是目标颜色,因此先绘制的物体就成为目标颜色,后来绘制的则成为源颜色。绘制的顺序要考虑清楚,将目标颜色和设置的目标因子相对应,源颜色和设置的源因子相对应。
   
在进行三维混合时,不仅要考虑源因子和目标因子,还应该考虑深度缓冲区。必须先绘制所有不透明的物体,再绘制半透明的物体。在绘制半透明物体时前,还需要将深度缓冲区设置为只读形式,否则可能出现画面错误。

 
 
      估计是因为我页面include了子页面的原因,自适应问题始终无法解决!!!
      果然调界面是最最最最最麻烦的!!!!!!!!!!!!!!!!!!!!!
 
 
         纠结了两个多小时,考虑到实现的难度以及美观程度等因素,终于把UI初步定下来了,实在是太纠结了!
         主要是呈现当日的运程指数,其他的明日啊本周啊就算了,到时候建个表就得费好大力气。左边主界面,右边星座列表,以后可能会加一些星座描述,星座关系等等的。但是当日运程还是最重要的,这个是增加浏览量的关键,如果只是些静态页面的话,用户看一次就知道了,何必来第二次呢,so the point is to grasp the customer!
         功能搞成这个样子其实也可以了,最主要是用户交互好,UI美观。
        今天晚上把页面实现,用div+css,啊。。以前还真的很少用,anyway,加油!
 
 
           根据光的反射定律,由光的入射方向和入射点的法线就可以得到光的出射方向。因此,对于指定的物体,在指定了光源后,即可计算出光的反射方向,进而计算出光照效果的画面。在OpenGL中,法线的方向是用一个向量来表示。不幸的是,OpenGL并不会根据你所指定的多边形各个顶点来计算出这些多边形所构成的物体的表面的每个点的法线(这话听着有些迷糊),通常,为了实现光照效果,需要在代码中为每一个顶点指定其法线向量。指定法线向量的方式与指定颜色的方式有雷同之处。在指定颜色时,只需要指定每一个顶点的颜色,OpenGL就可以自行计算顶点之间的其它点的颜色。并且,颜色一旦被指定,除非再指定新的颜色,否则以后指定的所有顶点都将以这一向量作为自己的颜色。在指定法线向量时,只需要指定每一个顶点的法线向量,OpenGL会自行计算顶点之间的其它点的法线向量。并且,法线向量一旦被指定,除非再指定新的法线向量,否则以后指定的所有顶点都将以这一向量作为自己的法线向量。使用glColor*函数可以指定颜色,而使用glNormal*函数则可以指定法线向量。注意:使用glTranslate*函数或者glRotate*函数可以改变物体的外观,但法线向量并不会随之改变。然而,使用glScale*函数,对每一坐标轴进行不同程度的缩放,很有可能导致法线向量的不正确,虽然OpenGL提供了一些措施来修正这一问题,但由此也带来了各种开销。因此,在使用了法线向量的场合,应尽量避免使用glScale*函数。即使使用,也最好保证各坐标轴进行等比例缩放。

PS:OpenGL已看到第八课