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

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

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

更多0分享到:设计模式

相关主题推荐: opengl 三维函数

相关帖子推荐:post

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

回复次数:12

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

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

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

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

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

一、最好是消除重叠部分,经过改变纹理坐标;
二、由于视角的变化,形成直线和面的上下和先后的关系发生变化形成的,直线和面应该在空间上分离开来。

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(天使)的方法,得到的是半透明效果.在半透明效果中,纹理重叠的地方仍然出现闪烁.

相关文章
相关标签/搜索