OpenGL三维显示中纹理闪烁和颜色跳变的问题

2014/06/18 21:41
阅读数 2.7K

问题如下;:
1、现在有两块区域纹理贴图,这两块区域有部分是重叠在一起的,这个重叠在一起的纹理会闪烁,各位高手有没有解决的办法?

2、程序中采用glColor3f函数设置了直线和平面的颜色。但是发现进行视角变换时,这些设置的颜色会发生跳变,比如正确的颜色是蓝色,但是进行视角变换后,这些直线和平面的颜色发生了变化。暂时没有找出原因,不知道是不是跟纹理的设置有关系?
以前有个帖子“在opengl中用纹理贴图时,是否对场景中其他部分的颜色会有影响”
http://community.csdn.net/Expert/TopicView3.asp?id=4565550
对这个问题也有所阐述。

更多0分享到:

相关主题推荐: opengl 三维

相关帖子推荐:

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

回复次数:12

#1 得分:0回复于: 2006-07-05 10:17:06

我想第二个问题多半是参数设置的问题。不知道有没有人碰到过类似的问题,解决思路是什么?找了几天也没有找到原因,郁闷。

社区问答第5期:秦小波 设计模式之禅

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#2 得分:0回复于: 2006-07-05 10:37:36

1、最好是消除重叠部分,通过改变纹理坐标;
2、因为视角的变化,造成直线和面的上下和前后的关系发生变化造成的,直线和面应该在空间上分离开来。

CSDN投诉事项说明

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#3 得分:0回复于: 2006-07-05 15:39:02

在程序中,如果要消除重叠部分,需要进行大量的数据预处理工作。正是基于此,才寻求一种能不能不消除重叠,能够解决闪烁的方案。

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#4 得分:0回复于: 2006-07-05 15:54:34

第二个问题我描述上存在问题,举例说明如下:
glPushMatrix();

glDisable(GL_BLEND );
glColor3f(0.3f,0.3f,0.5f);

glPolygonMode(GL_FRONT,GL_FILL);

glBegin(GL_QUADS);
          glVertex3f(v1.m_x,v1.m_y,v1.m_z);
          glVertex3f(v2.m_x,v2.m_y,v2.m_z);
          glVertex3f(v3.m_x,v3.m_y,v3.m_z);
          glVertex3f(v4.m_x,v4.m_y,v4.m_z);

glEnd();  

glPopMatrix();
我希望达到这种效果:通过上述代码绘制的平面永远保持一种颜色(0.3f,0.3f,0.5f),而不管矩阵如何的变换。但是现在发现的问题是,用户经过一些操作后,该平面的颜色经常没有规律的跳变,没有保持预期的颜色。

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#5 得分:0回复于: 2006-07-05 15:56:42

期待syy64(太平洋)兄和各位达人能给出一点意见,帮我指出一条明路。

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#6 得分:0回复于: 2006-07-05 16:06:08

glPolygonMode(GL_FRONT,GL_FILL);
去掉这句试试。

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#7 得分:0回复于: 2006-07-05 17:14:33

去掉glPolygonMode(GL_FRONT,GL_FILL),颜色不发生跳变了,但是颜色不是指定的颜色。
比如
glPushMatrix();

glDisable(GL_BLEND );
glColor3f(1.0f,0f,0f); //希望是红色

glBegin(GL_QUADS);
glVertex3f(v1.m_x,v1.m_y,v1.m_z);
glVertex3f(v2.m_x,v2.m_y,v2.m_z);
glVertex3f(v3.m_x,v3.m_y,v3.m_z);
glVertex3f(v4.m_x,v4.m_y,v4.m_z);

glEnd(); 

但是glColor3f没有起作用,仍是蓝色,这可能是什么原因了?

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#8 得分:0回复于: 2006-07-05 17:29:53

按我的理解,在绘制一个几何图元,例如直线或者平面,只要使用glColor3f函数设置了颜色,当前颜色应该就是glColor3f函数设置的颜色。我在绘制每个几何图元,都采用了glColor3f函数进行颜色设置,设置的颜色都不相同,但是现在颜色发现都是一样的,没有按照预期的颜色进行分配。
不知道原因?

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#9 得分:0回复于: 2006-07-05 18:19:48

第一个问题,最好把纹理坐标设置成同一个点只有一个纹理覆盖,不然渲染时可能出现问题

第二个问题
你是不是开启光照了?
材质的漫反射色和环境色设置是蓝色?如果开启光照而且没有使用函数glColorMaterial,没开启GL_COLOR_MATERIAL,glColor设置的颜色将不会影响片元的颜色;
还有光源的设置是怎样的,光源是不是随视点变化的,如果是,在不同的视点光照影响可能不一样,使用平滑着色后偏远颜色也不一样?

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#10 得分:0回复于: 2006-07-05 22:36:12

第二个问题已经解决了,是纹理的影响,在绘制没有纹理的图元,应该 glDisable(GL_TEXTURE_2D);
绘制结束时,在打开。
第一个问题,我知道最好纹理不用重复。但是重复的情况没有办法解决,能不能解决或者减轻纹理闪烁的问题了?

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#11 得分:0回复于: 2006-07-06 16:04:12


glEnable(GL_BLEND);
glBlendFunc(GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR);

绘制纹理

glDisable(GL_BLEND);

你用这个试试,应该可以让你的纹理重合的部分融合

对我有用[0] 丢个板砖[0] 引用 | 举报 管理

#12 得分:0回复于: 2006-07-11 13:04:55

楼上corinna(天使)的方法,获得的是半透明效果.在半透明效果中,纹理重叠的地方仍然出现闪烁.



展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部