Added RadialJitter("rj") to EasyMesh parser.legacy
@@ -114,6 +114,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benlitz", "Benlitz", "{B583 | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "benlitzTest1", "..\..\people\benlitz\test1\benlitzTest1.vcxproj", "{FAF82AD2-D9F4-4694-9A01-103BC5B771B4}" | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MeshViewer", "..\..\test\MeshViewer.vcxproj", "{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}" | |||
EndProject | |||
Global | |||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
Debug|Any CPU = Debug|Any CPU | |||
@@ -617,6 +619,24 @@ Global | |||
{FAF82AD2-D9F4-4694-9A01-103BC5B771B4}.Release|x64.ActiveCfg = Release|x64 | |||
{FAF82AD2-D9F4-4694-9A01-103BC5B771B4}.Release|x64.Build.0 = Release|x64 | |||
{FAF82AD2-D9F4-4694-9A01-103BC5B771B4}.Release|Xbox 360.ActiveCfg = Release|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|Any CPU.ActiveCfg = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|Mixed Platforms.Build.0 = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|PS3.ActiveCfg = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|Win32.Build.0 = Debug|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|x64.ActiveCfg = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|x64.Build.0 = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|Xbox 360.ActiveCfg = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|Any CPU.ActiveCfg = Release|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|Mixed Platforms.ActiveCfg = Release|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|Mixed Platforms.Build.0 = Release|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|PS3.ActiveCfg = Release|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|Win32.ActiveCfg = Release|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|Win32.Build.0 = Release|Win32 | |||
{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 | |||
EndGlobalSection | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||
@@ -638,6 +658,7 @@ Global | |||
{B1E10086-A1DA-401A-834D-969C9DBB5CC1} = {E0491194-35E3-4513-9D31-608EA3165ECF} | |||
{80F81C11-8DA2-4990-91CB-9807783BA46E} = {E0491194-35E3-4513-9D31-608EA3165ECF} | |||
{EE203B88-44CF-4859-9D42-7A1F43FECB52} = {E0491194-35E3-4513-9D31-608EA3165ECF} | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E} = {E0491194-35E3-4513-9D31-608EA3165ECF} | |||
{B92ABADC-45BE-4CC5-B724-9426053123A1} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{7B083DA2-FE08-4F6D-BFDD-195D5C2783EB} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{1C5B8702-290C-42DA-AA9E-671348F5B747} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
@@ -87,6 +87,12 @@ mat4 const &Camera::GetProjMatrix() | |||
return m_proj_matrix; | |||
} | |||
void Camera::ForceSceneUpdate() | |||
{ | |||
Scene::GetDefault()->SetViewMatrix(m_view_matrix); | |||
Scene::GetDefault()->SetProjMatrix(m_proj_matrix); | |||
} | |||
void Camera::TickGame(float seconds) | |||
{ | |||
WorldEntity::TickGame(seconds); | |||
@@ -124,8 +130,7 @@ void Camera::TickDraw(float seconds) | |||
{ | |||
WorldEntity::TickDraw(seconds); | |||
Scene::GetDefault()->SetViewMatrix(m_view_matrix); | |||
Scene::GetDefault()->SetProjMatrix(m_proj_matrix); | |||
ForceSceneUpdate(); | |||
} | |||
} /* namespace lol */ | |||
@@ -40,6 +40,7 @@ public: | |||
mat4 const &GetViewMatrix(); | |||
mat4 const &GetProjMatrix(); | |||
void ForceSceneUpdate(); | |||
protected: | |||
virtual void TickGame(float seconds); | |||
@@ -47,7 +47,7 @@ | |||
%token T_TRANSLATEX T_ROTATEX T_TAPERX T_SCALEX T_MIRRORX | |||
%token T_TRANSLATEY T_ROTATEY T_TAPERY T_SCALEY T_MIRRORY | |||
%token T_TRANSLATEZ T_ROTATEZ T_TAPERZ T_SCALEZ T_MIRRORZ | |||
%token T_TRANSLATE T_SCALE T_TOGGLESCALEWINDING | |||
%token T_TRANSLATE T_SCALE T_TOGGLESCALEWINDING T_RADIALJITTER | |||
%token T_CSGUNION T_CSGSUBSTRACT T_CSGAND T_CSGXOR | |||
%token T_CHAMFER | |||
@@ -135,6 +135,7 @@ transform_command: | |||
| T_MIRRORX { mc.m_mesh.MirrorX(); } | |||
| T_MIRRORY { mc.m_mesh.MirrorY(); } | |||
| T_MIRRORZ { mc.m_mesh.MirrorZ(); } | |||
| T_RADIALJITTER args1 { mc.m_mesh.RadialJitter($2.f0); } | |||
| T_TOGGLESCALEWINDING { mc.m_mesh.ToggleScaleWinding(); } | |||
| T_CSGUNION { mc.m_mesh.CsgUnion(); } | |||
| T_CSGSUBSTRACT { mc.m_mesh.CsgSubstract(); } | |||
@@ -66,10 +66,11 @@ sx { return token::T_SCALEX; } | |||
sy { return token::T_SCALEY; } | |||
sz { return token::T_SCALEZ; } | |||
s { return token::T_SCALE; } | |||
tsw { return token::T_TOGGLESCALEWINDING; } | |||
tsw { return token::T_TOGGLESCALEWINDING; } | |||
mx { return token::T_MIRRORX; } | |||
my { return token::T_MIRRORY; } | |||
mz { return token::T_MIRRORZ; } | |||
rj { return token::T_RADIALJITTER; } | |||
csgu { return token::T_CSGUNION; } | |||
csgs { return token::T_CSGSUBSTRACT; } | |||
@@ -105,6 +105,11 @@ public: | |||
void AppendCog(int nbsides, float h, float r10, float r20, float r1, | |||
float r2, float r12, float r22, float sidemul, int offset); | |||
//Convenience functions | |||
public: | |||
int GetVertexCount() { return m_vert.Count(); } | |||
vec3 const &GetVertexLocation(int i) { return m_vert[i].m1; } | |||
private: | |||
vec4 m_color, m_color2; | |||
Array<uint16_t> m_indices; | |||
@@ -10,7 +10,7 @@ bench: benchsuite$(EXEEXT) | |||
EXTRA_DIST = data/gradient.png | |||
noinst_PROGRAMS = benchsuite $(testsuite) btphystest | |||
noinst_PROGRAMS = benchsuite $(testsuite) btphystest MeshViewer | |||
TESTS = $(testsuite) | |||
@@ -49,3 +49,8 @@ btphystest_CPPFLAGS = @LOL_CFLAGS@ -I$(top_srcdir)/src/bullet \ | |||
btphystest_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ | |||
btphystest_DEPENDENCIES = $(top_builddir)/src/liblol.a | |||
MeshViewer_SOURCES = MeshViewer.cpp | |||
MeshViewer_CPPFLAGS = @LOL_CFLAGS@ | |||
MeshViewer_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ | |||
MeshViewer_DEPENDENCIES = $(top_builddir)/src/liblol.a | |||
@@ -0,0 +1,168 @@ | |||
// | |||
// Lol Engine - EasyMesh tutorial | |||
// | |||
// Copyright: (c) 2011-2013 Sam Hocevar <sam@hocevar.net> | |||
// (c) 2012-2013 Benjamin "Touky" Huet <huet.benjamin@gmail.com> | |||
// This program is free software; you can redistribute it and/or | |||
// modify it under the terms of the Do What The Fuck You Want To | |||
// Public License, Version 2, as published by Sam Hocevar. See | |||
// http://www.wtfpl.net/ for more details. | |||
// | |||
#if defined HAVE_CONFIG_H | |||
# include "config.h" | |||
#endif | |||
#include "core.h" | |||
using namespace std; | |||
using namespace lol; | |||
#define MESH_DIST 5.0f | |||
class MeshViewer : public WorldEntity | |||
{ | |||
public: | |||
MeshViewer() | |||
{ | |||
int i=10; | |||
while (i--) | |||
{ | |||
m_meshes.Push(EasyMesh()); | |||
m_meshes.Last().Compile("[sc#0f0 ab 2 2 2 t .8 .8 .8 rx 20 ry 20 [sc#00f ab 2 2 2 tx 0 csgu]]"); | |||
} | |||
m_angle = 0; | |||
m_camera = new Camera(vec3(0.f, 600.f, 0.f), | |||
vec3(0.f, 0.f, 0.f), | |||
vec3(0, 1, 0)); | |||
m_camera->SetPerspective(60.f, 16, 9, .1f, 1000.f); | |||
m_camera->SetTarget(vec3(0.f, 0.f, 0.f)); | |||
m_camera->SetPosition(vec3(0.f, 0.f, 5.f)); | |||
m_camera->ForceSceneUpdate(); | |||
Ticker::Ref(m_camera); | |||
min_pos = vec3(FLT_MAX); | |||
max_pos = vec3(-FLT_MAX); | |||
m_ready = false; | |||
} | |||
~MeshViewer() | |||
{ | |||
Ticker::Unref(m_camera); | |||
} | |||
virtual void TickGame(float seconds) | |||
{ | |||
WorldEntity::TickGame(seconds); | |||
//vec4 vertex = in_ModelView * vec4(in_Vertex, 1.0); | |||
// gl_Position = in_Proj * vertex; | |||
m_angle += seconds * 70.0f; | |||
m_mat = mat4::rotate(m_angle, vec3(0, 1, 0)); | |||
//mat4 screen_matrix = Scene::GetDefault()->GetProjMatrix() * Scene::GetDefault()->GetViewMatrix(); | |||
mat4 world_view_matrix = m_camera->GetViewMatrix() * m_mat; | |||
mat4 world_screen_matrix = m_camera->GetProjMatrix() * world_view_matrix; | |||
mat4 view_world_matrix = inverse(m_camera->GetViewMatrix()); | |||
mat4 screen_view_matrix = inverse(m_camera->GetProjMatrix()); | |||
vec4 a(0, 2, 0, 1.0f); | |||
vec4 b(0,-2, 0, 1.0f); | |||
vec4 c(0, 0, -2, 1.0f); | |||
vec4 d(-1, -1, 1, 1.0f); | |||
//vec2 toto; | |||
//near plane : vec4(toto, 1.f, 1.f); | |||
//far plane : vec4(toto, -1.f, 1.f); | |||
a = vec4((world_screen_matrix * a).xyz / a.w, a.w); | |||
b = vec4((world_screen_matrix * b).xyz / b.w, b.w); | |||
c = vec4((inverse(world_screen_matrix) * c).xyz / c.w, c.w); | |||
d = vec4((inverse(world_screen_matrix) * d).xyz / d.w, d.w); | |||
a = b; | |||
c = d; | |||
//this is the algorithm for a camera that must keep n target in the screen | |||
{ | |||
//Get the Min/Max needed | |||
vec3 new_min_pos(FLT_MAX); | |||
vec3 new_max_pos(-FLT_MAX); | |||
for (int i = 0; i < m_meshes.Last().GetVertexCount(); i++) | |||
{ | |||
vec4 vpos = world_view_matrix * vec4(m_meshes.Last().GetVertexLocation(i), 1.0f); | |||
new_min_pos = min(vpos.xyz, new_min_pos); | |||
new_max_pos = max(vpos.xyz, new_max_pos); | |||
} | |||
//Actual camera algorithm | |||
{ | |||
vec4 BottomLeft = m_camera->GetProjMatrix() * vec4(new_min_pos.xy, new_min_pos.z, 1.0f); | |||
vec4 TopRight = m_camera->GetProjMatrix() * vec4(new_max_pos.xy, new_min_pos.z, 1.0f); | |||
BottomLeft = vec4(BottomLeft.xyz / BottomLeft.w, BottomLeft.w); | |||
TopRight = vec4(TopRight.xyz / TopRight.w, TopRight.w); | |||
//vec2 NewSize = TopRight.xy - BottomLeft.xy; | |||
//NewSize.x = max(NewSize.x, NewSize.y) * 1.5f; | |||
vec4 DistantPoint = screen_view_matrix * vec4(vec2(1.0f, 1.0f), TopRight.z * TopRight.w, TopRight.w); | |||
vec3 vcenter = vec3(new_min_pos.xy + new_max_pos.xy, .0f) * .5f; | |||
vec4 new_pos = screen_view_matrix * vec4(.0f, .0f, new_min_pos.z, 1.0f); | |||
//vcenter.z += (new_pos.z - new_pos.z * NewSize.x); | |||
vcenter = (view_world_matrix * vec4(vcenter, 1.0f)).xyz; | |||
m_camera->SetPosition(damp(m_camera->GetPosition(), vcenter, 0.4f, seconds)); | |||
//m_camera->SetPosition(vcenter); | |||
m_camera->SetTarget(m_camera->GetPosition() + vec3(0, 0, -5.0f)); | |||
} | |||
// | |||
} | |||
} | |||
virtual void TickDraw(float seconds) | |||
{ | |||
WorldEntity::TickDraw(seconds); | |||
if (!m_ready) | |||
{ | |||
for (int i = 0; i < m_meshes.Count(); i++) | |||
m_meshes[i].MeshConvert(); | |||
m_ready = true; | |||
} | |||
Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f)); | |||
m_mat = mat4::translate(vec3(m_meshes.Count() * MESH_DIST * 0.5f, 0, m_meshes.Count() * MESH_DIST) * -1.0f) * m_mat; | |||
for (int i = 0; i < m_meshes.Count(); i++) | |||
{ | |||
m_mat = mat4::translate(vec3(MESH_DIST * 0.5f, 0, MESH_DIST)) * m_mat; | |||
m_meshes[i].Render(m_mat); | |||
Video::Clear(ClearMask::Depth); | |||
} | |||
//m_mat = mat4::translate(vec3(.0f)); | |||
//m_meshes.Last().Render(m_mat); | |||
} | |||
private: | |||
//Array<EasyMesh, mat4, float> m_gears; | |||
float m_angle; | |||
mat4 m_mat; | |||
vec3 min_pos; | |||
vec3 max_pos; | |||
Array<EasyMesh> m_meshes; | |||
Camera *m_camera; | |||
bool m_ready; | |||
}; | |||
int main(int argc, char **argv) | |||
{ | |||
System::Init(argc, argv); | |||
Application app("MeshViewer", ivec2(960, 600), 60.0f); | |||
new MeshViewer(); | |||
app.Run(); | |||
return EXIT_SUCCESS; | |||
} | |||
@@ -0,0 +1,65 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
<ItemGroup Label="ProjectConfigurations"> | |||
<ProjectConfiguration Include="Debug|PS3"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>PS3</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Debug|Win32"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>Win32</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Debug|x64"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>x64</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Debug|Xbox 360"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>Xbox 360</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|PS3"> | |||
<Configuration>Release</Configuration> | |||
<Platform>PS3</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|Win32"> | |||
<Configuration>Release</Configuration> | |||
<Platform>Win32</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|x64"> | |||
<Configuration>Release</Configuration> | |||
<Platform>x64</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|Xbox 360"> | |||
<Configuration>Release</Configuration> | |||
<Platform>Xbox 360</Platform> | |||
</ProjectConfiguration> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ClCompile Include="MeshViewer.cpp" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="$(SolutionDir)\..\..\src\lolcore.vcxproj"> | |||
<Project>{9e62f2fe-3408-4eae-8238-fd84238ceeda}</Project> | |||
</ProjectReference> | |||
</ItemGroup> | |||
<PropertyGroup Label="Globals"> | |||
<ProjectGuid>{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}</ProjectGuid> | |||
<ConfigurationType>Application</ConfigurationType> | |||
<Keyword>Win32Proj</Keyword> | |||
</PropertyGroup> | |||
<Import Project="$(SolutionDir)\Lol.Core.Config.props" /> | |||
<ImportGroup Label="ExtensionSettings"> | |||
<Import Project="$(SolutionDir)\Lol.Fx.props" /> | |||
</ImportGroup> | |||
<ImportGroup Label="PropertySheets"> | |||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | |||
<Import Project="$(SolutionDir)\Lol.Core.Vars.props" /> | |||
</ImportGroup> | |||
<PropertyGroup Label="UserMacros" /> | |||
<Import Project="$(SolutionDir)\Lol.Core.Rules.props" /> | |||
<ItemDefinitionGroup /> | |||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | |||
<ImportGroup Label="ExtensionTargets"> | |||
<Import Project="$(SolutionDir)\Lol.Fx.targets" /> | |||
</ImportGroup> | |||
</Project> |