OpenGL
虚坏叔叔
「虚幻私塾」
展开
-
《高效学习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 · 2821 阅读 · 1 评论 -
《高效学习OpenGL》 之 创建机器人手臂源码讲解
#include #include static int shoulder = 0, elbow = 0;void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT);}void display(void){ glClear (GL_COLOR_BUFFER_BIT);原创 2014-02-18 21:28:05 · 2510 阅读 · 0 评论 -
《高效学习OpenGL》 之 深度纹理
1.从光源的角度对场景进行渲染。场景看上去是什么样子无关紧要,只需要深度值,然后创建阴影图,也就是捕捉深度缓冲区的值,并把他们存储在一个纹理图像(即阴影图)中2.生成纹理坐标,其中(s, t)坐标引用阴影图中的位置,第三个纹理坐标r则表示与光源的距离,然后再次绘制场景,把每个片段的r值与深度纹理值进行比较,以确定这个片段是被光所照射还是被阴影笼罩原创 2014-03-02 10:24:54 · 3759 阅读 · 0 评论 -
《高效学习OpenGL》 之 在纹理之后应用辅助颜色 glSecondaryColor()
如果没有启用光照,并且启用了颜色求和模式(glEnable(GL_COLOR_SUM)),那么当前的辅助颜色便添加到经过纹理的片段颜色上 glSecondaryColor3b(Type r, Type g, Type b); //设置当前辅助颜色的红绿蓝成分原创 2014-03-02 08:51:57 · 2578 阅读 · 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 · 2324 阅读 · 0 评论 -
《高效学习OpenGL》之 创建太阳系模型
void display(void){ glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glPushMatrix(); glutWireSphere(1.0, 20, 16); /* draw sun */ glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);/原创 2014-02-18 20:52:01 · 2262 阅读 · 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 · 5765 阅读 · 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 · 3552 阅读 · 0 评论 -
《高效学习OpenGL》 之 隐藏表面消除
隐藏表面消除就是消除实心物体被其他物体所遮挡的部分。深度缓冲区的原理就是把一个距离观察平面(通常是近侧裁剪平面)的深度值与窗口中的每个像素相关联,一开始,使用glClear()函数(以GL_DEPTH_BUFFER_BIT)把所有像素的深度值设置为最大可能距离(通常是远侧裁剪平面),然后以任意顺序绘制场景中的物体为了能够实现隐藏表面消除,调用如下代码 glE原创 2014-02-19 11:11:04 · 2280 阅读 · 0 评论 -
《高效学习OpenGL》之 操作矩阵堆栈 glPushMatrix(),glPopMatrix()
glPushMatrix(); //把当前堆栈中的所有矩阵都下压一级。当前矩阵堆栈是由glMatrixMode()指定的。glPopMatrix(); //把堆栈顶部的那个矩阵弹出堆栈,销毁被弹出的矩阵内容原创 2014-02-18 19:42:58 · 1848 阅读 · 0 评论 -
《高效学习OpenGL》 之 指定颜色和着色模型 glClampColor(),glIndexf(),glClearIndex(),glShadeModel()
1.在RGBA模式下指定颜色 glColor3f (1.0, 0.0, 0.0); //设置绘图颜色颜色截取 void glClampColor(GLenum target, GLenum clamp); //指定主颜色值和辅助颜色值是否截取2.在颜色索引模式下指定颜色 glIndexf(GLfloat c); //把当前颜色索引设置为c g原创 2014-02-19 10:27:55 · 2529 阅读 · 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 · 1809 阅读 · 0 评论 -
《高效学习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 · 3361 阅读 · 0 评论 -
《高效学习OpenGL》之 通用的变换函数 glMatrixMode(),glLoadIdentity(),glLoadMatrixf(),glMultMatrixf();
glMatrixMode (GL_PROJECTION);//表示把当前矩阵指定为用于投影变换 //视图矩阵GL_MODELVIEW、投影矩阵:GL_PROJECTION、纹理矩阵GL_TEXTURE glLoadIdentity ();//把当前的可修改矩阵设置为4x4单位矩阵 glLoadMatrixf(const GLfloat *m);//把当前矩阵的16个值设置为m指定原创 2014-02-18 11:34:25 · 4265 阅读 · 0 评论 -
《高效学习OpenGL》之 投影变换 glFrustum(),gluPerspective(),glOrtho(),gluOrtho2D()
1.透视投影 void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);void APIENTRY gluPerspective ( GLdouble fovy, GLdouble aspect,原创 2014-02-18 16:21:43 · 3064 阅读 · 0 评论 -
《高效学习OpenGL》之 视口变换 glViewport(), glDepthRange()
以照相机为比例,视口变换相当于冲洗相片大小的这个阶段glViewport (0, 0, (GLsizei) w, (GLsizei) h); //在窗口中定义一个像素矩形,最终的图像将映射到这个矩形中,注意,视口的纵横比一般与视景体的纵横比相同 void APIENTRY glDepthRange (GLclampd zNear, GLclampd zFar);//变换原创 2014-02-18 16:58:31 · 2597 阅读 · 0 评论 -
《高效学习OpenGL》之模型变换 glTranslatef(), glRotatef(),glScalef()
1.移动 glTranslatef (GLfloat x, GLfloat y, GLfloat z); //把当前矩阵与一个表示移动物体的矩阵相乘。这个矩阵有x, y, z指定2.旋转 glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); //把当前矩阵与一个表示移动物体的矩阵相乘。以逆时针方向绕着从原点到点(x原创 2014-02-18 15:04:23 · 4258 阅读 · 0 评论 -
《高效学习OpenGL》之视图变换 gluLookAt()
注意:视图变换函数必须在调用任何模型变换函数之前调用,确保首先作用于物体的是模型变换 void gluLookAt ( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, G原创 2014-02-18 15:38:39 · 2125 阅读 · 0 评论 -
《高效学习OpenGL》 之 逆变换和模拟变换 gluUnProject(),gluProject()
int gluUnProject ( GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4]原创 2014-02-19 10:06:26 · 3599 阅读 · 0 评论 -
《高效学习OpenGL》 之 控制光源的位置和方向
1.如何使光源保持静止在使用完视图和模型变换之前设置光源的位置,init()的后面, display()之前2.独立的移动光源在模型变换之后设置光源位置#include #include static int spin = 0;void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeMo原创 2014-02-19 16:40:58 · 4811 阅读 · 0 评论 -
《高效学习OpenGL》 之 选择光照类型 glLightModel(), glEnable()
void glLightModelfv (GLenum pname, const GLfloat *params); //设置光照属性的模型。被设置的光照属性模型的特征是由pname指定的,param表示pname参数被设置的值1.全局环境光实例 GLfloat ambient[] = { 0.2, 0.2, 0.2, 1.0 }; glLightModelfv原创 2014-02-20 11:23:32 · 7499 阅读 · 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 · 5870 阅读 · 0 评论 -
《高效学习OpenGL》之缓冲区对象 glGenBuffers(), glBindBuffer(), glBufferData(),glMapBuffer()
1.创建缓冲区对象void glGenBuffers(GLsizei n, GLuint *buffers);//在buffers数组中返回当前n个未使用的名称,表示缓冲区对象GLboolean glIsBuffer(GLuint buffer);//判断是否是缓冲区对象2.激活缓冲区对象void glBindBuffer(GLenum target, GLuint buffer原创 2014-02-17 10:32:19 · 22407 阅读 · 2 评论 -
《高效学习OpenGL》 之 多重纹理 glActiveTexture(),glMultiTexCoord2f(),glClientActiveTexture()
多重纹理处理管线:1.建设纹理单位纹理单位的纹理状态:纹理图像,过滤参数,纹理环境应用,纹理坐标的自动生成,顶点数组的指定。 void glActiveTexture(GLenum texUnit); //选择可以由纹理函数进行修改的当前纹理单位, //texUnit是一个符号常量,其形式为GL_TEXTUREi,其中i的范围是从0到k-1,k是纹理单位的最大数原创 2014-03-02 08:34:11 · 8620 阅读 · 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 · 6564 阅读 · 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 · 12605 阅读 · 0 评论 -
《高效学习OpenGL》 之 创建光源 glLightfv()
1.创建光源void glLightfv (GLenum light, GLenum pname, const GLfloat *params); //创建指定的光源,light可以是GL_LIGHT0、GL_LIGHT1,pname定义的是光源的属性,它指定了一个命名参数。params表示表示pname属性将要被设置的值pname和params的值实例 GLfloat li原创 2014-02-19 15:39:53 · 17775 阅读 · 1 评论 -
《高效学习OpenGL》 之 缓冲区及其用途 glDrawBuffer(),glReadBuffer(),glColorMask(),glClearBuffer()
查询特定的画面可以使用的基于像素的缓冲区存储信息:调用glGetIntegerv()函数1.颜色缓冲区可以在glGetBooleanv()函数中使用GL_STEREO或GL_DOUBLEBUFFER参数来判断自己的系统是否支持立体画面(即提供左右缓冲区)或双缓冲(即提供了前后缓冲区)。为了判断系统支持多少辅助缓冲区,可以用GL_AUX_BUFFERS为参数调用glGetInte原创 2014-03-03 10:10:15 · 13971 阅读 · 1 评论 -
《高效学习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 · 12240 阅读 · 0 评论 -
极路由最新刷机教程
前提条件极路由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 · 35239 阅读 · 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 · 2649 阅读 · 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 · 6014 阅读 · 0 评论 -
《高效学习OpenGL》 之 定义材料属性 glMaterial()
void glMaterialf (GLenum face, GLenum pname, GLfloat param); //指定光照计算的当前材料的属性,face可以是GL_FRONT,GL_BACK,GL_FRONT_AND_BACK, //pname表示设定特定的材料属性,param提供了具体的属性值1.散射和环境反射环境颜色影响物体的状整体颜色,当物体被直接照亮时,原创 2014-02-20 12:05:06 · 5509 阅读 · 0 评论 -
《高效学习OpenGL》 之 和光照有关的数学知识
使用光照后,顶点的颜色是按照下面的公式计算的:顶点的颜色 = 顶点处的材料发射颜色+全局环境光+经过适当衰减的来自所有光源的环境、散射和镜面光成分1.材料的发射光就是赋值给GL_EMISSION的RGB值 2.经过缩放后的全局环境光即全局环境光*材料环颜色属性ambient(bright model) *ambient(martial)3.光源的贡献=衰减因原创 2014-02-20 16:42:57 · 1350 阅读 · 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 · 4067 阅读 · 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 · 2414 阅读 · 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 · 5512 阅读 · 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 · 3812 阅读 · 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 · 8592 阅读 · 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 · 3095 阅读 · 0 评论