研究了几天都无解的openGL混合问题
问题描述:目前以一个一个点绘制的方式画了一个三维模型,现要实现透明度可调的透视效果,而且视点可绕三维模型任意旋转。
实现方式一:利用一个滑动控件获取每个点的alpha值,利用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)方式实现混合。
存在的问题:正面看效果实现了,但转到背面看就不对了。
问题分析:该方式受绘制顺序的影响.以视点为参照点,由远到近绘制可以实现透视效果.但当视点转到背面后,每个点到视点的距离变了,但绘制函数还是同一个.即绘制顺序没有变,是先画离视点近的点.这样看起来是直接看到了最底下.
实现二:glBlendFunc(GL_SRC_ALPHA,GL_ONE)方式绘制.
存在的问题:该方式实际是直接将每个点的RGB值乘ALPHA后相加,这样就不会有顺序问题.但最后的颜色又不对了,变成了白色.
补充:点为灰度点,即R=G=B.但不是每个点的灰度都一样.
求高人指点其他的实现方式,本人是OPENGL处学者,折腾了几天,实在没什么好方法了.