Opengl编程低级错误 (转载)

本文列举并解析了OpenGL编程中常见的多种问题及其解决办法,包括纹理映射、灯光设置、深度测试等方面的问题,并提供了实用的调试建议。
  • 没有glDisable(GL_TEXTURE_2D),导致基本几何作图全部失败。
  • 镜头位置没调好,导致所有物体不可见.
  • 物体位置数据错误,导致物体大大超出镜头显示范围.
  • 纹理没有GL_CLAMP导致边界拼接出现缝线.
  • 纹理没有GL_REPEAT导致使用超出1.0纹理坐标技巧失败,显示单色插值.
  • 没有glEnable(GL_TEXTURE_2D)导致全白纹理.
  • glEnable(GL_TEXTURE_2D)后没有使用纹理顶点导致如glColor效果的纯单色.
  • 应该在作图循环设置灯光位置,因为The position is transformed by the modelview matrix when glLight is called (just as if it were a point), and it is stored in eye coordinates.
  • 灯光位置应该是4个float,3个float程序不出错,但结果完全扭曲。
  • 打开灯光却没设置顶点法线,到头一场空。
  • Window Class 没有CS_OWNDC,导致glDrawPixels失败,如在子窗口View上进行象素写入操作.
  • 没有设置PIXELFORMATDESCRIPTOR的cAlphaBits,导致glReadPixels读取alpha通道数据失败,统统为0.
  • 手动实现的多层纹理闪烁,出现线带,没有使用glPolygonOffset.
  • glDrawPixels格式GL_RGBGL_BGR_EXT的数据时崩溃,且数据有效,没有使用glPixelStorei(GLUNPACKALIGNMENT, 1);导致图像行默认4字节对齐,导致OpenGL数据读取越界崩溃.相应的要为glReadPixels设置glPixelStorei(GL_PACK_ALIGNMENT, 1);
  • glReadPixel读取被覆盖的OpenGL窗口部分的图像数据时,读出数据混乱无效,OpenGL Pixel Ownership检测导致,标准如此.使用PixelBuffer,或强制置前OpenGL窗口解决.
  • glReadPixels读取总是从FrameBuffer的左下往右上读取,毫无参数可设置改变方向,真是笨到家了. 载入图像一般还是从上到下比较容易理解.
  • 使用glDepthMask(GL_FALSE)后不打开,glClear无法清除深度缓冲,导致现象:场景起始静止正常,一旦移动出现不规则的透明无渲染区域,深度缓存逻辑混乱.
  • gluPerspective(45.0f, (GLfloat)cxPixels/(GLfloat)cyPixels, 0.1f, 2000.0f);这里的0.1f将导致物体和地面的相交处闪烁,原因待查,至少取1.0f.
  • 没有显示定义shiniess或shiniess为0,在shader中对gl_FrontMaterial.shininess使用pow计算,结果不可测,黑色条带闪烁,quite not understand.
  • 纹理出现白色点状闪烁,没有Mipmap过滤导致!
  • 任何初装的Windows系统,多好的机器,一开始对OpenGL只支持1.1,连多重纹理都没有,需要警惕这种机器,装着DX9,微软真恶心,::SwapBuffer直接崩溃,故需要检测显卡至少支持了1.2标准,否则要求更新显卡驱动程序.
  • 3D和2D,透视和正射模式混合时,2D模式的渲染覆盖不了3D的渲染,原因深度测试失败,
    1. 2D下渲染时所取点深度确实大于3D点的深度.
    2. glOrtho参数错误,导致2D渲染所得深度值错误,如zNear被取负数!
    3. 使用glDisable(GL_DEPTH_TEST);
  • glDrawElements崩溃, a.glXXXPointer设置的缓冲错误,顶点索引越界引用顶点数组. b.当前glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);硬件缓冲和内存缓冲混淆.
  • 画面上出现方块形背景色,原因,渲染一次后,在glClear时glDepthMask没有打开,glClear没能clear掉depth,但clear掉颜色缓冲,depth值持续到下一次render,导致depth test没通过,颜色画不上.
  • 树叶挡在物体前,树叶间隙或蛀洞本应该透明却呈现背景色.原因,没有启用Alpha过滤.一般不可能用几何形状勾勒出叶子的形状,只用较大的多边形包围叶子,用Alpha过滤掉空隙.此时不启用Alpha过滤,出现Alpha为0的三角面也被渲染,但得到的是背景图像,并且由于Alpha为0的三角面离视点近,后面的物体渲染无法通过深度测试补上透明的空隙区域.
  • atlgdi.h里有#pragma comment(lib, "opengl32.lib"),导致无源无故链接opengl32.lib失败.
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值