| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9708 人关注过本帖
标题:glGetFloatv,帮助解析,谢谢
只看楼主 加入收藏
sunstudent
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2007-10-14
结帖率:100%
收藏
 问题点数:0 回复次数:13 
glGetFloatv,帮助解析,谢谢
glAlphaFunc(GL_GREATER, 0);

float mat[16];// get the modelview matrix
  glGetFloatv(GL_MODELVIEW_MATRIX, mat);
我用这两个函数的时候到底用什么参数什么的(GL_MODELVIEW_MATRIX.............)就是搞不明白

我查了很多地地方,还是不明白这两个函数意思,请帮助看看,详细解析一下这两个函数的作用和怎 么样使用,谢谢!
搜索更多相关主题的帖子: glGetFloatv mat 解析 函数 MATRIX 
2007-12-01 10:41
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
glAlphaFunc(GL_GREATER,0);
此函数是对片断做ALPHA 测试. 通过测试就可被帧缓冲区接受.
参数GL_GREATER为大于设定数值, 0为这个设定数值,也就是说片断的ALPHA要大于0,不然不会被帧缓冲区接受.  (帧缓冲区就是最后用于渲染的缓冲区)
glGetFloatV(GL_MODELVIEW_MATRIX, mat);
这函数可能向系统查询一个状态变量的当前值.
GL_MODELVIEW_MATRIX为所查询的当前状态,也就是模型视图矩阵.
mat为查询所得值,也就是那个模型视图矩阵.

=×&D o I p R e E n C g T l X&×=
2007-12-01 20:53
sunstudent
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2007-10-14
收藏
得分:0 
看了你的解释,我想了,还是适懂非懂?
2007-12-03 16:46
sunstudent
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2007-10-14
收藏
得分:0 
void baiscobj::ShowTree(float x,float z,float h,float s,int cactus)//树
{ glEnable(GL_BLEND);
 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable(GL_ALPHA_TEST);
  glAlphaFunc(GL_GREATER, 0);
  float mat[16];// get the modelview matrix
  glGetFloatv(GL_MODELVIEW_MATRIX, mat);
  vector3_t X(mat[0], mat[4], mat[8]);// get the right and up vectors
  vector3_t Z(mat[1], mat[5], mat[9]);
  glBindTexture(GL_TEXTURE_2D, g_cactus[cactus]);
 vector3_t pos(x,0.0,-z);
  pos.y = GetHeight(x, -z) + h + s;
  glBegin(GL_QUADS);
     glTexCoord2f(0.0,0.0);glVertex3fv((pos+(X+Z)*-h).v);//左下点
     glTexCoord2f(1.0,0.0);glVertex3fv((pos+(X-Z)* h).v);//右下点
     glTexCoord2f(1.0,1.0);glVertex3fv((pos+(X+Z)* h).v);//右上点
     glTexCoord2f(0.0,1.0);glVertex3fv((pos+(Z-X)* h).v);//左上点
  glEnd();
  glDisable(GL_ALPHA);
  glDisable(GL_BLEND);
}这是整个函数
2007-12-03 16:56
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
void baiscobj::ShowTree(float x,float z,float h,float s,int cactus)//树
{ glEnable(GL_BLEND); // 开启混合
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable(GL_ALPHA_TEST); // 开启ALPHA测试
  glAlphaFunc(GL_GREATER, 0); // 片断的ALPHA大于0时,才会被绘制
  float mat[16];// get the modelview matrix
  glGetFloatv(GL_MODELVIEW_MATRIX, mat); // 得到这个,主要是想用公告板技术来使树总是面向正面
  vector3_t X(mat[0], mat[4], mat[8]);// get the right and up vectors
  vector3_t Z(mat[1], mat[5], mat[9]);
  glBindTexture(GL_TEXTURE_2D, g_cactus[cactus]);
vector3_t pos(x,0.0,-z);
  pos.y = GetHeight(x, -z) + h + s;
  glBegin(GL_QUADS);
         glTexCoord2f(0.0,0.0);glVertex3fv((pos+(X+Z)*-h).v);//左下点
         glTexCoord2f(1.0,0.0);glVertex3fv((pos+(X-Z)* h).v);//右下点
         glTexCoord2f(1.0,1.0);glVertex3fv((pos+(X+Z)* h).v);//右上点
         glTexCoord2f(0.0,1.0);glVertex3fv((pos+(Z-X)* h).v);//左上点
  glEnd();
  glDisable(GL_ALPHA);
  glDisable(GL_BLEND);
}这是整个函数

=×&D o I p R e E n C g T l X&×=
2007-12-03 20:40
sunstudent
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2007-10-14
收藏
得分:0 
glGetFloatv(GL_MODELVIEW_MATRIX, mat); // 得到这个,主要是想用公告板技术来使树总是面向正面
我就是想知这个函数返回时放在mat中的16个数到底是什么样子的
为什么对它里面的数进行加加减减就可以使树总是面向正面,谢谢
2007-12-04 10:32
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
mat  ->[ 0    1    2    3   ]
             [ 4    5    6    7   ]
             [ 8    9    10 11 ]
             [ 12  13  14 15 ]
0, 4, 8 表示视图矩阵的X方向
1, 5, 9 表示视图矩阵的Y方向(上面的Z只是相对屏幕来说的,也就是三维的Y)
vector3_t X(mat[0], mat[4], mat[8]);
vector3_t Z(mat[1], mat[5], mat[9]);
就为X与Z方向(Z为三维的Y).
因为树平面是用X, Z来生成的,所以它就直接受到模型视图矩阵的控制啦.

=×&D o I p R e E n C g T l X&×=
2007-12-04 13:44
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
ALPHA测试.它是片断操作的其中的一个操作.用来对片断的ALPHA做比较测试.
什么是片断? 这个不说它.你只有简单理解为是对树纹理做ALPHA测试就可.
glAlphaFunc(GL_GREATER, 0);
意思是ALPHA值要大于0, 不然就挡掉这个颜色值(其实是Texels).
就是把树背景为黑色的挡掉.为什么要挡黑色呢?因为黑色的ALPHA值为0.

=×&D o I p R e E n C g T l X&×=
2007-12-04 14:06
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
还要说清楚的是, 不是黑色颜色 , ALPHA就是0.
只是你那个程序是这样而已哦.

=×&D o I p R e E n C g T l X&×=
2007-12-04 14:08
sunstudent
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2007-10-14
收藏
得分:0 
glVertex3fv((pos+(X+Z)*-h).v,无非就是mat[0]+mat[1]这样子在加上一个X什么的,我不明白,为什么这样子就可以控制树永远的正面朝向观察者
mat  ->[ 0    1    2    3   ]
             [ 4    5    6    7   ]
             [ 8    9    10 11 ]
             [ 12  13  14 15 ]
书上不是说[x,y,z,1]*
           [ 0    1    2    3   ]
             [ 4    5    6    7   ]
             [ 8    9    10 11 ]
             [ 12  13  14 15 ](一个变化矩阵)
=[x1,y1,z1,1]
x1,y1,z1就是新的坐标,这样子的啊,怎么会那样的了,谢谢,不明白了
2007-12-04 16:28
快速回复:glGetFloatv,帮助解析,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016798 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved