锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
--test.lua
function printColor()
colour = ColourValue(1, 1, 1, 1);
colour:printColor();
end
Config = 

{
color = ColourValue(1, 1, 1, 1),
count = 5,
fun = printColor
}
class ColourValue

{
public:
ColourValue(float r = 1.0,
float g = 1.0,
float b = 1.0,
float a = 1.0) : mR(r), mB(b), mG(g), mA(a)
{
}
void printColor()
{
cout << mR << ", "
<< mG << ", "
<< mB << ", "
<< mA << ", "
<< endl;
}
protected:
float mR;
float mG;
float mB;
float mA;
};
// 鍙栧緱鍏ㄥ眬琛ㄥ璞°?/span>
luabind::object global = luabind::globals(L);
// 鑾峰彇鑴氭湰涓殑Config琛ㄣ?/span>
luabind::object configTable = global["Config"];
// 璁塊棶Config琛ㄤ腑鐨刢olor銆?/span>
ColourValue color = luabind::object_cast<ColourValue>(configTable["color"]);
// 璁塊棶Config琛ㄤ腑count銆?/span>
int count = luabind::object_cast<int>(configTable["count"]);
// 璁塊棶Config琛ㄤ腑鐨刾rintColor鍑芥暟銆?/span>
luabind::object printColor = configTable["fun"];
printColor(); // 絎竴縐嶈皟鐢ㄦ柟娉曘?/span>
luabind::call_function<void>(printColor); // 絎簩縐嶈皟鐢ㄦ柟娉曘?/span>DirectX涓湁鍥涚鍏夌収妯″瀷錛?/font>
鐜鍏夛細鐜鍏夋病鏈夋柟鍚戝拰浣嶇疆涓婄殑鐗瑰緛錛屽彧鏈変竴涓鑹蹭寒搴﹀鹼紝涓嶄細琛板噺錛屾墍浠ュ湪鎵鏈夋柟鍚戝拰鎵鏈夌墿浣撹〃闈㈡姇灝勭殑鐜鍏夌殑鏁伴噺鏄亽瀹氫笉鍙樼殑銆?/p>
婕弽灝勶細婕弽灝勫湪鐢熸椿涓渶涓烘櫘閬嶏紝澶槼鍏夌殑鐩村皠錛屾棩鍏夌伅鐨勭収灝勯兘鍙互鐢ㄦ極鍙嶅皠鍏夋潵妯℃嫙銆傛極鍙嶅皠鐢卞厜鐨勬柟鍚戝拰鐗╀綋琛ㄩ潰鐨勬硶鍚戦噺鍐沖畾銆傛極鍙嶅皠鍏夌殑絀洪棿浣嶇疆鍜屾柟鍚戝鐗╀綋鐨勭収鏄庢湁寰堝ぇ鐨勫獎鍝嶃?/p>
闀滈潰鍙嶅皠錛氬綋瑙傚療閲戝睘鍒跺搧鍜岀幓鐠冨埗鍝佺殑琛ㄩ潰鏃訛紝鏀瑰彉瑙傚療鐐圭殑浣嶇疆錛屼細鍙戠幇鐗╀綋琛ㄩ潰鐨勪寒搴︿篃浼氬彂鐢熷彉鍖栵紝榪欑鐜拌薄縐頒箣涓洪暅闈㈠弽灝勩?/p>
鑷彂鍏夛細灝辨槸鐗╀綋鑷韓鍙戝厜錛岄氳繃璁劇疆鏉愯川鐨勮嚜鍙戝厜灞炴?font face="Times New Roman">Emissive錛堥鑹插拰閫忔槑搴︼級鏉ュ疄鐜般傝嚜鍙戝厜鍙互褰卞搷涓涓璞$殑棰滆壊銆傚彲浠ヤ嬌鐢ㄦ潗璐ㄧ殑鑷彂鍏夋潵瀹炵幇鍙戝厜鐨勫璞★紝鑰屼笉鐢ㄥ湪鍦烘櫙涓坊鍔犵伅鍏夛紝鍑忓皯浜嗚綆楅噺銆?/font>
鐢ㄨ嚜鍙戝厜灞炴у垱寤虹殑鏉愯川騫朵笉鍙戝皠鑳借鍦烘櫙涓叾浠栫墿浣撳弽灝勭殑鍏夛紝涔熷氨鏄鑷彂鍏変笉鍙備笌鍏夌収璁$畻銆?/p>
鏈変笁縐嶅厜婧?/p>
鐐瑰厜婧愶細鐐瑰厜婧愭湁棰滆壊鍜屼綅緗紝浣嗘槸娌℃湁鏂瑰悜錛屽畠鍚戞墍鏈夋柟鍚戝彂灝勭殑鍏夐兘涓鏍楓傚湪紼嬪簭涓渶瑕佹彁渚涚偣鍏夋簮鐨勯鑹詫紝浣嶇疆錛岃“鍑忕郴鏁扮瓑鍙傛暟銆?/p>
鐢電伅娉℃槸鐐瑰厜婧愮殑涓涓緥瀛愩傝繖縐嶅厜鐨勫己搴︿細闅忕潃璺濈鐗╀綋鐨勮繙榪戣岃“鍑忋?/p>
鏂瑰悜鍏夛細鍙湁鏂瑰悜鍜岄鑹插睘鎬х殑鍏夋簮錛屾病鏈変綅緗紝琛板噺銆傚彲浠ユ兂璞℃垚浠庢棤絀瘋繙澶勫彂鏉ョ殑鍏夛紝渚嬪澶槼鍏夈?/p>
鑱氬厜鐏細鑱氬厜鐏湁棰滆壊錛屼綅緗紝鏂瑰悜錛岀被浼肩幇瀹炰腑鐨勬帰鐓х伅銆傝仛鍏夌伅鍙堜竴涓槑浜殑鍐呮浣撳拰澶т竴鐐圭殑澶栨浣撶粍鎴愩傚厜鐨勫己搴︿粠鍐呮浣撳埌澶栨浣撻愭笎琛板噺錛岃“鍑忕殑瑙勫緥鐢?font face="Times New Roman">Falloff,Theta(鍐呴敟瑙掞級鍜?/font>Phi錛堝閿ヨ錛変笁涓睘鎬у叡鍚屽喅瀹氥?/font>
DirectX涓墿浣撶殑棰滆壊鐢卞厜鐨勯鑹插拰鏉愯川鐨勯鑹插叡鍚屽喅瀹?/font>(鍜岀幇瀹炰笘鐣屾儏鍐典笉鍚岋級銆?/font>
榛樿鎯呭喌涓嬶紝D3D涓殑鐏厜鏄紑鍚殑錛屽氨鏄鍐?
RenderState(D3DRS_LIGHTING, TRUE);
濡傛灉瑕佺鐢ㄧ伅鍏夛紝灝卞皢榪欏彞浠g爜涓殑TRUE鏀逛負FALSE銆?br />

#include "stdafx.h"
#include <iostream>
#include <luabind/luabind.hpp>
void greet()

{
std::cout << "hello world!\n";
}
extern "C" int __declspec(dllexport) init(lua_State* L)

{
using namespace luabind;
open(L);
module(L)
[
def("greet", &greet)
];
return 0;
}
娉ㄦ剰錛屽湪Windows鐜涓媔nit鍑芥暟涔嬪墠鏄鍔燺_declspec(dllexport)鎵嶈兘灝嗗嚱鏁板鍑虹殑錛岃宭uabind鐨勬枃。涓殑鐜鏄痩inux錛岄粯璁や笉鐢ㄥ姞__declspec(dllexport)涔熷彲浠ュ鍑?灝卞洜涓鴻繖涓姌鑵句簡鎴戝崐澶╂墠鎶奾ello word鎴愬姛榪愯)銆?br> 緙栬瘧欏圭洰錛?璁板緱灝唋uabind.lib鍜宭ua51.lib娣誨姞鍒伴摼鎺ラ夐」涓細欏圭洰灞炴?>榪炴帴鍣?>杈撳叆->闄勫姞渚濊禆鏂囦歡錛屽姞鍏uabind.lib鍜宭ua51.lib)銆?br> 灝唄ello world.dll鏀懼埌l(fā)ua51.dll鍜宭ua.exe鎵鍦ㄧ殑鐩綍涓嬨?br> 鎵撳紑lua鍛戒護琛岋紝閿叆:

