图形学
文章平均质量分 61
谛听-
线上幽灵
展开
-
Bresenham算法画直线
推导过程:http://blog.sina.com.cn/s/blog_73428e9a01016gnp.html本程序作了进一步的简化void Bresenham_line(CDC *pDC, int x0, int y0, int x1, int y1, long color){ int dx = abs(x1 - x0); int dy = abs(y1 - y0); int原创 2016-11-22 18:11:55 · 10066 阅读 · 3 评论 -
Direct3D---三维世界中摄像机的构建
//=============================================================================// Name: CameraClass.cpp// Des: 一个封装了实现虚拟摄像机的类的源文件// 2013年 3月10日 Create by 浅墨 //====================================转载 2017-02-09 20:34:26 · 967 阅读 · 0 评论 -
OpenGL---箱子沿斜面下滑
假设箱子只受重力。#include <windows.h> #include <gl/Gl.h>#include <gl/Glu.h>#include <gl/glut.h>#include "math.h"#include "vector2.h"#pragma comment(lib, "glut.lib")const int windowWidth = 800;const int w原创 2017-02-23 18:22:44 · 817 阅读 · 0 评论 -
OpenGL---在平面上贴纹理
bmp.hclass BMP{private: unsigned char * pBitmapData; //纹理对象public: int nRows, nCols; //bmp图像的尺寸 unsigned int texture_id; //纹理ID BMP(){};原创 2017-03-03 09:14:03 · 1928 阅读 · 0 评论 -
OpenGL---加载obj模型
obj文件格式介绍:http://www.cnblogs.com/youthlion/archive/2013/01/21/2870451.htmlmesh.h#pragma once#include "vector"#include "iostream"#include "string"#include "fstream"#include "sstream"#include "algor原创 2017-03-04 16:22:04 · 3431 阅读 · 4 评论 -
OpenGL---内插动画
原理:《逐梦旅程:windows游戏编程之从零开始》第21章 #include <windows.h> #include <gl/Gl.h>#include <gl/Glu.h>#include <gl/glut.h>#include "iostream"using namespace std;#pragma comment(lib, "glut.lib")const原创 2017-02-23 21:44:58 · 1064 阅读 · 0 评论 -
OpenGL---三维世界中摄像机的构建
utils.h#pragma once#include "iostream"#include "math.h"using namespace std;class Vector3;Vector3 operator - (const Vector3 &v1, const Vector3 &v2);Vector3 operator * (const Vector3 &v, const float原创 2017-02-13 00:51:11 · 716 阅读 · 0 评论 -
OpenGL---二维光线追踪
代码、原理:计算机图形学(OpenGL)第三版 第4章 我在其中加上了注释流程需要用户从文件中读取多边形数据1、由用户画出第一条射线,需调用函数raytrace2d_mouse,raytrace2d_motion。2、函数raytrace2d_keyboard中,当按下空格键时,针对每个多边形调用函数timeToHitPoly,计算射线击中该多边形的时间,取最小的那个时间,根据该时间得到射线的可见原创 2017-02-25 13:33:54 · 3262 阅读 · 4 评论 -
DDA遍历均匀栅格
void DDA_line(CDC *pDC, int x0, int y0, int x1, int y1, long color) { float kx = x1-x0, ky = y1-y0; float dx = abs(kx); // 直线x方向分量 float dy = abs(ky); // 直线y方向分量 float x = x0 +原创 2017-08-08 16:29:10 · 485 阅读 · 0 评论 -
判断两线段相交,并求交点
原文 http://blog.csdn.net/rickliuxiao/article/details/6259322#include "math.h"#include "stdio.h"double E = 0.0001;struct Point { double x, y; }; double min(double x1, double x2){ retu转载 2017-11-20 10:55:17 · 3089 阅读 · 0 评论 -
规则曲线
直线 void line(CDC *pdc){ int nPoints = 400; //直线上的点数 float delta = 1.0 / nPoints; float x1 = 100, y1 = 100, x2 = 200, y2 = 200; //起点,终点 for(float t=0; t<=1; t+=delta) {原创 2017-01-21 19:34:44 · 686 阅读 · 0 评论 -
Coons曲面
原理: http://wenku.baidu.com/link?url=w2flm9and7b1cg_gPOHAi8N-TfFxeje0FVyHab4PsCpegJ9SapcDTvb22sRiBlBKz8tk96Ha_P9-XO0dO3sRe7gIRdPDtG2HV-P64xdpMyS #define nPoints 30 //每段曲线的点数//矩阵乘法void mul(float *c,原创 2017-01-21 11:13:17 · 3937 阅读 · 1 评论 -
中点画圆
推导过程:http://blog.csdn.net/xiaowei_cqu/article/details/7909607 void WholeCircle(CDC *pDC, int CentX, int CentY, int x, int y, long color){ pDC->SetPixel(CentX + x, CentY + y, color); pDC->SetPi原创 2016-11-24 14:34:31 · 611 阅读 · 0 评论 -
中点画椭圆
void drawPix(CDC *pDC, int CentX, int CentY, int x, int y, long color){ pDC->SetPixel(CentX+x, CentY+y, color); pDC->SetPixel(CentX+x, CentY-y, color); pDC->SetPixel(CentX-x, CentY+y, color); pDC原创 2016-11-26 17:43:46 · 688 阅读 · 0 评论 -
扫描线填充面域图形
原理:马华东老师的课件 代码:Visual C++空间图形可视化算法原理与实践适合:以顶点定义的多边形 推导: 建立有序边表 //边节点struct edge{ int y_max; //某条边的最大y值 double x; //某条边最小y值处的x坐标 double deltx; //x的增量 edge *next;};edge *原创 2017-01-13 14:54:56 · 536 阅读 · 0 评论 -
二维图形变换
原理:马华东老师的课件class Matrix2D{public: float m[3][3]; //上面2*2部分包含线性变换,最后一行为平移变换 CPoint cal(CPoint &p); //计算变换后的坐标 void translation(float dx, float dy); //平移 void scaling(float sx, floa原创 2017-01-13 22:00:07 · 698 阅读 · 0 评论 -
三维图形的几何变换
原理:马华东老师的课件 代码:参考《计算机图形学原理及算法教程(Visual C++版)》—和青芳 typedef double array2d[4][4];typedef double array[9];class Matrix3D{public: /* 变换矩阵 T[0][0]~T[2][2] 对图形进行比例、旋转、对称等变换 T[3][i]原创 2017-01-15 12:13:43 · 3677 阅读 · 2 评论 -
二维图形裁剪
原理:马华东老师的课件#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8#define PT_LINE_NUM 5#define PT_POLY_NUM 6int XL, XR, YT, YB; //窗口区域CPoint pt_line[PT_LINE_NUM][2]; //要裁剪的直线CPoint pt_po原创 2017-01-17 09:50:09 · 1558 阅读 · 0 评论 -
拖拽图形
原理:Visual C++空间图形可视化算法原理与实践图形拖拽思路拖拽常用于在图形的定位和组合是需要交互式移动的情况。其思路就是确定图形的新旧定位点,以此来绘制拖拽路径(类似于橡皮筋的实现),鼠标移动过程中不断擦除旧图形显示新图形。图形拖拽步骤1、拖拽的前提是b_select为真,即图形被选中。确定图形的定位点newpt1,并根据鼠标移动的距离计算新的定位点newpt2,以便于绘制拖拽路径. 2、原创 2017-01-17 14:35:21 · 1454 阅读 · 0 评论 -
Bezier、B样条曲线曲面
这里只列出核心,具体原理参看底部参考文献Bezier曲线 三次Bezier曲线 第一个控制点和最后一个控制点在曲线上: 两端点的切矢方向与控制多边形(特征多边形)的第一条和最后一条边一致: Bezier曲线的递推性—de Casteljau算法 de Casteljau算法绘制Bezier曲线:#define nctlPoints 5 //控制点数#d原创 2017-01-19 22:09:43 · 28072 阅读 · 8 评论 -
hermite曲线
原理: http://www.cnblogs.com/jqm304775992/p/5044728.html//矩阵乘法void mul(float *c, float *a, float *b, int row, int rc, int col){ for(int i=0; i<row; i++) { for(int j=0; j<col; j++)原创 2017-01-20 12:44:06 · 1275 阅读 · 0 评论 -
beam 追踪
核心:// 改自:http://blog.kaistale.com/?cat=12#include &amp;amp;lt;vector&amp;amp;gt;#include &amp;amp;lt;math.h&amp;amp;gt;using namespace std;enum isOnline{OnLine1, OnLine2, OnRay1, OnRay2};class Point{p原创 2018-09-04 15:29:25 · 402 阅读 · 0 评论