91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 122KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-07
  • 語言: 其他
  • 標簽: Ray-casting??

資源簡介

本程序實現了體繪制中的光線投射算法,核心代碼純C,只在顯示的時候使用了OpenGL。

資源截圖

代碼片段和文件信息

#include
#include
#include
#include?
#define?EPSILON?0.000001
#define?WIDTH?400
#define?HEIGTH?500
float?Image[WIDTH*HEIGTH*4];

void?GenerateVolume(int?*Dataint*?Dim);//生成體數據
void?GenCube(int?xint?yint?zint?sideint?density?int?*Dataint?*Dim);//生成正方體數據
void?GenSphere(int?xint?yint?zint?radiusint?densityint?*Dataint?*Dim);//生成球體數據
void?Classify(float*?CDataint?*Dataint?*Dim);//數據分類
void?RotationMatrix(float?*Rfloat?*eyefloat?*centerfloat?*up);//求取圖像空間到物體空間變換的旋轉矩陣
void?Composite(float?*rgbaint?x0int?y0float?*CDataint?*Dimfloat?*Rfloat?*T);//合成像素顏色值
bool?Intersection(float?*startpos?float?*pos?float?*dirint?*Dim);//求光線與包圍盒交點坐標
void?TrInterpolation(float?*rgbafloat?*posfloat?*CDataint?*Dim);//三線性插值
bool?CheckinBox(float?*pointint?*Dim);//判斷點是否在包圍盒內
void?MatrixmulVec(float?*cfloat?*afloat?*b);//矩陣向量乘積
void?CrossProd(float?*cfloat?*afloat?*b);//向量叉乘
void?Normalize(float?*normfloat?*a);//向量歸一化
void?Mydisplay();//顯示圖像

int?main(int?argcchar?**argv)
{
int?Dim[3]={200200200};//體數據大小
int?*Data=(int?*)malloc(sizeof(int)*Dim[0]*Dim[1]*Dim[2]);
float?*CData=(float*)malloc(sizeof(float)*Dim[0]*Dim[1]*Dim[2]*4);
float?R[9];//旋轉矩陣
float?T[3]={00450};//平移向量(要根據R調整,以保證獲得體數據全貌)
float?eye[3]={0.50.51};//視點位置
float?center[3]={000};//物體參考點位置
float?up[3]={010};//相機朝上的方向
RotationMatrix(Reyecenterup);//獲得旋轉矩陣
GenerateVolume(DataDim);//生成原始體數據
Classify(CDataDataDim);//對體數據分類
float?*LinePS=Image;
for(int?j=0;j {
for(int?i=0;i {
Composite(LinePSijCDataDimRT);
LinePS+=4;
}
}
free(Data);
free(CData);
//使用OpenGL顯示此二維圖像
glutInit(&argcargv);
glutInitDisplayMode(GLUT_SINGLE?|?GLUT_RGBA);
glutInitWindowSize(500500);
glutInitWindowPosition(200200);
glutCreateWindow(“Ray-Casting“);
glClearColor?(1111);//背景設為白色
glutDisplayFunc(Mydisplay);//顯示圖像
glutMainLoop();
}

//生成體數據
//********************************************************************//
//生成一個大正方體,內部包含一個球體,球體中間又包含一個小正方體
//Data:體積數據
//Dim:體數據大小
//********************************************************************//
void?GenerateVolume(int?*Dataint?*Dim)
{
GenCube(000200100DataDim);//大正方體
GenSphere(10010010080200DataDim);//球體
GenCube(70707060300DataDim);//小正方體
}

//生成正方體數據
//********************************************************************//
//xyz:正方體左下角坐標
//side:正方體邊長
//density:正方體對應的標量值
//Data:體積數據
//Dim:體數據大小
//********************************************************************//
void?GenCube(int?xint?yint?zint?sideint?density?int?*Dataint?*Dim)
{
int?max_x=x+sidemax_y=y+sidemax_z=z+side;
int?Dimxy=Dim[0]*Dim[1];
for(int?k=z;k {
for(int?j=y;j {
for(int?i=x;i {
Data[k*Dimxy+j*Dim[0]+i]=density;
}
}
}
}

//生成球體數據
//***********************************************************

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????40448??2016-01-29?19:50??RayCasting\Debug\RayCasting.exe

?????文件?????343796??2016-01-29?19:50??RayCasting\Debug\RayCasting.ilk

?????文件?????396288??2016-01-29?19:50??RayCasting\Debug\RayCasting.pdb

?????文件??????12802??2016-01-29?19:50??RayCasting\RayCasting\main.cpp

?????文件???????3920??2016-01-29?19:50??RayCasting\RayCasting\RayCasting.vcxproj

?????文件????????942??2016-01-29?19:50??RayCasting\RayCasting\RayCasting.vcxproj.filters

?????文件????????143??2016-01-29?19:47??RayCasting\RayCasting\RayCasting.vcxproj.user

?????文件????????897??2016-01-29?19:47??RayCasting\RayCasting.sln

????..A..H.?????11264??2016-01-29?19:50??RayCasting\RayCasting.suo

?????目錄??????????0??2016-01-29?19:50??RayCasting\Debug

?????目錄??????????0??2016-01-29?19:51??RayCasting\RayCasting

?????目錄??????????0??2016-01-29?19:51??RayCasting

-----------?---------??----------?-----??----

???????????????810500????????????????????12


評論

共有 條評論