- 博客(11)
- 资源 (10)
- 收藏
- 关注
原创 #ifndef 头文件卫士 只防止一个.cpp里的重定义(因为#define只作用于一个.cpp),而不是多个.cpp
#ifndef 头文件卫士是为了保证类的头文件在一个.cpp文件中被多次引用后会不会出现重复定义的问题,注意,只是防止在一个.cpp文件中被多次引用.#ifndef ELEMTYPE_H#define ELEMTYPE_H的意思是,如果前面没有定义ELEMTYPE_H,那么现在定义ELEMTYPE_H它不需要有值,只是表明是否被定义过,它是为了防止头文件的重复定义我举个简单的例子帮助你理解:你在a.h里定义了一个类a:class a{}然后在b.h里定义了一个类b,而且引用了a.h:#include "a.
2010-11-30 16:23:00 6917
原创 VS2008+ WINDOWS SDK v7.0+OSG+ 多点触摸 multi-touch
<br />想在WIN7系统下用OSG开发一个多点触摸系统.OSG无VS2010的版本,其实也可以自己编译,但要花很长时间,所以干脆用VS2008,但因为多点触摸的库函数等是在WINDOW SKD v7.0下的,所以要下载SKD v7.0的安装文件(注意不能是v6.0或v7.1),下载地址如下(GRMSDK_EN_DVD.iso 1480.6MB ): http://www.microsoft.com/downloads/en/details.aspx?FamilyID=71deb800-c591-4f
2010-11-30 10:08:00 3773
原创 类似孔明棋,寻找棋局中到达目标点的最短路径(深搜和广搜)
<br />主题内容:有个游戏玩法很类似孔明棋.<br /><br />其游戏的原始规则如下:<br /><br />原始棋盘为这样:<br />假设0为空格 1为棋子<br /><br /><br />0000000<br />0000000<br />0000000<br />0000000<br />1111111<br />1111111<br />1111111<br />1111111<br /><br />1.棋子的移动必须经由跳过其隔壁(可以是水平或是垂直,但不能走斜角)的一颗棋到空格<br
2010-11-27 12:08:00 3966
原创 球光照模型
先根据经纬度计算出球面上各点,再把球分成很多小三角形,其中两极除外的四边形也分成上下二个三角形,画三角形(设为P0P1P2)时,每个点计算该面本身(pl),下面(Pdown),右面(Pright),右下面(Pdownright),求光照时,根据每个点到光源位置的经衰减后得到光线颜色(f[i]=1.0/(c0+c1*dist[i]+c2*dist[i]*dist[i])),再分别计算环境光,漫反射光,镜面反射光,加点该点的颜色上(点的颜色是该点右下面的颜色,计算时也要检测光源是否能够照到该点上,如果光照不到点
2010-11-08 17:28:00 1610
原创 立方体的纹理映射(黑白色交替)
1.使用透视投影,即有(phi,theta,R),2.在一个平面(P0,P1,P2,P3)(该平面为空间任一平面,可能是斜的)上,以某点为XY坐标系的原心(如P3),获取纹理坐标(u,v)上的点的实际坐标Pm,再将其投影(Project())到二维显示器上,并设置点颜色(SetPixel())为黑色或白色.其中计算(u,v)上的点的实际坐标Pm方法如下(其中P0P1P2P3是正方形,P3=P2-P1+P0,Pm= P3+u*P2P1+u*P0P1=(P1-P0)*u+(P1-P2)*v+P2-P1+P0):
2010-11-08 16:55:00 2189
原创 立方体明暗处理(即立方体隐面算法加上颜色)
算法是在隐面的基础上,加上了颜色双线性插值.{1}隐面:使用透视投影,即有(phi,theta,R),再用,即如果视向量S(视点E与平面上任意一点组成的向量P1:P1E)与法向量N(可由面上三个点P1P2P3组成,P1P2*P2P3)求数量积S.N >= 0,则绘制该面;否则表示人看不到该面,故要隐藏该面.(2)颜色插值类似于Z-Buffer隐面算法,对每个面,每条扫描线,每次找2个点,设置像素颜色为双线性插值颜色.Is=Interpolation(CurrentB->ScanLine,HeadE->y1,
2010-11-07 17:16:00 2073
原创 立方体画家消隐算法与Z-Buffer消隐算法 比较
立方体画家消隐算法与Z-Buffer消隐算法在别的方面有所类似,只是算法核心思想不同: 一.立方体Z-Buffer消隐是对于某一个像素点,不必对在靠近或远离视点的面进行排序,只需在遍历各面后找出该像素的深度最大的点(Z最大,即离视点最近)(先找深度大的点setPixel(),如果以后还有深度更大的,则通过设置新的颜色setPixel()来覆盖以前的点,其中要注意以yi为扫描线时,扫描线可能不与屏幕平行,可能是倾斜着的,就像把opengl的X轴绕Y轴旋转一个角度,如向量(1,-1,0),此次每次随x增大,z也
2010-11-05 16:47:00 2614
原创 立方体Z-Buffer消隐算法
Z-Buffer消隐算法:主要函数:void ReadPoint();//读入顶点表函数,此处为立方体的8个顶点m_point[8] void ReadColor();//读入颜色函数,即立方体六个面的颜色 void ReadFace();//读入面表函数,即设置面上4个点的索引值 void PolygonFill(CDC*);//填充多边形函数 void CreatBucket();//建立桶结点函数 void Et();//构造边表函数 void AddAet(Edg
2010-11-04 09:45:00 12124 4
原创 多边形有效边表填充算法
<br />绘制多边形时用桶结构,其实类似于图里面的邻接表,从上到下是桶(bucket),右边链接的指针是边(edge).<br />class Bucket //桶类<br />{<br />public:<br /> Bucket();<br /> virtual ~Bucket();<br /> int ScanLine;<br /> AET *p;//桶上的边表指针<br /> Bucket *next;<br />};<br />class Edge //边类<b
2010-11-03 22:18:00 17126 4
原创 三视图
<br />三维坐标点投影到二维屏幕上的点时:<br />x1= y- x/<br />y1= -z+ x/<br />要计算在屏幕上的投影值,即相当于下图中计算点在YZ上的坐标值,其中,X与Y,Z轴夹角均为135度,PP1=z.故可计算二维坐标,要记住屏幕窗口的原点在左上角,X往右递增,Y往下递增.<br /><br />代码如下(计算机图形学实例43(Visual C++版) 孔令德): <br />void CTestView::Transform3DTo2D(const double P3D[7][
2010-11-02 10:35:00 1957
原创 透视图
透视图三维投影代码如下:void CTestView::Project(int x,int y,int z)//透视变换{ double x0,y0,z0;//观察坐标系三维坐标 x0=k[1]*x-k[3]*y; y0=-k[7]*x-k[8]*y+k[2]*z; z0=-k[5]*x-k[6]*y-k[4]*z+R; x2d=D*x0/z0;y2d=D*y0/z0;//屏幕坐标系二维坐标}void CTestView::InitParameter()//初始化参数{
2010-11-01 19:06:00 1009
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人