嫻嬭瘯鎴愬姛錛宔njoy銆?/font>
mSn->translate(mPosition * evt.timeSinceLastFrame, Node::TS_WORLD);
鍒氬紑濮嬪涔燨gre,鍋氫簡涓緢綆鍗曠殑demo,鐢ㄩ敭鐩樼殑涓婁笅宸﹀彸鎺у埗涓涓漢鐗╂ā鍨嬪洓澶勮蛋鍔ㄣ傞昏緫寰堢畝鍗曪紝浣嗘槸瀹炵幇鍒版兂瑕佺殑鏁堟灉鍗磋垂浜嗕竴鐣懆鎶樸?br> 涓寮濮嬬敤涓涓猇ector3 mPosition鍙橀噺淇濆瓨浜虹墿鐨勪綅緗紝鐒跺悗Real mWalkSpeed淇濆瓨浜虹墿鐨勭Щ鍔ㄩ熷害錛屽湪涓婁笅宸﹀彸鐨勬寜閿搷搴斾唬鐮佷腑鍒嗗埆
1 bool DemoFrameListener::keyPressed(const OIS::KeyEvent &arg)
{
3 switch (arg.key)
4
{
5 // 鎸変笅Escape閿紝閫鍑虹▼搴忋?/span>
6 case OIS::KC_ESCAPE:
7 mContinue = false;
8
9 // W銆丼銆丄銆丏鎺у埗浜虹墿琛岃蛋銆?/span>
10 case OIS::KC_UP:
11 case OIS::KC_W:
12 mPosition.z -= mWalkSpeed;
13 mSn->setDirection(Vector3::NEGATIVE_UNIT_Z);
14 // 鍙栧緱妯″瀷鐨?Walk"鍔ㄧ敾闆嗐?/span>
15 mAnimationState = mEntity->getAnimationState("Walk");
16 break;
17 case OIS::KC_S:
18 case OIS::KC_DOWN:
19 mPosition.z += mWalkSpeed;
20 mSn->setDirection(Vector3::UNIT_Z);
21 // 鍙栧緱妯″瀷鐨?Walk"鍔ㄧ敾闆嗐?/span>
22 mAnimationState = mEntity->getAnimationState("Walk");
23 break;
24 case OIS::KC_A:
25 case OIS::KC_LEFT:
26 // 鍙栧緱妯″瀷鐨?Walk"鍔ㄧ敾闆嗐?/span>
27 mAnimationState = mEntity->getAnimationState("Walk");
28 mSn->setDirection(Vector3::UNIT_X);
29 break;
30 case OIS::KC_D:
31 case OIS::KC_RIGHT:
32 // 鍙栧緱妯″瀷鐨?Walk"鍔ㄧ敾闆嗐?/span>
33 mAnimationState = mEntity->getAnimationState("Walk");
34 mSn->setDirection(Vector3::NEGATIVE_UNIT_X);
35 break;
36 }
37
38 return true;
39}
40
mSn->translate(mPosition * evt.timeSinceLastFrame, Node::TS_LOCAL);
mSn->translate(mPosition * evt.timeSinceLastFrame, Node::TS_LOCAL);榪欎釜鍙樻崲鐭╅樀鏄姇褰卞彉鎹㈢殑棰勫彉鎹€?/p>
鍦―irectX涓紝鎶婅鍙g殑楂樹綔涓?D涓栫晫閲岄潰鐨勯暱搴︼細2.0f鏉ヤ嬌鐢ㄧ殑錛屼竴涓鐐硅瀵熶笘鐣岀殑瑙嗛噹鑼冨洿鍦╕杞翠笂鏃犺浠涔堟儏鍐典笅閮芥槸 -1.0f鍒?.0f錛堣繖涓鐐瑰湪鍚庨潰鏉ヨ瘉鏄庯級銆傛妸瑙嗗彛鐨勯珮浣滀負y杞達紝欏剁鍧愭爣涓猴紙x錛?錛夛紝搴曠鍧愭爣涓猴紙x錛?1錛夈?/p>
瑙嗗彛錛氬湪紿椾綋涓樉紺?D鐨勭煩褰㈣寖鍥達紝鍙互閫氳繃D3DDevice鐨凷etViewPort錛堬級鏉ヨ緗ぇ灝忥紝榛樿鐨勫ぇ灝忎負紿椾綋鐨勫ぇ灝忋?/p>
鍙樻崲鐨勮繃紼嬪氨鏄妸鐐圭殑鍚戦噺涔樹互鍙樻崲鐭╅樀錛屽彲浠ュ緱鍒拌繖涓偣鍦ㄦ柊鍧愭爣緋葷殑瀵瑰簲鍚戦噺錛屽湪鎶曞獎鍙樻崲鐭╅樀涓璟杞寸殑鍊艱惤鍦?~1涔嬪唴錛屼篃灝辨槸璇?D涓栫晫閲屾墍鏈夌殑鐐歸兘浼氳鎶曞獎鍒頒互涓婃弿榪扮殑灝忕洅瀛愪腑銆?/p>
鎴戜滑鐢ㄥ嚱鏁癉3DXMatrixPerspectiveFovLH鏉ヨ幏寰楄“鎶曞獎鍙樻崲”鐭╅樀銆?/p>
D3DXMATRIX * D3DXMatrixPerspectiveFovLH(
D3DXMATRIX * pOut ,
FLOAT fovy ,
FLOAT Aspect ,
FLOAT zn ,
FLOAT zf
);
鍏朵腑鍙傛暟fovy涓簓杞翠笂鐨勮瑙掞紝Aspect涓洪珮瀹芥瘮錛寊n涓鴻繎瑁侀潰錛寊f涓鴻繙瑁侀潰銆?/p>
Y杞寸殑瑙嗚錛氬湪DirectX鐨勫府鍔╂枃妗d腑鎻忚堪fovy涓篺iled of view in y direction銆?/p>
楂樺姣旓細涓鑸敤浜庡叏灞忔樉紺猴紝濡傛灉鎴戜滑瑕佽3D涓栫晫鍏呮弧鏁翠釜紿楀彛錛屽氨蹇呴』璁╅珮瀹芥瘮絳変簬紿楀彛鐨勯珮瀹芥瘮錛屼緥濡傝鎴戜滑鐨勭獥鍙f甯告樉紺?#8221;鏍囧噯瑙嗛噹”[2X2 鐨勪竴涓潰,欏剁偣鍧愭爣涓猴紙1錛?錛夛紝錛?1錛?錛夛紝錛?1錛?1錛夛紝錛?錛?1錛塢錛屾垜浠繀欏繪妸紿楀彛鐨勯珮瀹芥瘮璁劇疆鎴?錛?錛岃繖鏍鳳紝鏍囧噯瑙嗛噹灝卞彲浠ュ厖婊℃暣涓獥 鍙o紝鍚﹀垯 浼氬湪宸﹀彸鐣欏嚭絀虹櫧錛岃繖涓┖鐧芥槸鏃犳硶鐢╒IEW錛學ORLD鍙樻崲鎵鑳藉~鍏呯殑錛岀浉褰撲簬word鏂囨。閲囩敤“鏂囨。”瑙嗗浘閲岄潰鐨勪袱杈圭殑鐏拌壊鍖哄煙錛屾槸鏃犳硶緙栬緫鐨勶紝鍦ㄤ竴 鑸殑3D紼嬪簭閲岄潰鏄笉鍏佽鍑虹幇榪欑鎯呭喌鐨勶紝浣嗘槸鎴戜滑鐨勬樉紺哄櫒鐨勯珮瀹芥瘮涓嶆槸1錛?錛岃屼笖澶ч儴鍒嗙殑鐢ㄦ埛涔熶笉涔犳儻鐢?錛?鐨勭獥鍙f潵浣跨敤紼嬪簭錛屾垜浠渶瑕佽皟鏁磋繖涓爣 鍑嗚閲庯紝鏉ラ傚簲鎴戜滑鐨勭獥鍙eぇ灝忥紝Aspect灝辨槸榪欎釜浣滅敤錛屾湁涓鐐歸渶瑕佽鏄庣殑Aspect涓嶇瓑浜?錛屼笉浠h〃鏍囧噯瑙嗛噹灝變笉鏄紙1錛?錛夛紝錛?1錛?錛夛紝 錛?1錛?1錛夛紝錛?錛?1錛夛紝濡傛灉Aspect = 0.5 鏍囧噯瑙嗛噹涔熻繕鏄紙1錛?錛夛紝錛?1錛?錛夛紝錛?1錛?1錛夛紝錛?錛?1錛夛紝鍙笉榪噚杞翠笂鐨勫崟浣嶉暱搴︾殑鍍忕礌鍊?鏄?y杞翠笂鍗曚綅闀垮害鐨勫儚绱犲肩殑2鍊嶃?/p>
瑁侀潰鐨勪綔鐢? 鍦╖杞存柟鍚戜笂錛屼笉鏄劇ずz鍧愭爣灝忎簬zn鐨勬垨鑰呭ぇ浜?zf鐨勭偣銆?/p>
褰揻ovy涓?鐨勬椂鍊欏憿錛岃閲庡氨涓?錛屽氨鏄浠涔堥兘鐪嬩笉鍒幫紝紿楀彛涓樉紺虹殑灝辨槸搴曡壊銆?/p>
褰揻ovy鍙樺ぇ鑷?80°鐨勬椂鍊欏憿錛熻閲庣殑鑼冨洿涓鴻綰垮す瑙掍笂鐨勫瀭鐩翠簬Z杞寸殑涓旇繃鐐癸紙0錛?錛?錛夌殑榪炵嚎銆傚綋瑙嗙嚎澶硅鍙樺ぇ瑙嗛噹鑼冨洿涔熷彉澶э紝澶硅瓚嬭繎浜?80°鐨勬椂鍊欒閲庤寖鍥磋秼榪戜簬鏃犵┓澶э紝瑕佹樉紺虹殑闈㈢浉瀵逛簬瑙嗛噹鑼冨洿灝辨槸0錛屼篃灝辨槸璇寸緝?yōu)畯鍒版渶灝忓氨鏄?.鎵浠ユ垜浠湪璁懼畾fovy鐨勫間負180°鐨勬椂鍊欎篃鏄粈涔堥兘鐪嬩笉瑙侊紝涓哄簳鑹層?/p>
閭eぇ浜?80°鐨勬儏鍐靛憿錛熷湪鎴戜滑鐨勮閲庣悊璁轟笂鏄笉瀛樺湪榪欑鎯呭喌鐨勶紝褰撹瑙掑ぇ浜?80°鏃訛紝瑙嗚浜嶼杞村瀭鐩寸殑榪炵嚎鏄笉浼氳繃鐐癸紙0錛?錛?錛夌殑銆備絾鏄嚱鏁版斁鍦ㄦ垜浠潰鍓嶏紝鎴戜滑鏄彲浠ヨ緭鍏ュぇ浜?80°鐨勬暟鍊鹼紝緇撴灉浼氬浣曞憿錛?/p>
闈炲父紲炲鐨勪簨鎯呭彂鐢熶簡錛屾垜浠殑鍥句互鍘熺偣涓轟腑蹇冩棆杞簡180°錛佽繖鏄棤娉曠敤鎴戜滑鐨勮閲庣悊璁烘潵瑙i噴鐨?鍥犱負180°鐨勮閲庤寖鍥村氨宸茬粡鏄釜鏋侀檺浜嗭紝“瓚呰秺鏋侀檺”鏄彧鑳藉湪騫垮憡涓嚭鐜扮殑璇嶆眹錛堝鏋滆兘瓚呰秺錛岄偅灝變笉鍙瀬闄愪簡錛歅錛夈?/p>
鍦∕SDN鐨勬枃妗d腑鏈夎繖鏍蜂竴涓暟瀛﹀叕寮忥細y-scale = cot錛坒ovy/2錛?/p>
榪欎笅灝辨槑鐧戒簡錛屽綋鎴戜滑杈撳叆澶т簬180°鐨勬椂鍊檆ot鐨勫間負璐熸暟銆傝寈-scale = y-scale/ Aspect銆?
涔熷氨鏄錛屼竴涓?D涓栫晫鐨勭偣錛屽湪瑙嗛噹澶т簬180°鐨勪綔鐢ㄤ笅錛屽畠鐨勬斁澶?緙╁皬鍊嶆暟涓嶅彉錛屼絾鏄渶瑕佸X杞村仛涓嬈″縐板彉鎹紝榪樿瀵筜杞村仛涓嬈″縐板彉鎹€傜浉褰撲簬瀵瑰師鐐瑰仛涓嬈″縐板彉鎹€?/p>
鎷垮埌榪欎釜鍏紡錛屾垜浠氨鍙互瀵瑰墠闈㈢殑鏍囧噯鍋氫竴涓瘉鏄庯細
褰揻ovy涓?0° Aspect = 1鐨勬椂鍊欙紝灝辨槸璇磞-scale = cot錛?5°錛?= 1
x-scale = 1錛岃繖鏃秠鍜寈鐨勭緝鏀炬瘮閮戒負1錛屾病鏈夌緝鏀俱傛垜浠樉紺鴻繖鏍蜂竴涓潰
{-1.0f, -1.0f, 0.0f},
{-1.0f, 1.0f, 0.0f},
{ 1.0f, 1.0f, 0.0f},
{-1.0f, -1.0f, 0.0f},
{ 1.0f, 1.0f, 0.0f},
{ 1.0f,-1.0f, 0.0f}
鎴戜滑浼氬彂鐜版棤璁烘庝箞鏀瑰彉紿楀彛鐨勯珮搴︼紝榪欎釜鐢婚潰鐨刌杞存柟鍚戜笂閮戒細鍏呮弧鏁翠釜瑙嗗彛銆傦紙濡傛灉鎴戜滑鎶婅鍙g殑楂樺害鍜屽搴﹁緗垚涓鏍風殑錛屽湪X杞翠笂涔熶細鍏呮弧鏁翠釜瑙嗗彛錛夋墍浠irectX浼氫互瑙嗗彛鐨勯珮搴︾殑浜屽垎涔嬩竴浣滀負Y杞寸殑鍗曚綅闀垮害銆?/p>
g_pd3dDevice->SetRenderState(D3DRS_LIGHTING,FALSE)
D3DXMATRIX matView;
// Create and set the projection matrix
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4.0f, 1.33333f, 1.0f, 1000.0f);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);
// Create and set the view matrix
D3DXMatrixLookAtLH(&matView, \
&D3DXVECTOR3(0.0f, 0.0f, -500.0f), \
&D3DXVECTOR3(0.0f, 0.0f, 0.0f), \
&D3DXVECTOR3(0.0f, 1.0f, 0.0f));
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);