effect.Commit Doesn't excist but okey, it still doesn't work..., is there a forum where i can ask this sort of questions?
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Páginas1
#2
Jad Engine / [c#.net] Directx Question
23 de Febrero de 2006, 01:37:29 PM
Haay Haddd Team,
I have a question about fx shaders :blink:, How can i apply this shader to model / texture??
Please help i can't figured it out :(
It returns a black vertex :S
The fx file works with FX Composer from Nvidia.
Bump.fx:
Program Source:
Much Thanx,
Roy Teusink - Holland
I have a question about fx shaders :blink:, How can i apply this shader to model / texture??
Please help i can't figured it out :(
It returns a black vertex :S
The fx file works with FX Composer from Nvidia.
Bump.fx:
Código [Seleccionar]
float Script : STANDARDSGLOBAL <
string UIWidget = "none";
string ScriptClass = "object";
string ScriptOrder = "standard";
string ScriptOutput = "color";
string Script = "Technique=Technique?NoPixelShader;";
> = 0.8;
// World Inverse or Model Inverse matrix
float4x4 WorldIMatrix : WorldInverse;
// Model*View*Projection
float4x4 WorldViewProj : WorldViewProjection;
texture diffuseTexture : DIFFUSE
<
string ResourceName = "rockwall.dds";
string ResourceType = "2D";
>;
texture normalMap : NORMAL
<
string ResourceName = "rockwall_normal.dds";
string ResourceType = "2D";
>;
float4 BumpHeight
<
> = { 1.0, 1.0, 0.5, 0.0};
float4 LightPos : Position
<
string Object = "PointLight";
string Space = "World";
> = { 100.0f, 100.0f, 100.0f, 0.0f };
technique NoPixelShader <string Script = "Pass=p0;";>
{
pass p0 <string Script = "Draw=geometry;";>
{
VertexShaderConstant[0] = <WorldIMatrix>; // c0-c3 is Model matrix
VertexShaderConstant[4] = <WorldViewProj>; // c4-c7 is ModelViewProjection matrix
VertexShaderConstant[8] = <WorldIMatrix>;
VertexShaderConstant[12] = <LightPos>;
VertexShaderConstant[13] = {0.5, 0.5, 0.5, 1.0};
VertexShaderConstant[14] = <BumpHeight>;
VertexShader = asm
{
vs.1.1 // version number
dcl_position v0
dcl_normal v3
dcl_texcoord0 v7
dcl_tangent0 v8
dcl_binormal0 v9
dcl_color0 v5
m4x4 oPos, v0, c4 // pos in screen space.
mov oT0, v7 // tex coords for normal map
mov oT1, v7 // tex coords for diffuse tex.
mov r0, c12
dp3 r0.w, r0, r0 // normalize light dir.
rsq r0.w, r0.w
mul r0, r0, r0.w
// Transform Light to Object space
dp3 r2.x, c8, r0 // Tangent dot Light
dp3 r2.y, c9, r0 // Binormal dot Light
dp3 r2.z, c10, r0 // Normal dot Light
// Transform Light to tangent space.
dp3 r1.x, v8, r2 // Tangent dot Light
dp3 r1.y, v9, r2 // Binormal dot Light
dp3 r1.z, v3, r2 // Normal dot Light
sge r1.w, r1.x, r1.x
mov r0, c14
add r0, r0, r0 // *= 2
mul r0, r1, r0 // *= bump height
mad oD0, r0, c13, c13 // put in diffuse
};
Zenable = true;
ZWriteEnable = true;
CullMode = None;
Texture[0] = <normalMap>;
MinFilter[0] = Linear;
MagFilter[0] = Linear;
MipFilter[0] = Linear;
Texture[1] = <diffuseTexture>;
MinFilter[1] = Linear;
MagFilter[1] = Linear;
MipFilter[1] = Linear;
ColorOp[0] = DotProduct3;
AlphaOp[0] = SelectArg1;
ColorArg1[0] = Texture;
ColorArg2[0] = Diffuse;
AlphaArg1[0] = Texture;
AlphaArg2[0] = Diffuse;
ColorOp[1] = Modulate;
ColorArg1[1] = Current;
ColorArg2[1] = Texture;
AlphaOp[1] = SelectArg1;
}
}
Program Source:
Código [Seleccionar]
//2005/07/11. TheZBuffer.com. Updated for June 2005 SDK
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
namespace Chapter11Code
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private Device device = null;
private VertexBuffer vb = null;
private Effect effect = null;
private VertexDeclaration decl = null;
private VolumeTexture diffuseTexture;
private VolumeTexture normalMap;
// Our matrices
private Matrix worldMatrix;
private Matrix viewMatrix;
private Matrix projMatrix;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
private float angle = 0.0f;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
}
/// <summary>
/// We will initialize our graphics device here
/// </summary>
public bool InitializeGraphics()
{
// Set our presentation parameters
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true;
presentParams.SwapEffect = SwapEffect.Discard;
presentParams.AutoDepthStencilFormat = DepthFormat.D16;
presentParams.EnableAutoDepthStencil = true;
bool canDoShaders = true;
// Does a hardware device support shaders?
Caps hardware = Manager.GetDeviceCaps(0, DeviceType.Hardware);
if (hardware.VertexShaderVersion >= new Version(1, 1))
{
// Default to software processing
CreateFlags flags = CreateFlags.SoftwareVertexProcessing;
// Use hardware if it's available
if (hardware.DeviceCaps.SupportsHardwareTransformAndLight)
flags = CreateFlags.HardwareVertexProcessing;
// Use pure if it's available
if (hardware.DeviceCaps.SupportsPureDevice)
flags |= CreateFlags.PureDevice;
// Yes, Create our device
device = new Device(0, DeviceType.Hardware, this, flags, presentParams);
}
else
{
// No shader support
canDoShaders = false;
// Create a reference device
device = new Device(0, DeviceType.Reference, this, CreateFlags.SoftwareVertexProcessing, presentParams);
}
//device.RenderState.Lighting = true;
device.Lights[0].Type = LightType.Directional;
device.Lights[0].Diffuse = Color.Red;
device.Lights[0].Direction = new Vector3(0,0,0.0f);
device.Lights[0].Enabled = true;
diffuseTexture = TextureLoader.FromVolumeFile(device, "Media/rockwall.dds");
normalMap = TextureLoader.FromVolumeFile(device, "Media/rockwall_normal.dds");
effect = Effect.FromFile(device, @Application.StartupPath + "/Media/Bump.fx", null, "", ShaderFlags.None, null);
effect.Technique = "NoPixelShader";
effect.SetValue("diffuseTexture", diffuseTexture);
effect.SetValue("normalMap", normalMap);
// Create our vertex data
vb = new VertexBuffer(typeof(CustomVertex.PositionOnly), 3, device,Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionOnly.Format, Pool.Default);
vb.Created += new EventHandler(this.OnVertexBufferCreate);
OnVertexBufferCreate(vb, null);
// Store our project and view matrices
projMatrix = Matrix.PerspectiveFovLH((float)Math.PI / 4,this.Width / this.Height, 1.0f, 100.0f);
viewMatrix = Matrix.LookAtLH(new Vector3(0,0, 5.0f), new Vector3(), new Vector3(0,1,0));
// Create our vertex declaration
VertexElement[] elements = new VertexElement[]{new VertexElement(0, 0, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position, 0), VertexElement.VertexDeclarationEnd };
decl = new VertexDeclaration(device, elements);
return canDoShaders;
}
private void OnVertexBufferCreate(object sender, EventArgs e)
{
VertexBuffer buffer = (VertexBuffer)sender;
CustomVertex.PositionOnly[] verts = new CustomVertex.PositionOnly[3];
verts[0].Position=new Vector3(0.0f, 1.0f, 1.0f);
verts[1].Position=new Vector3(-1.0f, -1.0f, 1.0f);
verts[2].Position=new Vector3(1.0f, -1.0f, 1.0f);
buffer.SetData(verts, 0, LockFlags.None);
}
private void UpdateWorld()
{
worldMatrix = Matrix.RotationAxis(new Vector3(angle / ((float)Math.PI * 2.0f),
angle / ((float)Math.PI * 4.0f), angle / ((float)Math.PI * 6.0f)),
angle / (float)Math.PI);
angle += 0.1f;
Matrix worldViewProj = worldMatrix * viewMatrix * projMatrix;
effect.SetValue("WorldViewProj", worldViewProj);
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.CornflowerBlue, 1.0f, 0);
UpdateWorld();
device.BeginScene();
device.SetStreamSource(0, vb, 0);
device.VertexDeclaration = decl;
// Render our triangle using an effect
int numPasses = effect.Begin(0);
for (int i = 0; i < numPasses; i++)
{
effect.BeginPass(i);
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
effect.EndPass();
}
effect.End();
device.EndScene();
device.Present();
this.Invalidate();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.Size = new Size(800,600);
this.Text = "Form1";
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
using (Form1 frm = new Form1())
{
// Show our form and initialize our graphics engine
frm.Show();
if (!frm.InitializeGraphics())
{
MessageBox.Show("Your card does not support shaders. " +
"This application will run in ref mode instead.");
}
Application.Run(frm);
}
}
}
}
Much Thanx,
Roy Teusink - Holland
Páginas1