XNA入門(三)燈光和材質

2021-05-28 12:19:15 字數 2272 閱讀 5124

光源:環境光、定向光源(例如無限遠處的太陽)、點光源(燈泡)、聚光燈(手電)

private void setuplights()//設定定向光源       

private void setuplights()//點光源

{device.material = mtrl;

device.lights[0].type = lighttype.point;

device.lights[0].diffuse = system.drawing.color.white;

device.lights[0].range = 20.0f;

device.lights[0].position = new vector3(0, 0, -4); //設定燈光位置,注意光線的方向

device.lights[0].attenuation1 = 0.2f;//衰減係數:1/(0.2d)

device.lights[0].enabled = true;    //使設定有效

device.lights[0].update();     //更新燈光設定,建立第一盞燈光

device.renderstate.ambient = system.drawing.color.fromargb(0x808080);

private void setuplights()//聚光燈

{device.material = mtrl;

device.lights[0].type = lighttype.spot;

device.lights[0].diffuse = system.drawing.color.white;

device.lights[0].range = 20.0f;

device.lights[0].position = new vector3(0, 4, -6);   //設定燈光位置

device.lights[0].direction = new vector3(0, -4, 4);   //設定燈光方向

device.lights[0].innerconeangle = 0.2f;  //值較大時,例如為0.5,地板變為黃色

device.lights[0].outerconeangle = 0.5f;  //值較大時,例如為1.0,地板變為黃色

device.lights[0].falloff = 1.0f;

device.lights[0].attenuation0 = 1.0f;

device.lights[0].enabled = true;    //使設定有效

device.lights[0].update();     //更新燈光設定,建立第一盞燈光

device.renderstate.ambient = system.drawing.color.fromargb(0x808080);

鏡面反射:(1) 材質設定 mtrl.specular = system.drawing.color.white;

mtrl.specularsharpness = 10.0f;//反射銳度,值越小,反射光越分散

(2) 開啟材質鏡面高光功能:  device.renderstate.specularenable = true;        //開啟反射         

材質: material mtrl;

mtrl = new material();

mtrl.diffuse = system.drawing.color.yellow;  //物體的顏色

mtrl.ambient = system.drawing.color.red;   //反射環境光的顏色

mtrl.emissive = system.drawing.color.lightpink;//自發光

材質顏色透明:

mtr = new material();//透明正方形使用的材質

mtr.ambient = color.fromargb(127, 255, 0, 0);//注意aphla的值為127

mtr.diffuse = color.fromargb(127, 255, 0, 0);

device.renderstate.diffusematerialsource = colorsource.material;

device.renderstate.alphablendenable = true;

device.renderstate.sourceblend = blend.sourcecolor;

device.renderstate.destinationblend = blend.invsourcealpha;

XNA入門(四)紋理

1 紋理重複性控制 void vertexbuffer1 created object sender,eventargs e 2 紋理光照控制。public void render 渲染方法,本方法沒有任何渲染 可認為是渲染方法的框架 if device null 如果未建立裝置物件,退出 retu...

XNA入門(二)Mdirectx框架解析

關於程式的基本框架 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using sys...

XNA教程(三) sprite繪製效率

雖然內容有所變動,但我的xna教程還會繼續 本文和部分文字來自 xna diaries 參考了其中兩篇關於sprite alpha blend的文章 spritebatch.begin 通過接受幾個引數,來控制如何渲染 sprite 引數blendmode 表示進行哪種模式的混合。xna只提供了三種...