`
爱迪生的小屋
  • 浏览: 35616 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

OpenGL开发笔记

阅读更多



 

1. glViewport,glOrgho/gluPerspective,在投影矩阵GL_PROJECTION中使用,gluLookAt在视图矩阵GL_MODELVIEW中使用

2. gluPerspective的近景near必需大于0,不能等于0

3. 绘制组件的时候以(0,0,0)为基点,调用子函数的时候用glPushMatrix()和glPopMatrix()包装后再平移旋转,这样的方法使用起来比较方便

3. 影响显示效果的功能:颜色Color-最基本的属性;混合Blend-通过alpha通道,支持透明和半透明;帖图Texture-如果是32位需要透明效果的贴图需要开启Blend;光照Light-与Material属性配合使用,开启后颜色属性失效,最终颜色由光照颜色和材质反射颜色共同决定

4. 如果开启Blend并且要使用透明效果,即使已开启了深度检测,仍然要手工遵循由深到浅的顺序,否则透明效果会不正确

5. glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE):GL_MODULATE代表两个颜色相乘,用于贴图和光照混合,如果是GL_REPLACE则完全不受光照影响

6. 如果两个面重合,OpenGL不同的实现会有不同的处理,很有可能两个面按随机顺序绘制,这种情况能免则免

7. 曲面的法线是对顶点进行设置的,系统会自动根据顶点法线计算中间点法线达到平滑过渡的效果,所以顶点法线的计算因以实体来计算,如圆球的法线为球心到顶点的连线,而不是三个顶点的向量的外积,如果用外积,反而会另画出来的球不平滑。

8. 绘制长短轴为a,b的椭圆。顶点公式,x轴对应a,y轴对应b,顶点到圆心距离r,角度为q,r = a*b / sqrt((b*cos(q)^2 + (a * sin(q))^2), x = r*cos(q), y = r*sin(q);法线公式,法线角度n = rctg(- b / a * x / sqrt(a^2 - x^2)) + PI / 2,如果y < 0则n = -n,如果x = a,则n = 0,如果x = -a,则n = PI

8. glTranslate平移后法线不变,glRotate旋转后法线跟着旋转,两者都能保证法线正确,但是glScale缩放后法线不变,在x,y,z同比缩放时法线正确,如果不同比缩放,法线会错误。

9. windows窗口/全屏切换,如果把hWnd销毁/重建,材质信息会丢失,需要重新读取。可以采取SetWindowLong(hWnd, GWL_STYLE, WS_POPUP或者WS_OVERLAPPEDWINDOW)和SetWindowPos动态调整窗口大小和边框,通过无框窗口来模拟全屏效果。

  • 大小: 438.6 KB
0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics