计算机图形学
文章平均质量分 79
请叫我汪海
专注前端开发的iOS程序员,喜欢Debian和Python,以及各种有趣的东西,梦想成为一位独立游戏开发者,做自己喜欢的游戏。
展开
-
[OpenGL]课后案例09:立方体旋转程序
//A.9 立方体旋转程序/* Rotating cube with color interpolation *//* Demonstration of use of homogeneous coordinate transformations and simple data structure for representingcube from Chapter 4 *//* Colo原创 2012-11-13 16:46:16 · 2265 阅读 · 0 评论 -
[OpenGL]使用简单的视角变化实现太阳和地球的转动
#include static int year=0,day=0;void init(void){ glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); //****************************************************************************************原创 2012-12-05 21:01:25 · 2836 阅读 · 1 评论 -
[OpenGL]计算机图形学:明暗处理的基本算法
下面来逐个介绍一下基本要点以便加深对于明暗处理的基本算法。光照方程:1.光的无穷次反射和吸收过程可以用光照方程(rendering equation)描述。一般是无法求解的,即使应用数值方法也是非常复杂的。2.光照方程是全局的,并且包含阴影、对象间的多次反射,以后会在光线跟踪和辐射度方法中详细考虑光照方程。全局效果:局部与全局光照:正确的明暗处理需要原创 2012-12-23 01:31:08 · 12629 阅读 · 0 评论 -
[OpenGL]计算机图形学:直线裁剪算法中Cohen-Sutherland算法和Liang-Barsky算法
今天来系统的学习一下两种直线裁剪的算法。首先先来介绍一下直线裁剪的基本原理:下图所示的为直线与窗口边界之间可能出现的几种关系。可以通过检查直线的两个端点是否在窗口之内确定如何对此直线裁剪。裁剪前:裁减后:在上图中,如果一直线的两个端点均在窗口边界之内(如图1中P5到P6的直线),则此直线应保留。如果一条直线的一个端点在窗口外(如P9)另一个点在窗口内(如原创 2012-12-23 16:27:32 · 33219 阅读 · 5 评论 -
[OpenGL]图形学之旅:纹理贴图三部曲
下面开始介绍一下OpenGL中的纹理贴图,具体分以下三步:0.声明存储贴图的相关数据:#define MAXTEXTURE 1 GLuint texture[MAXTEXTURE]; //定义纹理数组,用于存放后面得到的图像纹理信息1.引入bmp位图:AUX_RGBImageRec *LoadImag原创 2012-12-11 18:53:01 · 7758 阅读 · 5 评论 -
[OpenGL]计算机图形学:二叉空间分割(BSP)树
今天来和大家研究一下BSP树的应用。首先简单介绍一下BSP树的相关内容。BSP (Binary Space Partition)表示二叉空间分割。使用这种方法可以使我们在运行时使用一个预先计算好的树来得到多边形从后向前的列表,它的复杂度为O(n)。它的基本思想是基于这样一个事实:任何平面都可以将空间分割成两个半空间。所有位于这个平面的一侧的点定义了一个半空间,位于另一侧原创 2012-12-24 20:38:25 · 21789 阅读 · 4 评论 -
[Review]基于OpenGL的计算机图形学之期末复习提纲
一、Gobal VS Local Lighting局部光照(Local illumation) 简单说就是只考虑光源到模型表面的照射效果。特点:速度快,真实度欠佳。全局光照(Global illumination) 简单的说就是考虑到环境中所有表面和光源相互作用的照射效果。特点:速度慢,真实度高。相关课件截图:二、Ray TracingA.简介:采用原创 2012-12-17 17:48:09 · 5622 阅读 · 2 评论 -
[OpenGL]计算机图形学:基于Articulated Models的机械手臂实例
在OpenGL中,大多数复杂模型都是通过简单的部件拼接而成。比如一辆汽车由四个轮胎和车身组成,电脑由键盘屏幕和机身组成。下面举得这个栗子,机械手臂,是一个Articulated Model的实例。每一个部分在节点处相连接,可以通过制定各个节点的角度来指定模型的状态。从图中可以看出,它大概是由三个部分组成:底座,下臂,上臂。每一个部件在各自坐标系中的自由度如下:原创 2012-12-27 22:41:05 · 4654 阅读 · 0 评论 -
[OpenGL]课后案例08:选择模式拾取程序
//A.8 选择模式拾取程序/* demonstrates picking used selection mode */#include #include #include void init(){ glClearColor(0.0, 0.0, 0.0, 0.0);}void drawObjects(GLenum mode){if(mode ==原创 2012-11-13 16:45:05 · 1921 阅读 · 0 评论 -
[OpenGL]图形学课程设计:二维卡通人脸交互设计与控制
实验名称:二维卡通人脸交互设计与控制实验要求:根据OpenGL提供的直线,多边形绘制算法,实现基于鼠标交互的卡通人物设计与绘制。使用颜色填充与反走样技术对人脸进行绘制。实现对卡通人脸的交互控制,点击鼠标左键可以对人脸进行拖拽移动。按“↑”按键能够实现卡通人脸绕坐标原点进行旋转。附加要求:选中其中的一个多边形区域,点击鼠标右键,弹出一个菜单,可以对该区域进行不同颜色的选择。实验步骤:原创 2013-10-16 22:29:55 · 7626 阅读 · 2 评论 -
[OpenGL]图形学课程设计:二维射击游戏
实验名称:二维射击游戏实验要求:绘制出子弹模型按左右键可以调整在水平方向的位置窗口中有一蓝色正方形在窗口内移动按空格键进行射击子弹沿y轴方向射出,如击中正方形,则正方形变为红色。实验步骤:方向键移动我军,空格键发射炮弹实验缺陷:未能实现一边移动一边打炮的良好体验实验截图:项目源码(共分为4个头文件和4个源文件):Bullet.h,子弹对象的封装类原创 2013-10-21 17:36:09 · 7711 阅读 · 6 评论 -
[OpenGL]一个简单的地球月亮太阳运转模型
#include #include #include // 太阳、地球和月亮 // 假设每个月都是12天 // 一年12个月,共是360天 static int day = 200; // day的变化:从0到359 double CalFrequency() { static int count; static double save;原创 2012-11-17 23:31:01 · 8665 阅读 · 1 评论 -
[OpenGL]计算机图形学实验01:一个简单的球体
#include #include #include#define PI 3.14void myDisplay2(){ //画两个顶端的圆形区域 glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glBegin(GL_TRIANGLE_FAN); glVertex3d(0.0,0.0,1.0); double c = PI/180; fl原创 2012-11-10 21:56:35 · 6188 阅读 · 6 评论 -
[OpenGL]计算机图形学实验02:多边形世界
/************************************************************************//*Test02: Polygon world/*Author: Wang Haiyang/*Date: 2012/11/20/*Email: wanghaiyang@139.me原创 2012-11-20 00:46:03 · 3213 阅读 · 3 评论 -
[OpenGL]课后案例17:GLSL程序
//A.17 GLSL程序/* display teapot with vertex and fragment shaders *//* sets up elapsed time parameter for use by shaders */#include#include#includeconst float nearVal =1.0f;const float farVa原创 2012-11-13 16:54:07 · 2291 阅读 · 0 评论 -
[OpenGL]课后案例15:Bresenham画线算法
//A.15 Bresenham画线算法#include#include#define BLACK 0void draw_pixel(int ix,int iy,int value){ glBegin(GL_POINTS); glVertex2i(ix,iy); glEnd();}void bres(int x1,int y1,int x2,int y2)原创 2012-11-13 16:52:46 · 3125 阅读 · 0 评论 -
[OpenGL]课后案例02:生成Sierpinski镂垫的递归程序
//A.2 生成Sierpinski镂垫的递归程序/* Recursive subdivision of triangle to form Sierpinski gasket *//* number of recursive steps given on command line */#include #include/* initial triangle */GLfloat v[3原创 2012-11-13 16:40:16 · 2489 阅读 · 0 评论 -
[OpenGL]课后案例14:Mandelbrot集程序
//A.14 Mandelbrot集程序#include#include#include/* default data */#define CENTERX -0.5#define CENTERY 0.5#define HEIGHT 0.5#define WIDTH 0.5#define MAX_ITER 100/* N * M array to be genera原创 2012-11-13 16:52:07 · 1827 阅读 · 1 评论 -
[OpenGL]课后案例19:Bezier曲线程序
//A.19 Bezier曲线程序/* curves.c *//***** Bezier curve drawing program.**** q - Quit the program** c - Clear the screen** e - Erase the curves** b - Draw Bezier curves** */#in原创 2012-11-13 16:54:59 · 2648 阅读 · 0 评论 -
[OpenGL]课后案例01:Sierpinski镂垫程序
//A.1 Sierpinski镂垫程序/* two-dimensional Sierpinski gasket *//* generated using randomly selected vertices *//* and bisection */#include #include /原创 2012-11-13 16:39:10 · 2949 阅读 · 0 评论 -
[OpenGL]课后案例03:三维Sierpinski镂垫的递归程序
//A.3 三维Sierpinski镂垫的递归程序/* Recursive subdivision of a tetrahedron to form 3D Sierpinski gasket *//* number of recursive steps given on command line */#include #include /* initial tetrahedron *原创 2012-11-13 16:41:01 · 3093 阅读 · 0 评论 -
[OpenGL]课后案例12:观察者漫游程序
//A.12 观察者漫游程序/*rotating cube with viewer movement from Chapter 5*//*cube definition and display similar to rotating-cubeprogram*//* We use the Lookat function in the display callback to pointth原创 2012-11-13 16:51:04 · 2463 阅读 · 1 评论 -
[OpenGL]课后案例06:画图程序
//A.6 画图程序/* simple painting program with text, lines, triangles,rectangles,and points */#define NULL 0#define LINE 1#define RECTANGLE 2#define TRIANGLE 3#define POINTS 4#define TEXT 5#incl原创 2012-11-13 16:43:39 · 1627 阅读 · 0 评论 -
[OpenGL]课后案例10:立方体旋转程序
//A.10 利用顶点数组旋转立方体程序/* rotating cube with vertex arrays */#include #include GLfloat vertices[] = {-1.0,-1.0,-1.0,1.0,-1.0,-1.0, 1.0,1.0,-1.0,-1.0,1.0,-1.0,-1.0,-1.0,1.0, 1.0,-1.0,1.0,1.0,原创 2012-11-13 16:49:19 · 2944 阅读 · 0 评论 -
[OpenGL]课后案例13:球体的细分逼近程序
//A.13 球体的细分逼近程序/* Recursive subdivision of tetrahedron (Chapter 6). Three displaymodes: wire frame, constant, and interpolative shading *//* Program also illustrates defining materials and light原创 2012-11-13 16:51:41 · 1727 阅读 · 0 评论 -
[OpenGL]课后案例16:带纹理立方体的旋转程序
//A.16 带纹理立方体的旋转程序#include #include GLfloat planes[]= {-1.0, 0.0, 1.0, 0.0};GLfloat planet[]= {0.0, -1.0, 0.0, 1.0};GLfloat vertices[][3] = {{-1.0,-1.0,-1.0}, {1.0,-1.0,-1.0},{1.0,1.0,-1.0},原创 2012-11-13 16:53:30 · 2734 阅读 · 1 评论 -
[OpenGL]课后案例18:场景图形示例
//A.18 场景图形示例//scene.cc#include "Scene.h"#define BaseRadius 0.2#define Radius 0.08#define BaseLen 1#define UpLen 0.6#define LowLen 0.6#define EyeRadius 0.04#define ChairLegLen 0.55int main(原创 2012-11-13 16:54:32 · 2041 阅读 · 0 评论 -
[OpenGL]课后案例07:使用双缓存的程序
//A.7 使用双缓存的程序/** double.c* This program demonstrates double buffering for* flicker-free animation. The left and middle mouse* buttons start and stop the spinning motion of the square.*/#原创 2012-11-13 16:44:22 · 1369 阅读 · 0 评论 -
[OpenGL]课后案例11:用虚拟跟踪球实现立方体旋转程序
//A.11 用虚拟跟踪球实现立方体旋转程序/* Rotating cube demo with trackball */#include #include #include#define bool int#define false 0#define true 1#define M_PI 3.14int winWidth, winHeight;float angle =原创 2012-11-13 16:50:02 · 4113 阅读 · 0 评论 -
[OpenGL]课后案例04:Marching-Square程序
//A.4 Marching-Square程序/* generates contours using marching squares *//* region size */#define X_MAX 1.0#define Y_MAX 1.0#define X_MIN -1.0#define Y_MIN -1.0/* number of cells */#define原创 2012-11-13 16:42:00 · 2526 阅读 · 0 评论 -
[OpenGL]课后案例05:生成正方形的程序
//A.5 生成正方形的程序/* This program illustrates the use of the GLUT library forinterfacing with a Window System *//* The program opens a window, clears it to black,then draws a box at the location of t原创 2012-11-13 16:42:52 · 1574 阅读 · 0 评论 -
[OpenGL]利用地球绕日旋转做的简单的光照效果
#include #define WIDTH 400 #define HEIGHT 400 static GLfloat angle = 0.0f; void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 创建透视效果视图 glMatrixMode(GL_PROJEC原创 2012-11-17 23:32:58 · 3286 阅读 · 0 评论