OpenGL
ryfdizuo
腾讯专家开发工程师(T12/T4-1) Live Long And Prosper.
展开
-
3D坐标系变换
3D坐标系变换~原创 2011-03-30 08:38:00 · 14241 阅读 · 0 评论 -
纹理模拟球体漫反射
先看下面的效果图: 没有灯光,没有设置材质属性,没有绘制球体,更加没有设置球体的漫反射系数。。。其实是将一个特殊的纹理映射到一个圆上的结果。纹理生成函数,类似棋盘函数,所以只需将红皮书上棋盘函数稍作修改: int fakeSphere(int i, int j){ float s = (float)i / checkImageWidth; float t =原创 2009-11-24 18:28:00 · 2303 阅读 · 0 评论 -
OpenGL多视口
多视口 通过设置viewport 参数 将场景渲染到屏幕的指定帧缓存区域中。局部清空帧缓冲区:通过glScissor函数——裁剪测试,实现帧缓存区的局部清写。整体清空帧缓冲区会清掉其他视口绘制的结果,通过局部清空帧缓冲区避免纹理绘制中边界处的瑕疵现象。投影方式和模型视图变换跟满屏绘制没区别。具体文章见:http://blog.csdn.net/tulun/article/details/5转载 2013-01-15 13:22:56 · 2864 阅读 · 0 评论 -
OpenGL离线渲染和缓冲区对象
理论OpenGLl离线渲染就是通过OpenGL将绘制结果渲染到显存中的一张图片上,通过gl接口函数可以从显存读取到内存中。基于OpenGL的离线渲染机制,可以快速实现一个渲染器:输入:图像,点,线。。。输出:图像实现方案从一般到特殊:1. 不支持FBO主要介绍PC上,移动设备如果不支持FBO要实现离线渲染那就实在没辙了。glDrawBuffer(GL_BACK);原创 2012-12-22 15:42:44 · 15238 阅读 · 1 评论 -
GPU加速技术揭秘
1.浏览器硬件加速1.1 底层依赖于fbo技术 FBO全称frame buffer object,与系统默认帧缓冲区类似,fbo也有三个缓冲区:color,stencil,depth。fbo最精髓支持在于通过可以将opengl绘制到指定一块缓冲区上,可以是texture object,可以是render buffer object。常常采用texture作为fbo的颜色缓冲区,后续原创 2013-02-06 09:52:34 · 4559 阅读 · 0 评论 -
android上opengl性能分析工具
最新版 android adt 中包含了opengles trace 选项。高通提供了一个adreno gpu上的性能分析工具,可以直接分析android / PC上opengles应用程序的性能。1. opengles trace1.1 版本要求1)Android adt : adt-bundle-windows-x86-201302192)Android NDK : and原创 2013-03-01 15:58:21 · 9643 阅读 · 1 评论 -
OpenGL纹理UV动画
关闭混合的效果:参考1. OpenGL经典教程:Nate Robin可视化教程2. CodeSampler: http://www.codesampler.com/oglsrc.htm原创 2013-07-08 15:34:31 · 5822 阅读 · 0 评论 -
最近遇到的一个Java多线程问题
1. 问题描述我的code出了一个多线程问题,错误如下:被同事指出问题出在多线程访问数据上,问题具体如下:项目中线程主要有两个:android自带的UIThread,GLSurfaceView中的GLThread负责渲染场景中所有的图形元素,两个线程同时访问对象内的数据。代码原型如下:class GLLinesGroupOverlay extends GLLinesOv原创 2013-08-03 10:54:54 · 2029 阅读 · 0 评论 -
opengles 2D渲染性能
2D中最基本的是渲染一个图片,OpenGL接口中想到的有以下几种方式:1. glDrawPixels直接将图像数据写到颜色缓冲区中,不够灵活,而且移动设备端不支持。2. draw_texture_quadopengles1.0标准支持,1)将图像数据上传到OpenGL服务器显存,创建纹理对象;2)将顶点数据上传到OpenGL服务器显存,然后走OpenGL固定流水线最终显示到原创 2013-01-06 17:58:14 · 3341 阅读 · 0 评论 -
OpenGL的友好性调试
OpenGL调试一直很痛苦,不仅初学者,即便多年的老手有时也被一些 隐晦的状态改变搞的莫名其妙。关于友好性调试,想到的两点:1. 通过glGetXXX函数 获取opengl的状态参数,输出到控制台 。 可以参考这段code:http://my.csdn.net/my/code/detail/318282. 调试时将glut显示模式改成单缓冲模式GLUT_SINGLE,通过glFlush原创 2012-12-15 11:02:26 · 2134 阅读 · 0 评论 -
【Visualization Library】一个基于OpenGL和C++的轻型图形库
Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on the industry standard OpenGL 2.1, designed to develop portable applications for the Windows, Lin原创 2009-09-29 14:12:00 · 3634 阅读 · 0 评论 -
OpenGL下的alpha融合
alpha混合理论见前一篇博客:http://blog.csdn.net/dizuo/archive/2009/12/18/5035371.aspxalpha融合必须对物体设置不同的z值,可以通过glVertex3*绘制指定不同z值;或者通过glVertex2*绘制,调用glTranslate3f/d设置不同的z值。opengl绘制二维图形,进行alpha融合时候,如果所有二维图形具有相同原创 2011-04-14 09:59:00 · 2715 阅读 · 3 评论 -
基于OpenGL的角色动画实现
我的本科毕设做的是一个BVH文件解析,角色关节也是一个多叉树,层次变换树。孩子节点依赖于结点的变换。上图中的角色以躯干Torso为根节点,脖子和头属于一个子树;左右手臂、左右腿分别属于四个子树,所以上图是一个五叉层次变换树。尤其强调的是手臂支持三个维度的运动,所以需要需要增加x,y,z的三层虚节点。右手臂的子树为:Torso/RShoulderX / RShoulderY/RShoulderZ原创 2012-03-19 12:57:23 · 8456 阅读 · 7 评论 -
OpenGL下实现图片满屏显示
实现图片满屏显示,最常用的用途是把一张图片作为显示窗体的背景图片。我这里有总两种方法: 一、 正交模式显示背景图片关闭深度测试正交投影设置四边形的尺寸为窗口四个角,将图片贴到Quad上切换到透视模式下开启深度测试显示三维场景绘制背景图片时必须关闭深度测试,否则会导致后面渲染的3d场景不能显示。 在绘制3d场景时开启深度测试是为了保证3D模型绘制的正确性,主要指彼此的遮挡原创 2012-05-23 22:02:57 · 17216 阅读 · 5 评论 -
OpenGL渲染字体的批处理操作
一、问题描述在OpenGL中,绘制字体通过纹理贴图的方式。一个场景中有200个单词,按照正常做法:一个单词生成一个贴图,指定Quad四个顶点纹理坐标,最后把数据传给OpenGL,进行绘制。OpenGL顶点数组是客户端-服务器模式:客户端是当前应用程序;服务器端包含三部分:链接到应用程序中的OpenGL库、在操作系统内核中的OpenGL驱动、以及GPU。绘制200个单词中,每个单词都需要原创 2012-08-11 15:27:37 · 3320 阅读 · 0 评论 -
基于csg的布尔运算
速度有点慢~第一行: cube cone cube Union cone第二行:cubeSubtractconecube Intersection cone代码下载: add - 2011-6-18 RYFhttp://download.csdn.net/source/3375594本文是内存中对模型进原创 2010-06-20 15:02:00 · 4989 阅读 · 2 评论 -
四元数实现插值动画
/* * Quaternion slerp animation * dizuo */#include #include #include #include #include #include #include #include float rotVerticesBuf[] = {0,0,0, 1,0,0};gtl::Quatf begQuat( gtl::Vec3f(原创 2012-11-25 17:21:05 · 2349 阅读 · 0 评论 -
opengl渲染流程
物体坐标系:物体位于坐标系原点位置。视点坐标系:视点位于坐标系原点位置。 模型视图变换物体坐标系 ------------- 视点坐标系最近不怎么看ogl了,但是总有一些东西是需要记忆的:add 2012/12/11 - dizuo / peteryfren裁剪在投影时进行,透视投影的裁剪区域为棱锥,正交投影的裁剪区域为长方体。标准坐标原创 2009-12-09 14:41:00 · 4224 阅读 · 2 评论 -
Array of Structures vs Structure of Arrays
1. 概念Array of structures 结果是一个array,类型是一个structure! Structureof Arrays结果是一个struture,类型是arrays!2. 原理的原文连接:http://hectorgon.blogspot.com/2006/08/array-of-structures-vs-structure-of.html翻译 2013-08-14 10:54:48 · 2921 阅读 · 0 评论 -
FBO中如何使用模板缓冲区
FBO常用框架一般需求只有color buffer,depth buffer,前者一般用纹理,后者一般用rbo。标准程序如下:// 创建 // frame buffer object glGenFramebuffers(1, &fboId); glBindFramebuffer(GL_FRAMEBUFFER, fboId); // color buffer with textur原创 2013-03-21 15:15:00 · 5714 阅读 · 1 评论 -
GLSurfaceView中GL相关资源销毁问题
GLSurfaceView中GL相关资源销毁问题原创 2015-02-13 16:20:32 · 8959 阅读 · 0 评论 -
cocos2dx下离屏渲染遇到的问题
opengl状态错乱导致的渲染问题,定位、总结、反思!原创 2015-04-08 10:32:34 · 3502 阅读 · 0 评论 -
关于glReadPixels的两点心得
opengles 开发珠玑~_~原创 2015-05-02 22:11:48 · 16973 阅读 · 2 评论 -
OpenGL开发资料黄页
opengl学习网站导航,原创 2015-08-25 14:36:04 · 1438 阅读 · 0 评论 -
纹理的各向异性采样
各向异性采样转载 2015-08-07 09:30:21 · 21135 阅读 · 0 评论 -
GLSL的调试方法
vs通过CPU模拟,fs将值输出到屏幕上。原创 2016-04-27 10:20:08 · 13416 阅读 · 0 评论 -
计算几何之多边形
多边形顶点顺序判断,多边形面积计算opengl 模板测试渲染任意多边形原创 2016-10-22 16:36:42 · 3064 阅读 · 0 评论 -
APP移植到小米Pad上的Crash分析
小米PAD上的APP的移植错误。OpenGL状态不严谨引发的经典错误。!。原创 2014-06-17 15:02:46 · 2493 阅读 · 0 评论 -
【踩雷】android 中UI线程内调用gl指令的结果
android系统设置开启GPU硬件加速,UI界面中控件的贴图随机性丢失,变成一系列的黑块。问题定位,分析。。。原创 2014-01-27 17:09:19 · 3416 阅读 · 3 评论 -
android上gl纹理资源路径的问题
问题描述:glsurfaceView中通过纹理绘制图形,纹理长宽为2的幂次,128*64,资源放在res/drawable文件夹下面。发现在hdpi手机上图形为白色。初步判断纹理丢失。为什么纹理丢失呢?我直接把问题归咎于奇葩的android,感觉hdpi手机优先搜索drawable-hdpi文件夹,并没有搜索drawable目录。通过实际盘查,资源上传gl前将图片保存到磁盘,发现图片确原创 2013-09-18 20:07:50 · 1811 阅读 · 0 评论 -
二维中的OBB相交测试
OBB方向性!求交核心思想:向量点积的投影意义,unitX为(1,0)单位向量, A.dot( unitX ) 为A点的x值,表示在x轴上的投影。。flipcode上面求交有问题,投影结果坐标系不统一。原创 2013-10-23 21:05:53 · 4177 阅读 · 1 评论 -
一次内存和显存的优化
图片磁盘中的格式,bmp没有压缩,png,tga,jpeg等都是压缩格式!内存中,显存中都是ARGB_8888,GL_RGBA格式。优化Tips:避免使用小纹理,采用256*256,将尽可能多标注打包到一个大纹理中,减小纹理空间浪费,成倍减小draw call!原创 2013-11-02 23:12:21 · 3031 阅读 · 0 评论 -
OpenGL Matrix Library
opengl mathematics matrix 矩阵库原创 2011-05-14 15:32:00 · 4498 阅读 · 0 评论 -
OpenGL错误总结
const char* getGLErrorInfo(int errorId){ switch (errorId) { case GL_INVALID_ENUM: return ("GL Invalid Enum\n"); case GL_INVALID_VALUE: return ("GL Invalid Value\n"); case GL_INVALID_OPERATIO原创 2012-05-23 10:34:36 · 14891 阅读 · 0 评论 -
OpenGL错误和性能Tips
opengl开发遇到的一些坑,也算是经验之谈吧!原创 2013-11-28 18:53:17 · 3060 阅读 · 0 评论 -
基于模板测试实现半透明多边形运算
通过OpenGL的帧缓存实现多边形常见操作:联合、求交、做差。原创 2013-03-28 19:11:58 · 3120 阅读 · 0 评论 -
glScissor的使用
glScissoropengl裁剪测试例子程序原创 2011-05-03 21:02:00 · 7532 阅读 · 0 评论 -
opengl实现任意两点间画圆柱体
1,问题提出两点间画线简单:glBegin(GL_LINES); //注意是LINES不是LINE,这个错误一定要注意。 glVertexf(x1, y1, z1); glVertexf(x2, y2, z2);glEnd();画线函数不会影响opengl的矩阵堆栈。 但是很多时候线条效果会比较差,比如我要做一个骨骼动画,关节点间的骨头用线条太难看,即使使用glLin原创 2011-06-16 13:21:00 · 12298 阅读 · 4 评论 -
任意多边形顶点排序和凸包计算
1,理论凸包计算算法导论上有讲,关键步骤是根据对顶点进行逆时针排序。凸包顶点只是多边形顶点子集。图-1如图1中,判断三个点构成顺时针还是逆时针方向。使用向量点积即可:向量A向量BA.dot(B) 是一个实数,大于0,则逆时针,小于0则顺时针。2,效果图:图 - 2图 - 3图2是随机生成了三十个点。图3是黄色线条是排序以后顺序链接,外面淡蓝色原创 2011-06-10 14:56:00 · 11522 阅读 · 1 评论 -
OpenGL和Glut实现的选取程序
opengl中的选择基本思路:1,获得视口信息,指定返回点击记录的数组。glGetIntegerv (GL_VIEWPORT, viewport);glSelectBuffer (BUFSIZE, selectBuf); 2,glRenderMode(GL_SELECT)进入选择模式,3,对名字堆栈进行初始化glInitNames();glPushName(-1);原创 2009-03-21 15:36:00 · 2834 阅读 · 0 评论