
OpenGL
虚坏叔叔
「虚幻私塾」
展开
-
如何免费建立一个网站?
以我的个人经历来说,我是不太建议用免费的空间和域名来建立网店或网站。我之前也建立了一个免费网站,开端的时分觉得真的挺不错的。可是一段时间后,网站的内容多了,阅读量也多了,可是免费网站速度却慢的很。有一次,我那个免费网站来了五百多个阅读者,也不算多,但是访问十分慢,卡了大半个小时,最后连我自己也上不了自己的网站。我们总说:“免费的往往是最贵的”,许多人都没想到,用免费网站还有许多晦气之处...转载 2018-04-02 18:11:20 · 6889 阅读 · 2 评论 -
极路由最新刷机教程
前提条件极路由1s、2、3、4,新老版本都可以,固件版本要求9006~9018。但实际上9019以及最新的1.0.xxx也都支持,只不过必须使用ss插件直达页面去操作ss,ss功能完美,就是界面有点简陋。需要有路由器有root权限,极路由官方开放root权限的申请,极路由开通root权限教程。具体方法需要在电脑上使用xshell这个软件(putty更简单),登录到极路由,x原创 2016-10-15 07:19:01 · 37076 阅读 · 1 评论 -
《高效学习OpenGL》 之 反馈 glFeedbackBuffer(), glPassThrough()
建立一个用于保存反馈数据的缓冲区: glFeedbackBuffer (1024, GL_3D_COLOR, feedBuffer); void glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); //buffer是一个数组指针,指向包含反馈数据的数组。size是这个数组可以存储的值的最大数量 //原创 2014-03-06 17:00:06 · 2736 阅读 · 0 评论 -
《高效学习OpenGL》 之 选择 glSelectBuffer(),glRenderMode(),glInitNames(),glPushName()
指定用于返回点击选择数据的数组: #define BUFSIZE 512 GLuint selectBuf[BUFSIZE]; glSelectBuffer (BUFSIZE, selectBuf); void glSelectBuffer (GLsizei size, GLuint *buffer); //buffer参数是一个无符号整数类型的数组指针。它所指向的数组原创 2014-03-06 16:40:55 · 6159 阅读 · 0 评论 -
《高效学习OpenGL》 之 GLU的NURBS的接口 gluNewNurbsRenderer(),gluNurbsProperty(),gluNurbsSurface(),gluNurbsCal()
创建一个NURBS对象: GLUnurbs* gluNewNurbsRenderer (void); //创建一个NURBS对象nobj,并返回一个指向这个新对象的指针销毁NURBS对象:void gluDeleteNurbsRenderer(GLUnurbs *nobj);控制NURBS对象的属性: gluNurbsProperty(theNurb, GLU_S原创 2014-03-06 14:44:24 · 3243 阅读 · 0 评论 -
《高效学习OpenGL》 之 glMap1f(),glEvalCoord1f(),glMapGrid1d(),glEvalMesh1()
定义一维求值器: glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]); void glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); //target参数指定了控制原创 2014-03-06 11:51:45 · 8851 阅读 · 0 评论 -
《高效学习OpenGL》 之 二次方程图元 gluSphere(),gluCylinder(),gluDisk(),gluPartialDisk()
gluSphere(qobj, 0.75, 15, 10); void gluSphere (GLUquadric *qobj, GLdouble radius, GLint slices, GLint stacks); //绘制一个半径为radius的球体,圆心(0,0,0),经线slices,纬线stacks。 gluCylinder(qobj, 0.5, 0.3, 1.原创 2014-03-05 16:22:14 · 12855 阅读 · 0 评论 -
《高效学习OpenGL》 之 控制二次方程对象的属性 gluQuadricDrawStyle(),gluQuadricOrientation(),gluQuadricNormals(),gluQu()
控制绘图风格:gluQuadricDrawStyle(qobj, GLU_FILL);控制法线向量的方向:gluQuadricOrientation(GLUquadric *quadObject, GLenum orientation)指定合适生成法线向量:gluQuadricNormals(qobj, GLU_NONE);为二次方程表面生成纹理坐标:gluQuadri原创 2014-03-05 16:07:59 · 3886 阅读 · 0 评论 -
《高效学习OpenGL》 之 管理二次方程对象 gluNewQuadric(),gluDeleteQuadric(),gluQuadricCallback()
GLUquadric* gluNewQuadric (void); //创建一个新的二次方程对象,并返回一个指向他的指针 void gluDeleteQuadric (GLUquadric *state); //销毁二次方程对象,释放内存 void APIENTRY gluQuadricCallback( GLUquadric *qobj, GLenum which, void原创 2014-03-05 15:59:55 · 5632 阅读 · 0 评论 -
《高效学习OpenGL》 之 多边形分格化 gluNewTess(),gluTessCallback(),gluTessProperty(),gluTessBeginPolygon()
GLUtesselator* gluNewTess( void ); //创建一个新的分割化对象,并返回一个指向他的指针,如果创建失败,返回NULL void gluTessCallback(GLUtesselator *tess, GLenum which, void(CALLBACK *fn)()); //把回调函数fn与分格化对象tess相关联。回调函数的类型是由which决定的原创 2014-03-05 15:44:13 · 4244 阅读 · 0 评论 -
《高效学习OpenGL》 之 累积缓冲区 glAccum()
控制累计缓冲区: void glAccum (GLenum op, GLfloat value); //控制累积缓冲区,op参数选择操作,value是该操作的使用数量。 //可以使用的操作有:GL_ACCUM、GL_LOAD、GL_RETURN、GL_ADD和GL_MULT。运动模糊: glAccum(GL_MULT, 0~1); //第二个参数越小,运动速度原创 2014-03-04 20:25:18 · 2502 阅读 · 0 评论 -
《高效学习OpenGL》 之 深度测试 遮挡查询 glDepthFunc(), glGenQueries(), glBeginQuery(), glGetQueryObjectiv()
1.为深度测试设置比较函数: glDepthFunc(GLenum func); //func默认为GL_LESS2.遮挡查询生成一组未使用的查询ID: glGenQueries(GLsizei n, GLuint *ids); //返回n个当前未使用的ID,可用于表示遮挡对象的名称。这些名称是在ids数组中返回的。判断一个标识符当前是否被一个遮挡查询原创 2014-03-03 11:55:25 · 6002 阅读 · 0 评论 -
《高效学习OpenGL》 之 模板测试 glStencilFunc(), glStencilOp()
启用模板测试:glEnable(GL_STENCIL_TEST);设置模板测试所使用的比较函数(func),参考值(ref)和掩码(mask): glStencilFunc (GL_EQUAL, 0x1, 0x1); void glStencilFunc (GLenum func, GLint ref, GLuint mask); //默认情况下,func是原创 2014-03-03 11:11:31 · 6661 阅读 · 0 评论 -
《高效学习OpenGL》 之 裁剪测试 alpha测试 glScissor(),glAlphaFunc()
裁剪测试: void glScissor (GLint x, GLint y, GLsizei width, GLsizei height); //设置裁剪矩形的位置和大小alpha测试:判断alpha测试是否可用:glIsEnabled(GL_ALPHA_TEST);设置用于alpha测试的参考值和比较函数: void glAlphaFunc (GLenum f原创 2014-03-03 10:29:18 · 3637 阅读 · 0 评论 -
《高效学习OpenGL》 之 缓冲区及其用途 glDrawBuffer(),glReadBuffer(),glColorMask(),glClearBuffer()
查询特定的画面可以使用的基于像素的缓冲区存储信息:调用glGetIntegerv()函数1.颜色缓冲区可以在glGetBooleanv()函数中使用GL_STEREO或GL_DOUBLEBUFFER参数来判断自己的系统是否支持立体画面(即提供左右缓冲区)或双缓冲(即提供了前后缓冲区)。为了判断系统支持多少辅助缓冲区,可以用GL_AUX_BUFFERS为参数调用glGetInte原创 2014-03-03 10:10:15 · 14572 阅读 · 1 评论 -
《高效学习OpenGL》 之 深度纹理
1.从光源的角度对场景进行渲染。场景看上去是什么样子无关紧要,只需要深度值,然后创建阴影图,也就是捕捉深度缓冲区的值,并把他们存储在一个纹理图像(即阴影图)中2.生成纹理坐标,其中(s, t)坐标引用阴影图中的位置,第三个纹理坐标r则表示与光源的距离,然后再次绘制场景,把每个片段的r值与深度纹理值进行比较,以确定这个片段是被光所照射还是被阴影笼罩原创 2014-03-02 10:24:54 · 3867 阅读 · 0 评论 -
《高效学习OpenGL》 之 点块纹理 纹理矩阵堆栈 q坐标
点块纹理和抗锯齿点的区别:启用点块纹理:glEnable(GL_POINT_SPRITE);设置点块纹理的原点(决定t纹理坐标的值):glPointparameter(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT或GL_UPPER_LEFT);原创 2014-03-02 09:50:32 · 2394 阅读 · 0 评论 -
《高效学习OpenGL》 之 在纹理之后应用辅助颜色 glSecondaryColor()
如果没有启用光照,并且启用了颜色求和模式(glEnable(GL_COLOR_SUM)),那么当前的辅助颜色便添加到经过纹理的片段颜色上 glSecondaryColor3b(Type r, Type g, Type b); //设置当前辅助颜色的红绿蓝成分原创 2014-03-02 08:51:57 · 2661 阅读 · 0 评论 -
《高效学习OpenGL》 之 多重纹理 glActiveTexture(),glMultiTexCoord2f(),glClientActiveTexture()
多重纹理处理管线:1.建设纹理单位纹理单位的纹理状态:纹理图像,过滤参数,纹理环境应用,纹理坐标的自动生成,顶点数组的指定。 void glActiveTexture(GLenum texUnit); //选择可以由纹理函数进行修改的当前纹理单位, //texUnit是一个符号常量,其形式为GL_TEXTUREi,其中i的范围是从0到k-1,k是纹理单位的最大数原创 2014-03-02 08:34:11 · 8746 阅读 · 0 评论 -
《高效学习OpenGL》 之 纹理坐标的自动生成 glTexGen()
用于自动生成纹理坐标的函数: void glTexGeni (GLenum coord, GLenum pname, GLint param); //参数coord必须是GL_S、GL_T、GL_R或GL_Q //pname参数为GL_TEXTURE_GEN_MODE、GL_OBJECT_PLANE或GL_EYE_PLANE, //如果是GL_TEXTURE_GEN_原创 2014-03-02 07:27:40 · 5937 阅读 · 0 评论 -
《高效学习OpenGL》 之 分配纹理坐标 glTexCoord2f(), glTexParameter()
glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVe原创 2014-02-28 15:40:39 · 2941 阅读 · 1 评论 -
《高效学习OpenGL》 之 纹理函数(设置绘图模式) glTexEnv()
设置当前的纹理函数: glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); void glTexEnvf (GLenum target, GLenum pname, GLfloat param); //target必须是GL_TEXTURE_FILTER_CONTROL或GL_TEXTURE_ENV //如原创 2014-02-28 14:26:09 · 3499 阅读 · 0 评论 -
《高效学习OpenGL》 之 常驻纹理工作集 glAreTexturesResident(), glPrioritizeTextures()
GLboolean glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); //查询n个纹理对象的纹理常驻状态,这些纹理对象的名称由textures指定,函数返回的常驻状态保存在residences数组中 void glPrioritizeTextures (GLsizei n, co原创 2014-02-28 11:58:51 · 1855 阅读 · 0 评论 -
《高效学习OpenGL》 之 纹理对象 glGenTextures(),glIsTexture(),glBindTexture(),glDeleteTextures()
命名纹理对象: void glGenTextures (GLsizei n, GLuint *textures); //在数组textures中返回n个当期未使用的值,表示纹理对象的名称 //零作为一个保留的纹理对象名,它不会被此函数当做纹理对象名称而返回判断一个纹理名称是否处于实际使用中: GLboolean glIsTexture (GLuint texture原创 2014-02-28 11:25:08 · 11737 阅读 · 0 评论 -
《高效学习OpenGL》 之 过滤
指定放大和做小的过滤方法 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); //第二个和第三个参数可以是下图值原创 2014-02-27 17:10:55 · 1340 阅读 · 0 评论 -
《高效学习OpenGL》 之 mipmap glGenerateMipmap(),gluBuild2DMipmaps(),gluBuild2DMipmapLevels()
3.1后的版本: int glGenerateMipmap(GLenum target); //为与target相关联的纹理图像生成一组完整的mipmap,后的版本: gluBuild2DMipmaps() int gluBuild2DMipmaps ( GLenum target, GLint components,原创 2014-02-27 15:11:53 · 7183 阅读 · 0 评论 -
《高效学习OpenGL》 之 压缩纹理图像 glGetTexLevelParameter(),glCompressedTexImage2D()
1.在加载时压缩纹理图像在加载纹理图像时,只需把internalFormat参数设置为其中一种GL_COMPRESSED_*枚举值即可可以使用glGetTexLevelParameterfv()判断是否被压缩及压缩的格式。2.加载经过压缩的纹理图像 glCompressedTexImage2D(GLenum target, GLint level, GLint inte原创 2014-02-27 11:59:43 · 3287 阅读 · 0 评论 -
《高效学习OpenGL》 之 指定纹理 glTexImage2D(),gluScaleImage(), glCopyTexImage2D(),glTexSubImage2D()
定义一个二维纹理: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); void glTexImage2D (GLenum target, GLint level, G原创 2014-02-27 11:28:40 · 12477 阅读 · 0 评论 -
《高效学习OpenGL》 之 纹理贴图的步骤
纹理贴图的步骤1.创建纹理对象,并为它指定一个纹理2.确定纹理如何应用到每个像素上3.启用纹理贴图功能4.绘制场景,提供纹理坐标和几何图形坐标实例:(经过纹理贴图的棋盘)#include #include #include /* Create checkerboard texture */#define checkImageWidth 64#define原创 2014-02-27 09:52:48 · 2677 阅读 · 0 评论 -
《高效学习OpenGL》 之 最大最小像素值 glGetMinmax(), glMinmax()
glMinmax(GLenum target, GLenum internalFormat, GLboolean sink); glMinmax(GL_MINMAX, GL_RGB, GL_FALSE); glEnable(GL_MINMAX); //计算一副图像的最小像素值和最大像素值,target参数必须为GL_MINMAX, //internalFormat参数指定了原创 2014-02-26 15:20:34 · 1851 阅读 · 0 评论 -
《高效学习OpenGL》 之 柱状图 glHistogram(), glGetHistogram()
glHistogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink); glHistogram(GL_HISTOGRAM, HISTOGRAM_SIZE, GL_RGB, GL_FALSE); //定义了应该如何存储一幅图像的柱状图数据。target必须设置为GL_HISTOGRAM或GL_PR原创 2014-02-26 15:03:19 · 2662 阅读 · 0 评论 -
《高效学习OpenGL》 之 卷积 glConvolutionFilter2D(), glCopyConvolutionFilter2D(),glSeparableFilter2D()
glConvolutionFilter2D(GLenum target, GLenum , GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);//定义一个二维卷积过滤器,其中target参数必须是GL_CONVOLUTION_2D。internalFormat与gglColorTabl原创 2014-02-26 14:36:37 · 2513 阅读 · 0 评论 -
《高效学习OpenGL》 之 颜色表 glColorTable(),glColorTableParameter(),glCopyColorTable()
1.颜色表的种类可以调用glEnable()单独启用各个颜色表2.指定颜色表 glColorTable(GLenum target, GLenum InternelFormat, GLsizei width, GLenum format, GLenum type, const GLvoid* data); //target设置为上表的三个参数时,说明此函数用于定义指定原创 2014-02-26 11:59:04 · 3117 阅读 · 0 评论 -
《高效学习OpenGL》 之 读取和绘制像素矩形
像素矩形的绘制过程:像素矩形的读取过程:原创 2014-02-25 15:15:48 · 1614 阅读 · 0 评论 -
《高效学习OpenGL》 之 图像管线 glPixelStore(), glPixelTransfer(),glPixelMapf(),glPixelZoom()
本文讨论完整的图像管线,像素存储模式和像素传输操作glCopyPixels()的像素路径:glBitmap的像素路径:从纹理内存读取纹理或者把纹理写入到纹理内存时(glTexImage*()、glTexSubImage*())的像素路径:当像素数据从帧缓存区中复制到纹理内存时(glCopyTexImage*()、glCopyTexSu原创 2014-02-25 15:03:13 · 3294 阅读 · 0 评论 -
《高效学习OpenGL》 之 图像 glDrawPixels(), glCopyPixels(),glReadPixels()
像素数据处理流程简图 void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); //从帧缓冲区中的一个矩形区域读取像素数据,这个矩形区域的左下角窗口坐标(x,y),他的宽度和高度分别为width,hei原创 2014-02-24 10:02:04 · 9582 阅读 · 0 评论 -
《高效学习OpenGL》 之 定义和使用一种完整的字体
实例#include #include #include GLubyte space[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};GLubyte letters[][13] = {{0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0x原创 2014-02-24 09:23:19 · 1682 阅读 · 1 评论 -
《高效学习OpenGL》 之 位图与字体 glRasterPos(), glWindowPos(), glBitmap()
void glRasterPos4d (GLdouble x, GLdouble y, GLdouble z = 0, GLdouble w = 1); void glRasterPos4dv (const GLdouble *v); //确定当前光栅位置,x,y,z,w指定了当前光栅位置的坐标 glWindowPos(Type x, Type y, Type z); //用原创 2014-02-24 09:03:45 · 3847 阅读 · 1 评论 -
《高效学习OpenGL》 之 执行多个显示列表 glListBase(), glCallLists()
#include #include #include #define PT 1#define STROKE 2#define END 3typedef struct charpoint { GLfloat x, y; int type;} CP;CP Adata[] = { { 0, 0, PT}, {0, 9, PT}, {1, 10, PT},原创 2014-02-23 11:40:14 · 3952 阅读 · 1 评论 -
《高效学习OpenGL》 之 管理显示列表索引 glIsList(),glDeleteLists(),glGetIntegerv()
GLboolean glIsList (GLuint list); //如果list已经用于表示显示列表,这个函数返回GL_TRUE,否则返回GL_FALSE void glDeleteLists (GLuint list, GLsizei range); //删除range个显示列表,从list指定的索引开始 glGetIntegerv(GL_MAX_LIST_NESTING原创 2014-02-23 11:06:52 · 3119 阅读 · 0 评论