自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

自由理想的足迹

只要功夫深,铁杆磨成针

  • 博客(27)
  • 资源 (10)
  • 收藏
  • 关注

原创 OGL glViewport glFrustum gluPerspective gluLookAt glTranslatef glRotatef glScalef感悟

通过分析代码可以得到如下感悟:1.OGL中因为是列主序矩阵,需要左乘下一步变换才得到矩阵变换结果。所以视口变换,投影变换,视图变换,模型变换的顺序进行设置的;所以变换顺序一定要和D3D区分好。2.OGL中是用视图模型矩阵堆栈,投影矩阵堆栈进行变换的,每个矩阵的设置其实包含了生成一个矩阵,以及和当前栈顶矩阵相乘,得到当前变换;所以变换设置glLoadIdentify,glPushMatrix,glP

2016-05-31 10:55:32 1126

转载 详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储

详解OpenGL的坐标系、投影和几何变换OPengl的渲染流程是先全部设置好数据和状态,GL_MODELVIEW是将当前要变换的空间向量和模型视图矩阵当前最顶矩阵(会乘以摄像机变换乘投影矩阵的矩阵得最终变换矩阵)关联存储好包括状态设置,提交渲染时候glflush才会提交渲染数据和命令。glPushMatrix()和glPopMatrix()的配对使用目的是方便得到需要变换的最顶矩阵,同时消

2016-05-30 09:11:25 3236 2

原创 物惯(子到父节点)变换顺序原因和不同坐标系下的变换顺序详解

在基于同一个参考坐标系中(也就是子节点到父节点坐标系中的变换),对于一个基本变换,D3D中要先缩放->旋转->平移。OGL中要先平移->旋转->缩放,其中的原因解释?OGL中是左乘矩阵,因此子节点变换到父节点是先平移后旋转缩放,才是正确的变换顺序。关于先平移后旋转不是OGL中解释的每次是基于当前嵌套坐标系变换,而是因为变换的矩阵乘法顺序和乘法规则规定的。D3D中先旋转后平移才能

2016-05-28 11:20:52 3331 1

原创 gluPerspective右手坐标系中透视投影剖析-线性中都要除以-z 和 zn、zf是距离

1.结果是没有除以w之前的值yScale = cot(fovY/2), fovY越小,yScale缩放比例差距越大, 一般fovY取90度,fovY/2为45度, 视图坐标系到透视4D空间中yScale = 1。2.w/h比例越大说明xScale缩放比例越小,yScale由fovY指定,而且要正好反比例:w/h = yScale/xScale 。xScale = yScale / aspect,

2016-05-27 11:27:45 1399

原创 gluOrtho2D glFrustum

D3DXMATRIX* D3DXMatrixOrthoLH(  _Inout_  D3DXMATRIX *pOut, // 输出的变幻矩阵  _In_     FLOAT w, // 屏幕的宽度  _In_     FLOAT h, // 屏幕的高度  _In_     FLOAT zn, // z深度缓存最小值  _In_     FLOAT zf // z深度缓存最大值

2016-05-27 11:25:40 615

原创 从描述来求取变换(矩阵欧拉角四元数)的思想

从变换来求取变换矩阵,欧拉角,或四元数,首先需要明天矩阵,欧拉角,四元数的含义。然后用它们来描述人类理解的变换,对于矩阵变换的求取:1)用变换前坐标系作为参考坐标系,先取得一个变换前向量,然后取得一个变换后向量。2)通过相对于参考坐标系数值不变;数值对称取反;作垂线平分线于参考坐标系,假设转换为已知坐标轴关系例如旋转基向量求取;通过向量的点积投影和叉乘法向量,三角关系sin theta,c

2016-05-27 10:44:29 1225

原创 屏幕空间变换在透视除法裁剪的DNS空间后进行和glViewport

