OpenGL 编程低级错误及常见问题解答 低级错误 1.没有 glDisable(GL_TEXTURE_2D),导致基本几何作图全部失败。 2.镜头位置没调好,导致所有物体不可见. 3.物体位置数据错误,导致物体大大超出镜头显示范围. 4.纹理没有 GL_CLAMP 导致边界拼接出现缝线. 5.纹理没有 GL_REPEAT 导致使用超出 1.0 纹理坐标技巧失败,显示单色插值. 6.没有 glEnable(GL_TEXTURE_2D)导致全白纹理. 7.glEnable(GL_TEXTURE_2D)后没有使用纹理顶点导致如 glColor 效果的纯单色. 8. 应 该 在 作 图 循 环 设 置 灯 光 位 置 , 因 为 The?position?is?transformed?by?the?modelview?matrix?when?glLight?is?called?(just?as?if?it?w ere?a?point),?and?it?is?stored?in?eye?coordinates.? 9.灯光位置应该是 4 个 float,3 个 float 程序不出错,但结果完全扭曲。 10.打开灯光却没设置顶点法线,到头一场空。 11.Window Class 没有 CS_OWNDC,导致 glDrawPixels 失败,如在子窗口 View 上进行象素写 入操作. 12.没有设置 PIXELFORMATDESCRIPTOR 的 cAlphaBits=8,导致 glReadPixels 读取 alpha 通 道数据失败,统统为 0. 13.手动实现的多层纹理闪烁,出现线带,没有使用 glPolygonOffset. 14.glDrawPixels 格式 GL_RGB 或 GL_BGR_EXT 的数据时崩溃,且数据有效,没有使用 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);导致图像行默认 4 字节对齐,导致 OpenGL 数据 读取越界崩溃.相应的要为 glReadPixels 设置 glPixelStorei(GL_PACK_ALIGNMENT, 1); 15.glReadPixel 读取被覆盖的 OpenGL 窗口部分的图像数据时,读出数据混乱无效,OpenGL Pixel Ownership 检测导致,标准如此.使用 PixelBuffer,或强制置前 OpenGL 窗口解决. 16.glReadPixels 读取总是从 FrameBuffer 的左下往右上读取,毫无参数可设置改变方向,真是笨 到家了. 载入图像一般还是从上到下比较容易理解. 17.使用 glDepthMask(GL_FALSE)后不打开,glClear 无法清除深度缓冲,导致现象:场景起始静 止正常,一旦移动出现不规则的透明无渲染区域,深度缓存逻辑混乱. 18.gluPerspective(45.0f, (GLfloat)cxPixels/(GLfloat)cyPixels, 0.1f, 2000.0f);这里的 0.1f 将导致 物体和地面的相交处闪烁,原因待查,至少取 1.0f. 19.没有显示定义 shiniess 或 shiniess 为 0,在 shader 中对 gl_FrontMaterial.shininess 使用 pow 计算,结果不可测,黑色条带闪烁,quite not understand.
常见错误 问:OpenGL 中的 Stencil Buffer 是什么东西? 答:模板缓存(Stencil Buffer) 。它可以保持屏幕上某些部位的图形不变,而其它部位仍然 可以进行图形绘制。 比方说, 可以通过模板缓存来绘制透过汽车挡风玻璃观看车外景物的画 面。首先,将挡风玻璃的形状存贮到模板缓存中去,然后再绘制整个场景。这样,模板缓存 挡住了通过挡风玻璃看不见的任何东西,而车内的仪表及其它物品只需绘制一次。因此,随 着汽车的移动,只有
外面的场景在不断地更改。 问:glos.h 是什么文件?
答:判别操作系统的头文件。 问:OpenGL 的左右缓冲区如何使用?即:gldrawbuffer()中的,GL_RIGHT、GL_LEFT 参数 的使用。我想做一副立体图, (两副图像交替在屏幕上不停刷新) 图形加速卡选用的是华 。 硕的 3800 带立体镜的那一种。 答:这需要看驱动程序是否支持 OpenGL 的左右缓冲区。据我们所知,华硕显卡不带这样的 驱动。而象 Diamond Fire GL 系列、ELSA 的 Glorial 系列等显卡支持这种功能。在购买显卡 时,应认清驱动程序的支持性能。 问:请问用在 OpenGL 编程中有哪些方法可以得到两个曲面的交线? 答:OpenGL 用于绘制图形,没有交线计算,需要自行开发算法。 问:关于 OpenGL 中雾的问题。 答: 首任蚁胨狄幌翺 penGL 中雾的定义, OpenGL 中雾的模式有三种: GL_LINEAR, GL_EXP, GL_EXP2。 GL_LINEA 为例: 以 雾的混合因子 f(0