今天做线消隐碰到的问题……
来源:互联网 发布:淘宝网logo矢量图 编辑:程序博客网 时间:2024/05/16 06:18
给定物体的三维模型,想实现线消隐,但又不愿做看起来很复杂的BSP空间分割,于是想让OpenGL帮我完成我的目的。先检测出可以观察的明显边(就是很简单的检测,两个面夹角大于多少度或者小于多少度,那么这两个面共有的那条边就是可观察到的边,只有一个面拥有的,也是可观察边,面法线与视线几乎垂直的面上的边,……等等)。把物体模型按照背景色画(这样的目的是为了得到正确的深度缓存),然后用OpenGL把这些检测的边给画出来,这样我们可以看到线消隐后的效果。但是仅仅这样我们不知道具体是哪些边是可见的哪些是被消隐的。于是想按照这些检测出来的边的标号给边赋颜色,然后到颜色缓存中读出相应的颜色,由于颜色与边对应了,所以存在哪种颜色,那么对应的边是可见的(未被消隐的)。
问题出在我从帧缓存中读颜色的时候竟然没有读到预想的颜色!画边的时候如此赋颜色:
glColor3b(r,g,b);
读出来的时候这样读:
glReadPixels( 0, 0, m_Width, m_Height, GL_RGB, GL_UNSIGNED_BYTE, TempColorBuffer3C );
可是结果总是不对。。。
后来才发现,GL_UNSIGNED_BYTE读出来的颜色总是(2*r+1, 2*g+1, 2*b+1)。很奇怪。
然后把GL_UNSIGNED_BYTE改成GL_BYTE后结果就正确了。 glColor3b(r,g,b)的原型是glColor3b(GLbyte red, GLbyte green, GLbyte blue);
其中GLbyte在gl.h中是这样定义的 typedef signed char GLbyte;
按照GLbyte(即signed char)设置颜色,然后按照GL_UNSIGNED_BYTE读,如果说颜色参数为负或者大于127那么读出来为0可以理解的话,那么参数为正的时候读出来的颜色是2倍+1该怎么解释呢?师兄说是为了把颜色从-127~127映射到0~255,因为GLbyte是有符号的。可是这样的话设置负数颜色也没意义,颜色范围是到了0~255,但是却只有奇数了。
问题一,怎么实现2倍+1的,不会是if else吧?
问题二,为什么这样实现呢。。
- 今天做线消隐碰到的问题……
- 今天碰到的问题
- 今天碰到的问题
- 今天碰到虚拟机的问题,发现问题……解决!!!
- 今天碰到的数据库问题
- 今天碰到的有关签名的问题
- 今天关于jboss碰到的问题
- 今天碰到的两个android小问题
- mysql 今天碰到的两个问题。
- 记录一下今天碰到的一个问题
- 今天碰到的几个python 小问题
- 今天碰到IE的一个问题, 两个IFRAME的问题
- 今天碰到的事情.....
- 今天碰到的疑难杂症
- 今天碰到的一个复选框的问题
- 今天碰到的两个非常实用的问题
- 今天 使用MyEclipse 开发JSP碰到的问题!!!
- 今天碰到一个listener的问题,记录一下
- JavaScript获取客户端URL
- ASP.NET 环境下的页面验证控件
- [Solver] UVa 11732 strcmp() 的思路
- VB笔记
- _tmain问题
- 今天做线消隐碰到的问题……
- J2ME程序开发全方位基础讲解
- 画电路板中遇到的问题
- 永远的VC6。。。
- HTML相对路径(Relative Path)和绝对路径(Absolute Path)
- 随想
- vim中文显示问题解决方法
- A War of Scheme Selection
- Redhat linux 中VMware Tools 的安装