总结出两点:1.屏幕坐标变换数据来源是在透视投影后,硬件进行透视除法裁剪后的DNS设备坐标系中的数据。2.透视投影是将视图(摄像机)坐标系,转换到4D空间中(2D正交投影不用考虑透视除法), 并且注意zn,zf正负值,aspect是用倒数参数xScale缩放的,aspect越小xScale越大,放到屏幕中也越大。屏幕转换那一步会将DNS坐标中的值等比的缩放充满整个屏幕。屏幕左边逆向转换到世界左

2016-05-26 11:23:58 1843

原创 gluLookAt函数

1)原理:将世界坐标系中的物体位置,描述为摄像机坐标系下的物体位置。也就是世界坐标系原点坐标轴三个向量,变换到摄像机坐标系三个坐标轴向量,可以对物体进行这样的变换可能包含了缩放->旋转->平移,然后取逆变换得到该摄像机视图变换矩阵。因为OGL中是列式矩阵,所以矩阵乘法顺序本来是:T^-1 * M^-1变为:M^-1*T^-1。glMultMatrixf(M);glTranslat

2016-05-25 10:59:55 1210

原创 U3D UI坐标换算和屏幕适配计算方法

目前最成熟的移动UI适配方案,还是基于按照高度等比适配或者是按照宽度等比适配(如果宽高都要完全适配那么可能要多套资源),结合锚点定位的方式来进行适配。其它的方法,实时改变设计分辨率,改变摄像机aspect角度都是徒劳的。下面是按照宽度,和高度适配下的一些偏移计算方法。缩放比例问题按照宽度适配: public void ApplyAdjustParticleSize( flo

2016-05-24 11:05:07 4612

原创 坐标变换深入理解

一、变换的前提考虑坐标变换时候,一定要分清楚几个前提条件:1.当前是否需要进行变换,通过一些相对位置是否能够求取出来; 通过中间位置(屏幕位置)得到结果,或者通过方便的函数计算出来,不需要自己计算,如UnityEngine.RectTransformUtility.ScreenPointToLocalPointInRectangle。2.当前是左手坐标系还是右手坐标系。(cocos

2016-05-24 10:58:15 7616

原创 glPushAttrib保存属性组 改变属性 glPopAttrib恢复属性组

属性组有服务器的GPU,客户端的CPU,默认是服务器的。属性组的使用,可以很方便的保存指定掩码的属性组,改变属性组,然后恢复属性组。属性组只是渲染状态的集合,和DX的属性表不同。int nAttriNumS, nAttriNumC= 0;glGetIntegerv(GL_MAX_ATTRIB_STACK_DEPTH, &nAttriNumS);glGetIntegerv(GL_

2016-05-20 12:20:16 2081

原创 多个glBindBuffer和glDrawXXX 需要glBindVertexArray VAO指定

一个VAO有多个VBO,它们之间也是通过上下文,只有唯一的激活VAO,在VAO后创建的VBO都属于该VAO。关联VBO数据用取得当前激活的缓存区对象偏移来指定。VAO是一个对象,其中包含一个或者更多的Vertex Buffer Objects。而VBO是Graphics Card中的一个内存缓冲区,用来保存顶点信息,颜色信息,法线信息,纹理坐标信息和索引信息等等。VAO在Gra

2016-05-20 11:40:49 8190

原创 重启图元遇到指定索引值重新绘制和glew通过NULL指定没有cpu数据拷贝到缓存区对象中

1.重绘顶点索引,glPrimitiveRestartIndex在遍历索引缓存绘制中,遇到指定索引值,重新开始绘制同类型的一个新图元,避免开辟多个索引缓存。2. glew中 glGenBuffers glBindBuffer glBufferData和通过NULL指定最近的缓存,glBufferData(GL_ARRAY_BUFFER, 6 * NumPoints * sizeof(G

2016-05-18 10:49:46 821

原创 glNormal3fv/GL_RESCALE_NORMAL/GL_NORMALIZE

法线向量的设置也是状态,设置顶点时候会用最近的法线向量。glBegin(xxx);glNormal3fv(vn0);glVertex3fv(v0);glNormal3fv(vn1);glVertex3fv(v1);glEnd();计算光照前需要对法向量进行单位化。1).如果一开始就是单位向量,后面只是进行平移和旋转,那么法向量不需要重新计算,也不需要重新规范

2016-05-13 10:51:33 3475

原创 多边形glPolygonMode glFrontFace glCullFace glPolygonStipple

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //GL_LINE 对glPolygonStipple不起作用   glFrontFace(GL_CW);// clock wise   glCullFace(GL_FRONT_AND_BACK);// back face   glEnable(GL_POLYGON_STIPPLE); // GL_P

2016-05-13 10:13:28 1344

原创 glBegin glVertex2f glEnd画线 线有形状 大小 插值方式的非抗锯齿和抗锯齿版本

在:glBegin glVertex2f glEnd画线中画线。画线的形状glEnable(GL_LINE_SMOOTH);--GL_LINE_STIPPLE指定。大小用: glLineWidth (5.0); glLineWidth (1.0);重置状态。填充方式:glLineStipple (1, 0x0101); 前面参数是重复因子,后面参数是画的像素数(从低位地址画起)

2016-05-13 10:12:57 2881

原创 glutInitContextVersion glutInitContextFlags和glutCreateWindow

int main(int argc, char** argv){   glutInit(&argc, argv);   glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);   glutInitWindowSize (250, 250);    glutInitWindowPosition (100, 100);   // 指定OGL版

2016-05-13 10:12:28 2351

原创 glutSwapBuffers和glutPostRedisplay

双缓存用SwapBuffer,单缓存用glFlush()/* * Copyright (c) 1993-2003, Silicon Graphics, Inc. * All Rights Reserved * * Permission to use, copy, modify, and distribute this software for any * purpose

2016-05-13 10:11:55 4307

原创 OGL实例和窗口系统关系和freeglut

需要windows上编译用CMake freegult即可。// 绘制的东西都在全局坐标的原点,世界坐标的原点,也就是世界坐标原点是转换到屏幕中心的    glutSolidCube(1.0); //使用上面的头文件是不行的,需要GLUT的窗口框架,win7 64只能用GL/glut.h#include #include  //设置背景颜色和坐标系统

2016-05-13 10:10:54 1485

原创 关于图形学变换的前提

考虑变换时候,一定要分清楚几个前提条件:1.当前是否需要进行变换,通过一些相对位置是否能够求取出来; 通过中间位置(屏幕位置)得到结果。2.当前是左手坐标系还是右手坐标系。(cocos2dx中用的就是右手坐标系,而u3d中世界坐标系是左手坐标系)3.当前是变换物体,还是变换坐标系,变换坐标系也要基于变换物体的逆来考虑。4.变换的顺序,连续变换的顺序,基于父节点要先进行缩放->旋

2016-05-06 11:05:11 407

原创 右手坐标系中透视投影剖析-线性中都要除以-z 和 zn、zf是需要负数代入的

1.结果是没有除以w之前的值yScale = cot(fovY/2)2.w/h比例越大说明xScale缩放得越小,yScale缩放得越大,而且要正好反比例:w/h = yScale/xScale 。xScale = yScale / aspect ratio3.除z或-z后计算只是用后面的关系方便,转换为前面的关系(4D中)还是az+b = z'的。4.在RH z NDC坐标系中转

2016-05-06 11:03:02 1218

原创 坐标变换理解

1.简化变换的思想:使用惯性坐标系(惯性坐标系是世界坐标系平移到物体坐标系的位置)可以简化物体-世界,世界-物体,或者说任何两个坐标系间的转换做一个中间的转换,使问题变得简单。使用嵌套坐标系(父坐标系-子坐标系-子坐标系)也可以分解问题,简化复杂的变换逻辑。其实把问题简单化思考的方法,不外乎实例化,拆分它,转换它,再组合转换抽象回来,就可以很elegant的解决问题了。很多物体间的方位和运

2016-05-06 11:01:55 4198 4

转载 OPENGL设备坐标系(dns)是左手坐标系,屏幕坐标系原点在左下角向上向右增加

OPENGL屏幕坐标系原点在左下角向上向右增加,D3D屏幕坐标系原点在左上角向下向右增加。所以glViewPort的从设备坐标系变换到屏幕空间的变换公式为:使得(-1,-1)到左下角(x0,y0), (1,1)到右上角(x0 + w, y0 + h)。D3D中设备坐标系变换到屏幕的公式为:Xw = x* w/2 + w / 2 + x0;Yw = -y

2016-05-06 11:00:24 5338

转载 详解OpenGL的坐标系、投影和几何变换-矩阵压栈思想/矩阵列式存储

详解OpenGL的坐标系、投影和几何变换OPengl的渲染流程是先全部设置好数据和状态,GL_MODELVIEW是将当前要变换的空间向量和模型视图矩阵当前最顶矩阵(会乘以摄像机变换乘投影矩阵的矩阵得最终变换矩阵)关联存储好包括状态设置,提交渲染时候glflush才会提交渲染数据和命令。glPushMatrix()和glPopMatrix()的配对使用目的是方便得到需要变换的最顶矩阵,同时消

2016-05-06 10:58:53 2433

原创 OPENGL es版本和OGL 及android关系

OpenGL ES 1.0 and 1.1 - This API specification is supported by Android 1.0 and higher.OpenGL ES 2.0 - This API specification is supported by Android 2.2 (API level 8) and higher.OpenGL ES 3.0 - Th

2016-05-05 13:25:09 4924

原创 Opengl GLSL和DX Shader Model对应关系

Opengl 3.3以上对应DX10以上,对应Shader Model4.0以上,GLSL版本3.3以上。OpenGL 3.3以上的,Opengl版本和GLSL版本一致,例如:Opengl4.1和GLSL4.1一致。1.2009/2012-至今win7/win8时代,Opengl 4.3(2012)也就是GLSL4.3对应D3D的Shader Model5.0 DX11-11.

2016-05-05 11:11:56 5843

原创 DX和Shader model/windows关系

一、DX和Shader model关系时至微软发布DirectX 10.1之后,Shader Model 已经有五个版本了:分别是Shader Model 1.0(DirectX8.0)、Shader Model 2.0(DirectX9.0b)、Shader Model 3.0(DirectX9.0c)、Shader Model 4.0(DirectX10)、Shader M

2016-05-05 09:47:22 1547

VisualAssist.X_10.9.2333

Visual Assist X For Visual Studio, 番茄助手支持VS2019 VS2017 VS2015 VS2012 VS2010. 亲测可用,欢迎评论

2020-05-31

Python学习文档

Python学习文档

2018-10-04

C++ 11 学习总结文档

c++特性11 学习 总结文档,对特性查询很有帮助,欢迎下载

2018-10-04

Unreal Engine 4 Game Development in 24 Hours

Unreal Engine 4 Game Development in 24 Hours英文版本,欢迎下载。

2018-10-03

CC++黑色星期五计算方法

C C++黑色星期五代码,逻辑严谨,代码清晰的实现,VC Linux下代码可以直接运行;欢迎下载切磋。

2013-03-12

Linux帮助文档用户指南手册

Linux帮助文档 用户指南 linux/unix用户手册,新手管理员指南;必备文档,chm格式。

2011-04-11

C/C++语言帮助文档

C/C++ 帮助文档 参考文档 ,包含C函数库,C++标准模板库,chm格式易于查询,C/C++程序员手册

2011-04-11

MFC最详细的帮助文档

MFC详细的帮助文档,内涵win32 API 函数,MFC详细类库;VC开发人员的详细文档。

2011-03-08

linux帮助文档linux.chm

linux帮助文档;全面了解最流行的linux版本特征;详解linux操作系统;对初学者很有帮助哦。

2010-11-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除