您的位置:首页 > 其它

XNA入门(四)纹理

2011-09-27 22:44 120 查看
(1)纹理重复性控制

void vertexBuffer1_Created(object sender, EventArgs e)

{

CustomVertex.PositionTextured[] verts =

(CustomVertex.PositionTextured[])vertexBuffer1.Lock(0, 0); //墙壁

verts[0].Position = new Vector3(-2.0f, -2.0f, 2.0f); //顶点0位置

verts[0].Tu = N; //顶点0纹理坐标Tu为N代表X轴方向重复贴图N次

verts[0].Tv = M; //顶点0纹理坐标Tv为M代表X轴方向重复贴图M次

vertexBuffer1.Unlock();

}

(2)纹理光照控制。

public void Render() //渲染方法,本方法没有任何渲染代码,可认为是渲染方法的框架

{

if (device == null) //如果未建立设备对象,退出

return;

if (pause)

return;

device.Clear(ClearFlags.Target | ClearFlags.ZBuffer,Color.LightCoral, 1.0f, 0);

device.BeginScene(); //开始渲染

SetupLights(); //设置灯光

SetupMatrices();

device.SetTexture(0, texture);

device.TextureState[0].ColorOperation = TextureOperation.Modulate;//设置混合模式

device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor;//第一种颜色

device.TextureState[0].ColorArgument2 = TextureArgument.Diffuse;//第二种颜色,这里用散色光

//device.TextureState[0].AlphaOperation = TextureOperation.Disable;

device.SetStreamSource(0, vertexBuffer, 0);

device.VertexFormat = CustomVertex.PositionNormalTextured.Format;

device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);

device.EndScene(); //渲染结束

device.Present(); //更新显示区域,把后备缓存的D图形送到图形卡的显存中显示

}

(3)滤波

public void OnResetDevice(object sender, EventArgs e)

{

Device dev = (Device)sender;

dev.RenderState.CullMode = Cull.None; //取消背面剔除

dev.RenderState.Lighting = false; //取消灯光

SetupMatrices(); //在程序运行期间,Device的3个变换不改变,因此放在此处

device.SamplerState[0].MagFilter = TextureFilter.Linear; //使用线性滤波器

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: