| @@ -128,6 +128,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "benlitzTest1", "..\..\peopl | |||
| EndProject | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MeshViewer", "..\..\test\MeshViewer.vcxproj", "{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}" | |||
| EndProject | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tactics", "..\..\people\touky\private\Tactics\Tactics.vcxproj", "{25493FC8-75AC-4703-AD57-AB0C2A0FB79C}" | |||
| EndProject | |||
| Global | |||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
| Debug|Any CPU = Debug|Any CPU | |||
| @@ -648,9 +650,9 @@ Global | |||
| {58922993-9830-4A40-B462-0326342F69ED}.Release|x64.Build.0 = Release|Any CPU | |||
| {58922993-9830-4A40-B462-0326342F69ED}.Release|Xbox 360.ActiveCfg = Release|Any CPU | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|Any CPU.ActiveCfg = Debug|Xbox 360 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|Mixed Platforms.ActiveCfg = Debug|Xbox 360 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|Mixed Platforms.Build.0 = Debug|Xbox 360 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|Mixed Platforms.Deploy.0 = Debug|Xbox 360 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|Mixed Platforms.Build.0 = Debug|Win32 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|Mixed Platforms.Deploy.0 = Debug|Win32 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|PS3.ActiveCfg = Debug|PS3 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|PS3.Build.0 = Debug|PS3 | |||
| {834852DB-EDB6-4FD0-BCF9-45CD01126962}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
| @@ -709,6 +711,24 @@ Global | |||
| {7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|x64.ActiveCfg = Release|x64 | |||
| {7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|x64.Build.0 = Release|x64 | |||
| {7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|Xbox 360.ActiveCfg = Release|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|Any CPU.ActiveCfg = Debug|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|Mixed Platforms.Build.0 = Debug|Win32 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|PS3.ActiveCfg = Debug|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|Win32.Build.0 = Debug|Win32 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|x64.ActiveCfg = Debug|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|x64.Build.0 = Debug|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Debug|Xbox 360.ActiveCfg = Debug|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|Any CPU.ActiveCfg = Release|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|Mixed Platforms.ActiveCfg = Release|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|Mixed Platforms.Build.0 = Release|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|PS3.ActiveCfg = Release|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|Win32.ActiveCfg = Release|Win32 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|Win32.Build.0 = Release|Win32 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|x64.ActiveCfg = Release|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|x64.Build.0 = Release|x64 | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C}.Release|Xbox 360.ActiveCfg = Release|x64 | |||
| EndGlobalSection | |||
| GlobalSection(SolutionProperties) = preSolution | |||
| HideSolutionNode = FALSE | |||
| @@ -745,6 +765,7 @@ Global | |||
| {9CC50C06-DF5E-41A7-AD90-04F05386E081} = {3D341D8A-E400-4B1D-BC05-B5C35487D9B5} | |||
| {587FCCE9-1D8D-4398-B8B6-E8F4E9A92233} = {B357514A-7881-422D-8358-161B689E7620} | |||
| {EE203B88-44CF-4859-9D42-7A5F43FECB52} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {25493FC8-75AC-4703-AD57-AB0C2A0FB79C} = {9EA99B18-D352-47F6-BC04-A0B49CAA2772} | |||
| {A69411B3-6DE8-404E-8E70-0D3375A7492A} = {0A1651FC-322B-4B04-82CB-28E9046D9383} | |||
| {5A77DCDD-2CBA-43E9-8B45-00C281443F77} = {0A1651FC-322B-4B04-82CB-28E9046D9383} | |||
| {C2E01551-B636-4324-8461-71811DF6FBB5} = {E27FDF36-50C4-4ED2-8CF5-A20FED016910} | |||
| @@ -1150,13 +1150,13 @@ void EasyMesh::AppendCylinder(int nsides, float h, float d1, float d2, | |||
| //LOWER DISC | |||
| SetTexCoordData(vec2(.0f, .5f), vec2(.5f, .5f)); | |||
| SetCurColor(m_color); | |||
| AppendDisc(nsides, r1); | |||
| AppendDisc(nsides, d1); | |||
| Translate(vec3(.0f, h, .0f)); | |||
| RotateX(180.0f); | |||
| //UPPER DISC | |||
| SetTexCoordData(vec2(.5f, .5f), vec2(.5f, .5f)); | |||
| SetCurColor(m_color2); | |||
| AppendDisc(nsides, r2); | |||
| AppendDisc(nsides, d2); | |||
| Translate(vec3(.0f, h * .5f, .0f)); | |||
| CloseBrace(); | |||
| } | |||
| @@ -1293,11 +1293,12 @@ void EasyMesh::AppendCapsule(int ndivisions, float h, float d) | |||
| { | |||
| int rid[] = { id[k + l], id[(k + 1) % 3 + l], id[(k + 2) % 3 + l] }; | |||
| AddVertex(p[rid[0]]); | |||
| vec2 new_uv; | |||
| if (uv[rid[0]].x < .0f) | |||
| SetCurVertTexCoord(vec2((uv[rid[1]].x + uv[rid[2]].x) * .5f, | |||
| uv[rid[0]].y)); | |||
| new_uv = vec2((uv[rid[1]].x + uv[rid[2]].x) * .5f, uv[rid[0]].y); | |||
| else | |||
| SetCurVertTexCoord(uv[rid[0]]); | |||
| new_uv = uv[rid[0]]; | |||
| SetCurVertTexCoord(vec2(0.f, 1.f) - new_uv); | |||
| } | |||
| AppendTriangle(0, 2, 1, m_vert.Count() - 3); | |||
| } | |||
| @@ -1431,19 +1432,19 @@ void EasyMesh::AppendBox(vec3 const &size, float chamf, bool smooth) | |||
| //Bottom vertices | |||
| AddVertex(vec3(-d.x, -d.y - chamf, +d.z)); | |||
| SetCurVertTexCoord(vec2(0.f, 1.f)); | |||
| SetCurVertTexCoord(vec2(.5f, 1.f)); | |||
| AddVertex(vec3(-d.x, -d.y - chamf, -d.z)); | |||
| SetCurVertTexCoord(vec2(0.f, .5f)); | |||
| AddVertex(vec3(+d.x, -d.y - chamf, -d.z)); | |||
| SetCurVertTexCoord(vec2(.5f, .5f)); | |||
| AddVertex(vec3(+d.x, -d.y - chamf, -d.z)); | |||
| SetCurVertTexCoord(vec2(.0f, .5f)); | |||
| AddVertex(vec3(+d.x, -d.y - chamf, +d.z)); | |||
| SetCurVertTexCoord(vec2(.5f, 1.f)); | |||
| SetCurVertTexCoord(vec2(.0f, 1.f)); | |||
| //Top vertices | |||
| AddVertex(vec3(-d.x, +d.y + chamf, -d.z)); | |||
| SetCurVertTexCoord(vec2(0.f, 1.f)); | |||
| SetCurVertTexCoord(vec2(1.f, 1.f)); | |||
| AddVertex(vec3(-d.x, +d.y + chamf, +d.z)); | |||
| SetCurVertTexCoord(vec2(0.f, .5f)); | |||
| SetCurVertTexCoord(vec2(1.f, .5f)); | |||
| AddVertex(vec3(+d.x, +d.y + chamf, +d.z)); | |||
| SetCurVertTexCoord(vec2(.5f, .5f)); | |||
| AddVertex(vec3(+d.x, +d.y + chamf, -d.z)); | |||
| @@ -1621,11 +1622,11 @@ void EasyMesh::AppendSimpleTriangle(float d, int fade) | |||
| AddVertex(p); SetCurVertTexCoord(vec2(.5f, 0.133975f)); | |||
| p = m * p; | |||
| AddVertex(p); SetCurVertTexCoord(vec2(1.f, 1.f)); | |||
| AddVertex(p); SetCurVertTexCoord(vec2(0.f, 1.f)); | |||
| if (fade) | |||
| SetCurVertColor(m_color2); | |||
| p = m * p; | |||
| AddVertex(p); SetCurVertTexCoord(vec2(0.f, 1.f)); | |||
| AddVertex(p); SetCurVertTexCoord(vec2(1.f, 1.f)); | |||
| if (fade) | |||
| SetCurVertColor(m_color2); | |||
| @@ -1641,14 +1642,12 @@ void EasyMesh::AppendSimpleQuad(float size, int fade) | |||
| //----------------------------------------------------------------------------- | |||
| void EasyMesh::AppendSimpleQuad(vec2 p1, vec2 p2, float z, int fade) | |||
| { | |||
| AddVertex(vec3(p2.x, z, -p1.y)); SetCurVertTexCoord(vec2(0.f, 1.f)); | |||
| AddVertex(vec3(p2.x, z, -p1.y)); SetCurVertTexCoord(vec2(1.f, 0.f)); | |||
| AddVertex(vec3(p2.x, z, -p2.y)); SetCurVertTexCoord(vec2(0.f, 0.f)); | |||
| AddVertex(vec3(p1.x, z, -p2.y)); SetCurVertTexCoord(vec2(1.f, 0.f)); | |||
| if (fade) | |||
| SetCurVertColor(m_color2); | |||
| AddVertex(vec3(p1.x, z, -p2.y)); SetCurVertTexCoord(vec2(0.f, 1.f)); | |||
| if (fade) SetCurVertColor(m_color2); | |||
| AddVertex(vec3(p1.x, z, -p1.y)); SetCurVertTexCoord(vec2(1.f, 1.f)); | |||
| if (fade) | |||
| SetCurVertColor(m_color2); | |||
| if (fade) SetCurVertColor(m_color2); | |||
| AppendQuad(0, 1, 2, 3, m_vert.Count() - 4); | |||
| ComputeNormals(m_indices.Count() - 6, 6); | |||
| @@ -19,7 +19,7 @@ | |||
| #define VU_TEX_UV 1 | |||
| #define VU_VANILLA 0 | |||
| #define VERTEX_USEAGE VU_VANILLA | |||
| #define VERTEX_USEAGE VU_TEX_UV | |||
| #if !defined __EASYMESH_EASYMESH_H__ | |||
| #define __EASYMESH_EASYMESH_H__ | |||
| @@ -174,6 +174,11 @@ ivec2 TileSet::GetSize(int tileid) const | |||
| return data->size; | |||
| } | |||
| ShaderTexture TileSet::GetTexture() const | |||
| { | |||
| return data->m_texture->GetTexture(); | |||
| } | |||
| void TileSet::Bind() | |||
| { | |||
| if (!data->img && data->m_texture) | |||
| @@ -43,6 +43,7 @@ public: | |||
| /* New methods */ | |||
| ivec2 GetCount() const; | |||
| ivec2 GetSize(int tileid) const; | |||
| ShaderTexture GetTexture() const; | |||
| void Bind(); | |||
| void Unbind(); | |||
| void BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, | |||
| @@ -21,7 +21,10 @@ | |||
| using namespace std; | |||
| using namespace lol; | |||
| static int const TEXTURE_WIDTH = 256; | |||
| LOLFX_RESOURCE_DECLARE(shinyfur); | |||
| LOLFX_RESOURCE_DECLARE(shinyMVTexture); | |||
| #define IPT_CAM_RESET "Cam_Center" | |||
| #define IPT_CAM_FORWARD "Cam_Forward" | |||
| @@ -95,6 +98,7 @@ public: | |||
| Input::LinkActionToKey(IPT_MESH_ROT_DOWN, Key::KP5); | |||
| m_angle = 0; | |||
| DefaultTexture = NULL; | |||
| //Camera Setup | |||
| m_fov_zoom_damp = .0f; | |||
| @@ -325,6 +329,22 @@ public: | |||
| Video::SetDebugRenderMode(DebugRenderMode::UV); | |||
| } | |||
| if (!DefaultTexture) | |||
| { | |||
| m_texture_shader = Shader::Create(LOLFX_RESOURCE_NAME(shinyMVTexture)); | |||
| m_texture_uni = m_texture_shader->GetUniformLocation("u_Texture"); | |||
| //m_image = new Image("data/MeshViewerTestTexture.png"); | |||
| DefaultTexture = Tiler::Register("data/MeshViewerTestTexture.png", ivec2(0), ivec2(0,1)); | |||
| //ivec2 size = m_image->GetSize(); | |||
| //// m_image->GetFormat() | |||
| //m_texture = new Texture(m_image->GetSize(), PixelFormat::ABGR_8); | |||
| //m_texture->SetData(m_image->GetData()); | |||
| // PixelFormat::ABGR_8 | |||
| } | |||
| else if (m_texture && DefaultTexture) | |||
| m_texture_shader->SetUniform(m_texture_uni, DefaultTexture->GetTexture(), 0); | |||
| for (int i = 0; i < m_meshes.Count(); i++) | |||
| { | |||
| if (!m_meshes[i].m2) | |||
| @@ -333,7 +353,8 @@ public: | |||
| #if WITH_FUR | |||
| m_meshes[i].m1.MeshConvert(Shader::Create(LOLFX_RESOURCE_NAME(shinyfur))); | |||
| #else | |||
| m_meshes[i].m1.MeshConvert(); | |||
| m_meshes[i].m1.MeshConvert(m_texture_shader); | |||
| //m_meshes[i].m1.MeshConvert(); | |||
| #endif | |||
| m_meshes[i].m2 = true; | |||
| } | |||
| @@ -401,6 +422,11 @@ private: | |||
| Array<EasyMesh, bool, float, vec3> m_meshes; | |||
| Array<Light *> m_lights; | |||
| Camera * m_camera; | |||
| Shader * m_texture_shader; | |||
| TileSet * DefaultTexture; | |||
| Texture * m_texture; | |||
| ShaderUniform m_texture_uni; | |||
| Image * m_image; | |||
| float m_fov; | |||
| float m_fov_damp; | |||
| float m_fov_zoom_damp; | |||
| @@ -52,6 +52,7 @@ | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <LolFxCompile Include="shinyfur.lolfx" /> | |||
| <LolFxCompile Include="shinyMVTexture.lolfx" /> | |||
| </ItemGroup> | |||
| <PropertyGroup Label="Globals"> | |||
| <ProjectGuid>{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}</ProjectGuid> | |||
| @@ -73,4 +74,4 @@ | |||
| <ImportGroup Label="ExtensionTargets"> | |||
| <Import Project="$(SolutionDir)\Lol.Fx.targets" /> | |||
| </ImportGroup> | |||
| </Project> | |||
| </Project> | |||
| @@ -1,20 +1,22 @@ | |||
| [sc#88f ab 4 4 4 smth 3 1 1 ]//twy 45 0 bdxy 90 0 splt 5 tz 2 | |||
| [sc#fff scb#fff ato 20 8 12 rx0] | |||
| [sc#fff scb#fff acg 8 2 5 1 6 8 4 2 .1 1] | |||
| //[sc#fff ab 4 4 4 smth 0 1 1 ]//twy 45 0 bdxy 90 0 splt 5 tz 2 | |||
| //[sc#88f ab 4 4 4 tx 4 ab 4 4 4 tx -2 tax .4 .4 0] | |||
| //[sc#88f ab .25 1 1 tx .25 ab .25 1 1 tx .25 ab .25 1 1 tx .25 ab .25 1 1 tx .125 stx 10 0 0] | |||
| //[sc#ff2 scb#2ff acg 13 2 1 1 8 8 4 4 0 1 tax -2 0 0 0] | |||
| // tax -2 0 0 0 | |||
| //[sc#88f ab 4 4 4 tx 4 ab 4 4 4 tx -2 shz 1 0 0 0] | |||
| //[sc#ff2 asph 4 4 shx 0 0 0 0] | |||
| //[sc#fff asph 4 4] | |||
| //[sc#ff2 asph 4 4 tax .4 .4 0] | |||
| //[sc#ff2 asph 2 4] | |||
| //[sc#ff2 acap 1 4 4] | |||
| //[sc#ff2 scb#ff2 ac 10 4 4 4 0 0 1] | |||
| //[sc#fff acap 1 4 4] | |||
| //[sc#fff scb#fff ac 10 4 4 4 0 0 1] | |||
| //[sc#ff2 scb#ff2 ad 10 4 0] | |||
| //[sc#ff2 scb#ff2 ato 40 1 4] | |||
| //[sc#ff2 scb#2ff at 4 1] | |||
| //[sc#ff2 scb#2ff aq 4 0] | |||
| //[sc#ff2 scb#2ff aes 5 3 6 2] | |||
| //[sc#ff2 scb#2ff as 4 2 4 0 0] | |||
| //[sc#ff2 scb#2ff acg 2 10 .1 .1 .4 .4 .1 .1 0 1] | |||
| //[sc#fff scb#fff at 4 1] | |||
| //[sc#fff scb#000 aq 4 1] | |||
| //[sc#fff scb#2ff aes 5 3 6 2] | |||
| //[sc#fff scb#2ff as 4 2 4 0 0] | |||
| //[sc#fff scb#fff acg 2 10 .1 .1 .4 .4 .1 .1 0 1] | |||
| //[sc#ff2 asph 2 10 10 10] | |||
| //[sc#400 asph 2 10 10 10 t 2 2 2 csgs] | |||
| @@ -0,0 +1,164 @@ | |||
| [vert.glsl] | |||
| #version 120 | |||
| attribute vec3 in_Vertex; | |||
| attribute vec3 in_Normal; | |||
| attribute vec4 in_Color; | |||
| attribute vec2 in_TexCoord; | |||
| uniform mat4 in_ModelView; | |||
| uniform mat4 in_View; | |||
| uniform mat4 in_Proj; | |||
| uniform mat3 in_NormalMat; | |||
| varying vec4 pass_Vertex; /* View space */ | |||
| varying vec3 pass_TNormal; | |||
| varying vec4 pass_Color; | |||
| varying vec2 pass_TexCoord; | |||
| void main(void) | |||
| { | |||
| vec4 vertex = in_ModelView * vec4(in_Vertex, 1.0); | |||
| vec3 tnorm = normalize(in_NormalMat * in_Normal); | |||
| pass_Vertex = vertex; | |||
| pass_TNormal = tnorm; | |||
| pass_Color = in_Color; | |||
| pass_TexCoord = in_TexCoord; | |||
| gl_Position = in_Proj * vertex; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| #if defined GL_ES | |||
| precision highp float; | |||
| #endif | |||
| uniform mat4 in_View; | |||
| uniform mat4 in_Inv_View; | |||
| uniform mat4 in_Inv_ModelView; | |||
| uniform sampler2D u_Texture; | |||
| //Light list | |||
| uniform vec4 u_Lights[8 * 2]; | |||
| varying vec4 pass_Vertex; /* View space */ | |||
| varying vec3 pass_TNormal; | |||
| varying vec4 pass_Color; | |||
| varying vec2 pass_TexCoord; | |||
| void main(void) | |||
| { | |||
| /* Material properties */ | |||
| vec3 specular_reflect = vec3(0.8, 0.75, 0.4); | |||
| float specular_power = 60.0; | |||
| /* World properties */ | |||
| vec3 ambient = vec3(0.7, 0.7, 0.7); | |||
| vec3 specular = vec3(0.0, 0.0, 0.0); | |||
| vec3 diffuse = vec3(0.0, 0.0, 0.0); | |||
| /* Light precalculations */ | |||
| vec3 v = normalize(-pass_Vertex.xyz); | |||
| /* Apply lighting */ | |||
| for (int i = 0; i < 8; i++) | |||
| { | |||
| vec4 pos = u_Lights[i * 2]; | |||
| vec4 color = u_Lights[i * 2 + 1]; | |||
| vec3 s, r; | |||
| if (pos.w > 0.0) | |||
| { | |||
| /* Point light -- no attenuation yet */ | |||
| s = normalize((in_View * pos).xyz - pass_Vertex.xyz); | |||
| r = reflect(-s, pass_TNormal); | |||
| } | |||
| else | |||
| { | |||
| /* Directional light */ | |||
| s = normalize(-pos.xyz); | |||
| r = reflect(s, pass_TNormal); | |||
| } | |||
| float sdotn = max(dot(s, pass_TNormal), 0.0); | |||
| diffuse += color.xyz * sdotn; | |||
| if (sdotn > 0.0) | |||
| specular += color.xyz * specular_reflect | |||
| * pow(max(dot(r, v), 0.0), specular_power); | |||
| } | |||
| vec3 light = ambient + diffuse + specular; | |||
| gl_FragColor = texture2D(u_Texture, pass_TexCoord.xy) * pass_Color * vec4(light, 1.0f); | |||
| } | |||
| [vert.hlsl] | |||
| void main(float3 in_Vertex : POSITION, | |||
| float3 in_Normal : NORMAL, | |||
| float4 in_Color : COLOR, | |||
| uniform float4x4 in_ModelView, | |||
| uniform float4x4 in_Model, | |||
| uniform float4x4 in_Proj, | |||
| uniform float3x3 in_NormalMat, | |||
| out float4 pass_Vertex : TEXCOORD0, | |||
| out float3 pass_TNormal : TEXCOORD1, | |||
| out float4 pass_Color : COLOR, | |||
| out float4 out_Position : POSITION) | |||
| { | |||
| float4 eye = mul(in_ModelView, float4(in_Vertex, 1.0)); | |||
| float3 tnorm = normalize(mul(in_NormalMat, in_Normal)); | |||
| pass_Vertex = eye; | |||
| pass_TNormal = tnorm; | |||
| #ifdef _XBOX | |||
| pass_Color = in_Color.abgr; | |||
| #else | |||
| pass_Color = in_Color; | |||
| #endif | |||
| out_Position = mul(in_Proj, eye); | |||
| } | |||
| [frag.hlsl] | |||
| void main(float4 pass_Vertex : TEXCOORD0, | |||
| float3 pass_TNormal : TEXCOORD1, | |||
| float4 pass_Color : COLOR, | |||
| uniform float in_Damage, | |||
| out float4 out_FragColor : COLOR) | |||
| { | |||
| float3 in_LightDir = float3(0.3, 0.3, 0.7); | |||
| /* Material properties */ | |||
| float3 specular_reflect = float3(0.8, 0.75, 0.4); | |||
| float specular_power = 60.0; | |||
| /* World properties */ | |||
| float ambient_mul = 0.5; | |||
| float3 ambient_color = float3(0.25, 0.2, 0.35); | |||
| float3 diffuse_color = float3(1.0, 1.0, 0.6); | |||
| float3 specular_color = float3(1.0, 1.0, 0.6); | |||
| float3 s = normalize(in_LightDir); /* normalize(pass_Vertex - lightpos); */ | |||
| float3 v = normalize(-pass_Vertex.xyz); | |||
| float3 r = reflect(-s, pass_TNormal); | |||
| float3 ambient = ambient_color; | |||
| float sdotn = max(dot(s, pass_TNormal), 0.0); | |||
| float3 diffuse = diffuse_color * sdotn; | |||
| float3 specular = float3(0.0, 0.0, 0.0); | |||
| if (sdotn > 0.0) | |||
| specular = specular_color * specular_reflect | |||
| * pow(max(dot(r, v), 0.0), specular_power); | |||
| float3 light = ambient + diffuse + specular; | |||
| float4 real_color = in_Damage * float4(1.2, 1.2, 1.2, 1.0) | |||
| + (1.0 - in_Damage) * pass_Color; | |||
| out_FragColor = real_color * float4(light, 1.0); | |||
| } | |||