objective c isgl3d 反射線拾取

2021-06-07 13:06:53 字數 1241 閱讀 4661

//-(cgpoint) getoglpos:(cgpoint)winpos //

別人原始碼,摘來分享,哈哈哈

cgpoint startlocation;

-(void ) touchesbegan:(nsset *)touches withevent:(uievent *)event

float pv[16];

int vp[4];

vp[0] = viewport.origin.x;

vp[1] = viewport.origin.y;

vp[2] = viewport.size.width;

vp[3] = viewport.size.height;

float result[3];

//gives us camera position (near plan)

glhunprojectf(startlocation.x,startlocation.y, 0, mov, pv, vp, result);

fpoint3 start;

start.x = result[0];

start.y = result[1];

start.z = result[2];

//far plane

glhunprojectf(startlocation.x,startlocation.y, 1, mov, pv, vp, result);

fpoint3 end;

end.x = result[0];

end.y = result[1];

end.z = result[2];

//射線求交點(與地面(x, y, 0))

getcrosspoint(start, end,wordstart);

//。。。。

wordend.x=wordstart.x;

wordend.y=wordstart.y;

wordend.z=wordstart.z;    }

int glhunprojectf(float winx,float winy,float winz,float *modelview, float *projection,int *viewport, float *objectcoordinate)

//用來求取直線和地圖平面的交點

bool getcrosspoint(fpoint3 startpoint, fpoint3 endpoint,fpoint3 &crosspoint )

關於 0x3f3f3f3f 的問題

0x3f3f3f3f是乙個很有用的數值,它是滿足以下兩個條件的最大整數。1 整數的兩倍不超過 0x7f7f7f7f,即int能表示的最大正整數。2 整數的每8位 每個位元組 都是相同的。我們在程式設計中經常需要使用 memset a,val,sizeof a 初始化乙個陣列a,該語句把數值 val ...

0x3f3f3f3f(無窮大數)

一般定義無窮大數都是inf 99999999,或者0x7f ff ff ff,但是有的時候inf過大,雖然保證了沒有數超過它,但是在需要加上乙個數的時候,inf a可能會導致溢位,最終變成乙個負數。而0x3f3f3f3f的數量級也1e9的,一般題不會給超過1e9的數 在把它當成無窮大的時候,兩個0x...

Python3物件導向 3 異常(3)異常作用

當丟擲異常時,看起來好像立即停止了程式的執行。丟擲異常之後的所有 都不會執行,除非處理了這一異常,程式將會退出並給出錯誤資訊。def no return print i am about to raise an exception raise exception this is always rai...