(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; //使用线性滤波器
}