Computer Graphics
谢灵枢
爱编程爱游戏
展开
-
error C2381: “exit” : 重定义;__declspec(noreturn) 不同
今天在学习OpenGL时,遇到了标题所示的问题,所以转载了一下解决办法。解决办法一:#if defined(_WIN32)# ifndef GLUT_BUILDING_LIBextern _CRTIMP void __cdecl exit(int);上面是glut.h中对exit的使用,意思是如果没有定义宏GLUT_BUILDING转载 2013-08-04 09:46:29 · 2322 阅读 · 0 评论 -
Type Qualifier (GLSL)--GLSL类型修饰词
Storage qualifiersStorage qualifiers define where a variable's storage comes from.DefaultIf no storage qualifier is specified when declaring a global variable, then the variable is just a norm转载 2014-08-22 20:57:01 · 2445 阅读 · 0 评论 -
Interpolation and Extrapolation(內插與外插)
插值法(內插與外插)Interpolation and Extrapolation 數學問題探討當我們在表現資料時,常常會有需要比實際量測點上的值更細密的情況,或者是有需要在範圍外預測其值。比方說天氣圖的繪製,不論是氣壓或是雨量,都不可能做到處處都有測量站,又例如我們關心一天之中溫度隨時間的變化,但是實際上記錄氣溫的動作可能只是每小時一次,則我們要作一個連續的圖時,就會用到转载 2014-08-22 22:24:07 · 3927 阅读 · 0 评论 -
OpenGL直观固管图
Vertex Shader的功能相当于如下代码:for (var i:int = 0; i < vertexBuffer.length; i++){ executeVertexShader(vertexBuffer[i]);}Fragment Shader的功能相当于如下代码:for (var i:int = 0; i < fragmentStream.length; i+原创 2014-08-23 19:27:29 · 660 阅读 · 0 评论 -
编译QT项目出现错误:error C2144: syntax error : 'void' should be preceded by ';'
错误如下:C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\GL/gl.h(1152) : error C2144: syntax error : 'void' should be preceded by ';'C:\Program Files\Microsoft Visual Studio 8\VC\Pla转载 2014-08-13 23:10:58 · 5077 阅读 · 0 评论 -
OpenGL项目出现错误:error LNK2019: unresolved external symbol _gluErrorString@4
在头文件中加入:原创 2014-08-13 23:12:36 · 1586 阅读 · 0 评论 -
Sobel算子
由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法。 首先,我们来开一下计算机是如何检测边缘的。以灰度图像为例,它的理论基础是这样的,如果出现一个边缘,那么图像的灰度就会有一定的变化,为了方便假设由黑渐变为白代表一个边界,那么对其灰度分析,在边缘的灰度函数就是一个一次函数y=kx,对其求一阶导数就是其斜率k,就是说边缘的一阶导数是一个常数,而由于非边缘的一阶导数为零,这样转载 2014-08-15 16:28:23 · 1028 阅读 · 0 评论 -
四元数与欧拉角之间的转换
在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系:图1 3D Cartesian coordinate System (from wikipedia) 定义分别为绕Z轴、Y轴、X轴的旋转角度,如果用Tait-Bryan angle表示,分别为Yaw、Pitch、转载 2014-04-01 21:26:44 · 888 阅读 · 0 评论 -
pitch yaw roll 的区别(转载)
Z轴正方向为前进方向pitch():俯仰,将物体绕X轴旋转(localRotationX)yaw():航向,将物体绕Y轴旋转(localRotationY)roll():横滚,将物体绕Z轴旋转(localRotationZ)转载 2014-04-01 20:58:51 · 997 阅读 · 0 评论 -
直线光栅化算法
public void DrawLine(Vector2 point0, Vector2 point1) { var dist = (point1 - point0).Length(); if (dist { return;原创 2014-11-11 00:00:27 · 1843 阅读 · 0 评论 -
深入探索透视投影变换(续)
在上一篇文章中我们讨论了透视投影变换的原理,分析了OpenGL所使用的透视投影矩阵的生成方法。正如我们所说,不同的图形API因为左右手坐标系、行向量列向量矩阵以及变换范围等等的不同导致了矩阵的差异,可以有几十个不同的透视投影矩阵,但它们的原理大同小异。这次我们准备讨论一下Direct3D(以下简称D3D)以及J2ME平台上的JSR184(M3G)(以下简称M3G)的透视投影矩阵,主要出于以下几个目转载 2014-09-13 16:34:30 · 790 阅读 · 0 评论 -
深入探索透视投影变换
透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。 透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦对它们中的任何地方感转载 2014-09-12 23:54:21 · 795 阅读 · 0 评论 -
三维旋转矩阵的计算
这几天在学习3D数学中的三维变换,本来是想总结一下的,但发现网上已经有了比较好的总结了,我就不再重复劳动了,以下是转载的原文:三维旋转矩阵的计算在三维空间中,旋转变换是最基本的变换类型之一,有多种描述方式,如Euler角、旋转矩阵、旋转轴/旋转角度、四元数等。本文将介绍各种描述方式以及它们之间的转换。 1. 旋转矩阵用一个3阶正交矩阵来表示旋转变换,是一种最常用的表示方转载 2014-04-02 20:18:57 · 6586 阅读 · 0 评论 -
GLSL 内置变量
二、顶点处理器 1. 顶点属性 // Vertex Attributes attribute vec4 gl_Color; attribute vec4 gl_SecondaryColor; attribute vec3 gl_Normal; attribute vec4 gl_Vertex;转载 2014-08-22 15:41:42 · 1127 阅读 · 0 评论 -
OpenGL glDrawBuffer()函数
函数glDrawBuffer指示了FBO成员和片断着色器输出变量之间的联系。FBO中的第i个成员对应片断着色器中的索引为i的输出变量。原创 2014-08-20 20:12:16 · 3065 阅读 · 1 评论 -
error C3861: “glBlendEquation”: 找不到标识符
出错原因是:glBlendEquation是OpenGL扩展部分的函数。解决方法是安装OpenGL的glew扩展库。我的编译环境:VS2008。首先下载glew库:http://glew.sourceforge.net/然后进行安装:拷贝glew32.dll至system32文件夹下,拷贝glew32.lib至VC目录下lib文件夹,拷贝glew.h和wglew.h转载 2013-08-15 11:27:44 · 3675 阅读 · 0 评论 -
OpenGL的坐标系
一直对OpenGL的坐标系感到困惑,上网找了篇不错的文章,迷雾终于去除了。以下是转载的原文:openGL使用右手坐标从左到右,x递增从下到上,y递增从远到近,z递增--------------------------------------------------------------------------------OPENGL坐标系可分为:世界坐转载 2013-11-27 22:38:55 · 860 阅读 · 0 评论 -
OpenGL眼睛坐标系和目标坐标系
坐标变换是OpenGL最基本功能之一,然而却不容易讲清楚,网上已有的教程好象都没有做到这一点。 其实弄懂坐标变换的关键是理解什么是“眼睛坐标系”(eye coordinate system) 和“目标坐标系”(object coordinate system),以及各个API函数使用的是哪套坐标:是“眼睛坐标”还是“目标坐标”。 所谓“眼睛坐标系”就是“全局坐标系”,可以这样设想:转载 2013-11-27 16:14:14 · 2520 阅读 · 0 评论 -
glPolygonOffset的用法
一般的3D显示都通过深度缓冲区来处理遮挡问题,这样的好处就是不管绘制顺序如何,最终总能得到相同的结果。但是深度缓冲区的精度是有限的(一般是每个像素采用16bit或者24bit来表示深度),如果两次绘制到同一个像素时,深度值相差非常小,就有可能无法正确的辨别究竟哪一次绘制的深度值更小,此时深度测试(GL_DEPTH_TEST)就出错了。参考:http://en.wikipedia.org/wik转载 2013-11-29 15:56:18 · 1282 阅读 · 0 评论 -
什么是OpenGL中的深度、深度缓存、深度测试?
1)直观理解深度其实就是该象素点在3d世界中距离摄象机的距离,深度缓存中存储着每个象素点(绘制在屏幕上的)的深度值!深度测试决定了是否绘制较远的象素点(或较近的象素点),通常选用较近的,而较远优先能实现透视的效果!!!2)Z值(深度值)、Z buffer(深度缓存) 下面先讲讲Z坐标。Z坐标和X、Y坐标一样。在变换、裁减和透视除法后,Z的范围为-1.0~1.0。转载 2013-11-29 16:39:26 · 849 阅读 · 0 评论 -
颜色混合opengl
混合是什么呢?混合就是把两种颜色混在一起。具体一点,就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。假设我们需要绘制这样一个场景:透过红色的玻璃去看绿色的物体,那么可以先绘制绿色的物体,再绘制红色玻璃。在绘制红色玻璃的时候,利用“混合”功能,把将要绘制上去的红色和原来的绿色进行混合,于是得到一种新的颜色,看上去就好像玻璃是半透明的。要使用OpenG转载 2013-12-01 17:36:01 · 648 阅读 · 0 评论 -
OpenGL 矩阵变换
Overview几何数据——顶点位置,和标准向量(normal vectors),在OpenGL 管道raterization 处理过程之前可通过顶点操作(Vertex Operation)和基本组合操作改变这些数据。Object Coordinates对象的本地坐标系——任何变换之前的最初位置.为了变换(transformation)这些对象,可以调用glRo转载 2013-12-03 19:56:20 · 1062 阅读 · 0 评论 -
OpenGL中ADS光照模型没有镜面光照效果
struct MaterialInfo{vec3 Ka;vec3 Kd;vec3 Ks;float Shininess;};uniform MaterialInfo Material;原创 2014-04-25 17:37:04 · 1262 阅读 · 0 评论 -
glFinish()和glFlush()函数详解
通常情况下,OpenGL指令不是立即执行的。它们首先被送到指令缓冲区,然后才被送到硬件执行。glFinish和glFlush都是强制将命令缓冲区的内容提交给硬件执行。一、glFinish()函数OenGL手册上关于glFinish:NameglFinish — block until all GL execution is complete转载 2014-08-20 12:41:20 · 12400 阅读 · 0 评论 -
伽码值(灰度系数)相关
本人翻译,错谬请纠正。1.什么是发光强度?发光强度是这样一种度量,在电磁波谱某些范围从某处辐射的或某表面接收的能量流. 发光强度是所谓的线性光度量,以瓦特/平方米为单位表示。给CRT显示器的电压以非线性的方式,控制色彩分量的发光强度。CRT的电压与发光强度之间不成比例(不是线性关系)2.什么是亮度?亮度由国际颜色委员会定义,根据一个区域发光的多或少而产生的视转载 2014-08-20 14:15:09 · 4880 阅读 · 0 评论 -
OpenGL MSAA修饰词
OpenGL中有两个修饰词可以影响MSAA的效果原创 2014-08-20 16:19:02 · 941 阅读 · 0 评论 -
从零开始写软渲染引擎
学图形学也有一段时间了,对图形驱动OpenGL也有了基本的理解,但也仅限于API层的了解,图形管线的具体实现对于我来说还是十分抽象的概念,于是就想着自己实现个软件渲染引擎来加深对图形学的理解,但又无从下手。网上也下了不少的开源软渲染引擎,看起来也是相当痛苦。找了很久,居然一点都找不到这方面的教程。直到最近,网上终于有人出了个软渲染引擎的教程,真是万分感谢啊。感谢David Rousset出了这原创 2014-11-29 13:06:12 · 4286 阅读 · 7 评论