
计算机图形学
文章平均质量分 81
phinecos
专注于开源技术的研究与应用
展开
-
《基于MFC的OpenGL编程》Part 1 A Primer
3D图形学基本概念PerspectivePerspective refers to the angles between the lines that lend the illusion of three dimensions. Colors and ShadingMoving beyond line drawing, we need to add color to c原创 2008-11-04 21:44:00 · 680 阅读 · 0 评论 -
OpenGL入门笔记(三)
今天主要学习二维图形的着色和旋转。int DrawGLScene(GLvoid) // Heres Where We Do All The Drawing{ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And D原创 2007-04-17 16:58:00 · 732 阅读 · 0 评论 -
OpenGL入门笔记(四)
前面一直在画二维图形,其实三维图形的绘制就是以其为基础,可以说二维不过是三维的一种特例(相当与Z=0)。比如说要画一个正方体,它有上下左右前后共六个面组成,也就是要画出六个正方形就可以了,只是要注意绘制时应该按逆时针绘制(好像是进行纹理映射时需要的。。。) 我们必须将OpenGL屏幕想象成一张很大的画纸,后面还带着许多透明的层。差不多就是个由大量的点组成的立方原创 2007-04-17 22:58:00 · 642 阅读 · 0 评论 -
OpenGL入门笔记(五)
以前也听说过纹理映射,不过一直没明白是怎么回事情,只是以为是在绘制好的三维图形表面再进行更为细致的绘制,从而绘制出物体表面的纹理,就像画桌子把桌面的条纹也画出来一样。今天学习的就是如何使用2D纹理绘制图形。 在计算机图形学中,纹理映射(texture mapping)把存储在内存里的位图包裹到3D渲染物体的表面。纹理给物体提供了丰富的细节,用简单的方式模拟出了复杂的外观。一个图像(原创 2007-04-18 08:58:00 · 640 阅读 · 0 评论 -
OpenGL入门笔记(六)
其实纹理滤波是什么概念我也还不了解,图形学就是这样,理论和实践都不可偏废,可究竟从何处入手也是个两难的问题,有人说“图形血到最后就是数学”,对我这样的新手来说,快速有个概念也许不失为一个笨办法吧。 Nehe在第6课里已经用了线性滤波了,并且还推荐我们把gl_nearest(不光滑)滤波方式和线性滤波结合起来使用,在近处时用线性滤波,在远处时用gl_nearest(不光滑)滤波,因为原创 2007-04-19 20:58:00 · 662 阅读 · 0 评论 -
OpenGL入门笔记(七)
OpenGL中的绝大多数特效都与某些类型的(色彩)混合有关。混色的定义为,将某个象素的颜色和已绘制在屏幕上与其对应的象素颜色相互结合。至于如何结合这两个颜色则依赖于颜色的alpha通道的分量值,以及/或者所使用的混色函数。Alpha通常是位于颜色值末尾的第4个颜色组成分量。前面这些课我们都是用GL_RGB来指定颜色的三个分量。相应的GL_RGBA可以指定alpha分量的值。更进一步,我们可原创 2007-04-19 21:58:00 · 651 阅读 · 0 评论 -
OpenGL入门笔记(八)
Demo8Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->bool twinkle; // Twinkling Starsbool tp; // T Key Press原创 2007-04-24 20:58:00 · 641 阅读 · 0 评论 -
OpenGL入门笔记(九)
红宝书看完了前面10章,遇到了些问题没完全弄清楚。。。 1, 反走样操作2, 法线向量的计算3, 透视投影和正交投影的区别4, gluLookAt()函数中的方向向量有什么作用?5, 如何独立移动光源6, 如何沿视点移动光源7, 带深度缓存的三维物体混合8, 如何消除多边形的锯齿现象9,多边形偏移10,多显示列表11,三维纹理原创 2007-04-26 13:58:00 · 515 阅读 · 0 评论 -
OpenGL入门笔记(十)
要使用GLUT库,要将glut32.lib放到VC98/Lib下,将glut.h放到VC98/Include/GL下,并在程序中包含进glut.h。#include GL/glut.h>#include stdlib.h>GLfloat point1[] = {0.25,0.25,0.0};GLfloat point2[] = {0.75,0.25,0.0};GLfloat point原创 2007-04-26 21:58:00 · 747 阅读 · 0 评论 -
直线的生成算法
在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从(x1, y1)到(x2, y2)的直线,实质上是一个发现最佳逼近直线的象素序列,并填入色彩数据的过程。这个过程也称为直线光栅化。直线的DDA算法DDA是数字微分分析式(Digital Differential Analyzer)的缩写。设直线之起点为(x1,y1),终点为(x2,y2),则斜率原创 2007-04-28 21:58:00 · 1357 阅读 · 1 评论 -
C++ Exercises(一)
一个3D向量类Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// Vertex3D.h: interface for the Vertex3D class.///////////////////////////////////////原创 2007-04-29 16:58:00 · 529 阅读 · 0 评论 -
OpenGL入门笔记(十一)
每个3D世界基本上可以看作是sector(区段)的集合。一个sector(区段)可以是一个房间、一个立方体、或者任意一个闭合的区间。在程序内部直接存储数据会让程序显得太过死板和无趣。从磁盘上载入世界资料,会给我们带来更多的弹性,可以让我们体验不同的世界,而不用被迫重新编译程序。另一个好处就是用户可以切换世界资料并修改它们而无需知道程序如何读入输出这些资料的。 数据文原创 2007-05-04 16:57:00 · 689 阅读 · 0 评论 -
画图板--用DDA算法和Bresenham算法画直线
上一篇文章中为了简单起见,直接用了CDC的画直线功能,这几天认真研读了图形学的课本,发现书上的算法都是假定直线斜率-1的情况下适用的,参考了网上的一些资料,将在任意斜率下画直线的两种算法实现如下:void Line::Draw_DDA(CDC *pDC){//用DDA算法画直线 int i; if(pStart.x==pEnd.x) { //为竖原创 2007-07-27 16:57:00 · 1411 阅读 · 0 评论 -
画图板-- 中点算法画圆
为了能以任意点为圆心画圆,我们可以把圆心先设为视点(相当于于将其平移到坐标原点),然后通过中点法扫描转换后,再恢复原来的视点(相当于将圆心平移回原来的位置)。 圆心位于原点的圆有四条对称轴x=0,y=0,x=y和x=-y,从而圆上一点(x,y),可得到其关于四条对称轴的七个对称点,这称为八对称性,下面的函数就用来显示(x,y)及其七个对称点.void Circ原创 2007-07-28 10:57:00 · 1889 阅读 · 0 评论 -
VC++中OpenGL的配置
一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip Windows环境下安装GLUT的步骤:原创 2007-07-28 16:56:00 · 631 阅读 · 0 评论 -
基于MFC的OpenGL绘图
本文更新版本请点击[置顶]《基于MFC的OpenGL编程》系列文章一、简介 GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC")。每一个GDI命令需要传给它一个DC,但与GDI不同,OpenGL使用当前绘制环境(RC)。一旦在一个线程中指定 了一个原创 2007-07-28 20:56:00 · 966 阅读 · 0 评论 -
Nehe的OpenGL框架(MFC版)
Nehe的几个OpenGL框架都是Win32 sdk版本的,我现在需要在MFC下学习OpenGL,今天看了他写的第一个OpenGL框架,就在MFC中实现了下。为了简单起见,把全屏那部分就抛弃掉了,毕竟重点不在这上面,而且MFC要实现这个全屏的功能也不像sdk那么容易。。。Code highlighting produced by Actipro CodeHigh原创 2007-07-29 14:56:00 · 1542 阅读 · 5 评论 -
OpenGL入门笔记(二)
第一篇笔记中的OpenGL框架其实很简单,大致有如下几个步骤:1,取得窗口的实例,然后定义窗口类2,注册窗口类3,创建窗口4,描述像素格式5,获取设备描述表6,找到与此前我们选定的象素格式相对应的象素格式7,设置象素格式8,取得绘制描述表9,激活绘制描述表10,显示窗口11,将屏幕的宽度和高度设置给透视OpenGL屏幕(设置视口,进行投影,模型透原创 2007-04-16 22:58:00 · 626 阅读 · 0 评论 -
OpenGL入门笔记(一)
#include windows.h> // Header File For Windows#include gl/gl.h> // Header File For The OpenGL32 Library#include gl/glu.h> // Header File For The GLu32 Library#include原创 2007-04-15 22:58:00 · 1020 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 2 Setting up OpenGL on Windows
源代码下载:OpenGL_ch2.rar WGL – Windows的 OpenGL扩展层 The WGL extension consists of a set of functions (wglCreateContext, wglDeleteContext etc.) and structures (such as PIXELFORMATDESCRIPTOR, GLYPHM原创 2008-11-04 21:44:00 · 769 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 3 Drawing Simple 2D Shapes
剪裁区域 In OpenGL when you create a window to draw in we must specify the coordinate system we want to use and how to map the specified coordinates into physical screen coordinates. We would be原创 2008-11-05 15:44:00 · 625 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 4 Drawing Simple 3D objects
视见体Viewing Volume is nothing but the region of 3D Cartesian space in that will occupy the window. It is nothing but the minimum and maximum x, y and z values that are inside the window. So if a原创 2008-11-05 15:44:00 · 592 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 5 Transformations - Rotations, Translations and Scaling
Transformations - Translation, Rotation and ScalingTranslation is nothing but moving along an arbitrary axis. Rotation is spinning about an arbitrary axis. Scaling is increase or decrease in siz原创 2008-11-05 16:44:00 · 685 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 6 Keyboard and Mouse Control
在上一篇的基础上加入对键盘和鼠标的事件处理程序,以便用其来控制3D物体的旋转和移动。1,首先在CCY457OpenGLView类中为WM_KEYDOWN, WM_LBUTTONDOWN, WM_LBUTTONUP 和 WM_MOUSEMOVE四个事件加入事件处理函数。2,在CCY457OpenGLView.h中加入下列用于控制旋转和移动的变量:Code hig原创 2008-11-05 16:44:00 · 805 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 7 Animation
本文中将对第5篇文章的太阳系模型进行修改,加入一些动画效果。此外还会加入显示帧速率的代码。 加入动画效果最容易的方法是响应WM_TIMER消息,在其消息处理函数中改变一些参数值,比如每过多少毫秒就旋转一定的角度,并且重绘场景。Frame RateFrame rate is nothing but the number of frames that can原创 2008-11-05 20:44:00 · 718 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 8 Colors
OpenGL支持两种颜色模式:RGBA和颜色索引模式,本文关注于前者。Smooth Shading and Flat Shading When Smooth Shading is specified, the color values are interpolated between vertices. If Flat Shading is specified, one原创 2008-11-05 20:44:00 · 657 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 10 Texture Mapping
本文在第9篇文章的基础上,为立方体加入纹理映射的功能。Texture MappingTexture Mapping in OpenGL is a fairly straightforward concept. Every texture is nothing but an image of some sort. Texture mapping is basically a原创 2008-11-05 22:44:00 · 757 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 11 Blending, Antialiasing and Fog
Blending and TransparencyBlending in OpenGL provides pixel-level control of RGBA color storage in the color buffer. To enable blending we must first call glEnable(GL_BLEND). We have to set up th原创 2008-11-06 11:44:00 · 643 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 12 Creating and Using Display Lists
本文对第11篇文章进行修改,使用显示列表来存储渲染命令。显示列表OpenGL provides a facility to create a preprocessed set of OpenGL commands called a display list. Creating a display list is a straight forward process.原创 2008-11-06 16:44:00 · 544 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 13 Creating 2D and 3D Text
wglUseFontBitmaps函数The wglUseFontBitmaps() function creates a set of bitmap display lists based on the glyphs in the currently selected font in the current DC for use in the current OpenGL RC. I原创 2008-11-06 16:44:00 · 833 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 15 Selection
SelectionSelection is a powerful feature of OpenGL that allows you click at some position of the OpenGL window using the mouse and determine which of your objects lie beneath it. The act of sele原创 2008-11-07 14:44:00 · 611 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 17 Shadows
ShadowsConceptually drawing a shadow is quite simple. A shadow is produced when an object keeps light from a source from striking some object or surface behind the object, casting原创 2008-11-07 15:43:00 · 773 阅读 · 0 评论 -
《基于MFC的OpenGL编程》Part 19 Creating a Virtual Reality Walkthrough Application
本文是整个系列文章的最后一篇,将创建一个完整的虚拟office应用程序(如图所示)来做为ending.1,在CCY457OpenGLView类中加入下述变量,用来保存office内各个物体的显示列表Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHigh原创 2008-11-07 16:43:00 · 665 阅读 · 0 评论 -
(转)关于计算机图形学的学习
1. 引言什么是计算机图形学? 本文尽量避免给它做严格的定义,但是通常来说,计算机图形学是数字图象处理的逆过程,这只是一个不确切的定义,后面我们会看到,实际上,计算机图形学、数字图象处理和计算机视觉在很多地方的区别不是非常清晰的,很多概念是相通的。计算机图形学是用计算机来画东西的学科,数字图象处理是把外界获得的图象用计算机进行处理的学科。在法国,图形图象是一门课程。如何学习计算机图形学呢原创 2007-04-11 09:58:00 · 978 阅读 · 0 评论 -
[转]数学在计算机图形学中的应用
Mathematics for Computer Graphics数学在计算机图形学中的应用Greg Turk, August 1997 “学习计算机图形学需要多少的数学?”这是初学者最经常问的问题。答案取决于你想在计算机图形学领域钻研多深。如果仅仅使用周围唾手可得的图形软件,你不需要知道多少数学知识。如果想学习计算机图形学的入门知识,我建议你读一读下面所写的前两章(代数,三角学和原创 2007-04-15 08:58:00 · 1722 阅读 · 0 评论 -
画图板---画多边形代码
源代码下载 多边形也就是由一些连续的直线组成的,所以绘图的代码还是前面的画直线的那两种算法,只不过在鼠标移动的过程中要特别注意记录终点的位置而已,代码中还是存在着bug,画多边形的时候出现了黄色的阴影线,真是奇怪的问题。为了判别是否是多边形的第一条边,加入了一个新变量:bool m_bIsFirstDone;//是否第一条边原创 2007-07-29 14:56:00 · 1503 阅读 · 0 评论 -
一些课后思考
1,glTranslatef(-1.5f,0.0f,-6.0f);这里是被观察的物体在移动,还是视点的位置移动呢我的理解是后者(就好像是照相机在移动位置来捕捉画面那样),默认的物体位置是屏幕中心,向左移动视图并将视图推远以便被观察的物体能进入,试着调整Z坐标的值,可以看到Z越往里面去,物体就越小,越往外面来,物体越大,这和照相机调整焦距类似。2.使用Flat color原创 2007-07-29 15:56:00 · 649 阅读 · 0 评论 -
MFC中OpenGL旋转的问题
要求用户不干涉的情况下让物体自由旋转,这如果用win32的sdk直接来实现的话,就像Nehe的教程上那样是比较容易做的,可以在空闲事件的情况下调用绘图部分代码;Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> if原创 2007-07-29 20:56:00 · 1238 阅读 · 0 评论 -
再读OpenGL红宝书(1-8章)【续】
26)光照模型有4部分:全局环境光,近视点或远视点,双面光照,镜面反射颜色是否和环境颜色,散射颜色分开。要指定全局环境光,可以如下:GLfloatambient[] = {0.3,0.3,0.3,1.0};glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambient);顶点的镜面反射亮度取决于该点的法线,顶点相对于光源的方向以及顶点原创 2007-09-19 21:55:00 · 989 阅读 · 0 评论 -
Sierpinski Gasket分形图的绘制
/**//* two-dimensional Sierpinski gasket *//**//* generated using randomly selected vertices *//**//* and bisection */#include GL/glut.h>void myinit(){/**//原创 2007-09-25 17:54:00 · 1338 阅读 · 0 评论