Jump to content

reepblue

Developers
  • Posts

    2,504
  • Joined

  • Last visited

Everything posted by reepblue

  1. UPDATE: Ran the demo on my Linux machine which has a 1050Ti. Everything fine there. This has to do with light quality being set to medium or lower, and might be AMD exclusive. If there are any other Windows+AMD folks to confirm this, let me know!
  2. A quick app to preview models with environment probes. Throw these files within your project directory and load the models via a batch script. Key Listings: F5 - Reload model G - Toggle Grid F - Toggle Floor W - Toggle Widget 1-7 - Change Skybox. 0 - Remove Skybox. Windows only as it was just an experiment (Could have done more null checking..), but here's the full code. Use at your own risk. #include "Leadwerks.h" using namespace Leadwerks; Model* m_pModel; Vec3 m_vCamRot; Pivot* m_pCamPivot; bool m_bShowWidget = false; bool m_bShowGrid = false; int m_intShowCubemap = -1; int m_intCurrentCubemap = -1; const char* m_pszCubeMaps[7] { "Materials/CubeMap/1SaintLazarusChurch.tex", "Materials/CubeMap/LancellottiChapel.tex", "Materials/CubeMap/MarriottMadisonWest.tex", "Materials/CubeMap/papermill.tex", "Materials/CubeMap/park.tex", "Materials/CubeMap/PereaBeach.tex", "Materials/CubeMap/Yokohama.tex" }; int main(int argc, const char *argv[]) { Leadwerks::logstream__ = NULL; #ifndef DEBUG Leadwerks::logmode = false; #endif System::ParseCommandLine(argc, argv); std::string m_strModelPath = System::GetProperty("model", FileSystem::FixPath("Models/ModelViewer/error.mdl")); // Load any zip files in main directory System::AppPath = FileSystem::ExtractDir(argv[0]); Leadwerks::Directory* dir = Leadwerks::FileSystem::LoadDir("."); if (dir) { for (size_t i = 0; i < dir->files.size(); i++) { std::string file = dir->files[i]; std::string ext = Leadwerks::String::Lower(Leadwerks::FileSystem::ExtractExt(file)); if (ext == "zip" || ext == "pak") { Leadwerks::Package::Load(file); } } delete dir; } Window* window = Window::Create("ModelViewer",0,0,1024,768,Leadwerks::Window::Titlebar+Leadwerks::Window::Center+ Leadwerks::Window::Resizable); Context* context = Context::Create(window); Font* font = Font::Load("Fonts/arial.ttf", 8); // <- Do a null check here. context->SetFont(font); font->Release(); World* world = World::Create(); world->SetSkybox(NULL); Light* light = DirectionalLight::Create(); light->SetShadowMode(Light::Static); light->SetRotation(45, 45, 0); m_pCamPivot = Pivot::Create(); m_pModel = Model::Load(m_strModelPath); if (m_pModel == NULL) m_pModel = Model::Load("Models/ModelViewer/error.mdl"); m_pModel->SetShadowMode(Light::Static); m_vCamRot = Vec3(0, 0, -4); Camera* camera = Camera::Create(); camera->SetGridMode(m_bShowGrid); if (m_pModel != NULL) { camera->Move(0, 2, -m_pModel->GetAABB().size.z * 4); } else { camera->Move(0, 2, -5); } Model* m_pFloor = Model::Box(10.24, .32, 10.24); m_pFloor->SetColor(0.25, 0.25, 0.25); m_pFloor->Move(0, -.16, 0); m_pFloor->SetShadowMode(0); m_pFloor->Hide(); Probe* probe = Probe::Create(); probe->SetScale(10.24, 10.24, 10.24); probe->UpdateAABB(Entity::GlobalAABB); probe->needsupdate = true; probe->Render(); bool mousedown; while (window->Closed() == false) { mousedown = false; if (window->MouseDown(1)) { m_vCamRot.y += (window->MouseX() - (window->GetWidth() / 2)) * Time::GetSpeed() * 0.2; m_vCamRot.x += (window->MouseY() - (window->GetHeight() / 2)) * Time::GetSpeed() * 0.2; mousedown = true; } if (window->MouseDown(2)) { if (m_pModel != NULL) { float current = m_vCamRot.z; m_vCamRot.z = Math::Clamp(current + (window->MouseY() - (window->GetHeight() / 2)) * Time::GetSpeed() * 0.1, -20.0f, -m_pModel->GetAABB().size.z * 2); } else { m_vCamRot.z += (window->MouseY() - (window->GetHeight() / 2)) * Time::GetSpeed() * 0.1; } mousedown = true; } if (window->KeyHit(Key::F)) { if (m_pFloor->Hidden()) { m_pFloor->Show(); } else { m_pFloor->Hide(); } } if (window->KeyHit(Key::W)) { m_bShowWidget = !m_bShowWidget; } if (window->KeyHit(Key::G)) { m_bShowGrid = !m_bShowGrid; camera->SetGridMode(m_bShowGrid); } if (window->KeyHit(Key::F5)) { m_pModel->Release(); m_pModel = NULL; m_pModel = Model::Load(m_strModelPath); m_pModel->SetShadowMode(Light::Static); } if (mousedown) { window->HideMouse(); window->SetMousePosition(window->GetWidth() / 2, window->GetHeight() / 2); } else { window->ShowMouse(); } Vec3 pos = m_pCamPivot->GetPosition(); camera->SetPosition(pos.x, pos.y + 1, pos.z); camera->SetRotation(m_vCamRot.x, m_vCamRot.y, 0); camera->Move(0, 0, m_vCamRot.z); if (window->KeyHit(Key::D0)) m_intShowCubemap = -1; if (window->KeyHit(Key::D1)) m_intShowCubemap = 0; if (window->KeyHit(Key::D2)) m_intShowCubemap = 1; if (window->KeyHit(Key::D3)) m_intShowCubemap = 2; if (window->KeyHit(Key::D4)) m_intShowCubemap = 3; if (window->KeyHit(Key::D5)) m_intShowCubemap = 4; if (window->KeyHit(Key::D6)) m_intShowCubemap = 5; if (window->KeyHit(Key::D7)) m_intShowCubemap = 6; if (m_intShowCubemap > -1) { if (m_intCurrentCubemap != m_intShowCubemap) { world->SetSkybox(m_pszCubeMaps[m_intShowCubemap]); probe->Render(); m_intCurrentCubemap = m_intShowCubemap; } } else { if (world->GetSkybox() != NULL) { world->SetSkybox(NULL); m_intCurrentCubemap = m_intShowCubemap; } } Time::Update(); world->Update(); world->Render(); context->SetBlendMode(Blend::Alpha); context->SetColor(1, 1, 1, 1); context->DrawStats(2, 2, true); if (m_bShowWidget) { auto dis = 1; Vec3 c = camera->Project(Vec3(0, 0, 0)); Vec3 x = camera->Project(Vec3(dis, 0, 0)); Vec3 y = camera->Project(Vec3(0, dis, 0)); Vec3 z = camera->Project(Vec3(0, 0, dis)); context->SetColor(1, 0, 0, 1); context->DrawLine(c.x, c.y, x.x, x.y); context->SetColor(0, 1, 0, 1); context->DrawLine(c.x, c.y, y.x, y.y); context->SetColor(0, 0, 1, 1); context->DrawLine(c.x, c.y, z.x, z.y); } context->SetColor(1, 1, 1, 1); context->SetBlendMode(Blend::Solid); context->Sync(true); } } modelviewer.zip modelviewer.zip
  3. An update and/or for Turbo, have a wrapper function for entities to get the status of the physics. This: bool sleepstate = NewtonBodyGetSleepState(((NewtonDynamicsBody*)entity->body)->body); Can be this: bool sleepstate = entity->IsPhysicsSleeping() IDK about the name, but this function would be nice.
  4. Tested this Windows, have not yet tested on Linux (Which as the Nivida card.) Anyone can test with Any config with this.
  5. I couldn't get my old Cyclone project to recompile. Let me know if you need it to compile for you to test Josh. For now, I'm sharing this MyGame template in compressed forum with Luawerks installed to easily play with settings/maps. This showcases the shadow issues I'm witnessing. https://1drv.ms/u/s!AunSDJ8Se0vXiTy_uq3dVhRlm3ZP I'm experiencing this with an AMD RX480 when the light quality is set to medium when I play the AI and Events map. When you set the light quality to high, it corrects itself. This does not happen with newer maps/projects.
  6. Ok, I'll PM you the file with instructions. I think the shadow thing is an AMD thing, I might want to test the shadow bug with my Linux machine that's running a NVIDIA card.
  7. What do you need? my map, the project? Mind you, the complete project is over a gig! I didn't really provide because I'm not sure what to provide. The shadow issue is present in the SDK AI and Events map. Just create a new MyGame Project and the shadow issue is right in front of you. This seems to be an issue with lighting set on medium. Moving the light fixes it. Again, AMD RX480 here.
  8. Hello, Not much I can report on this one, but I have prove that shadows and material rotations get corrupted. These shots were from a map from Summer 2017. The shadows are messed up in-game, but the brush face rotation doesn't happen until the map is loaded back in the editor. The screen shot below is running the game as-is as I zipped it in late 2017. (Version 4.3/4.4 I think...) Here are some editor shots Showing that the material's rotation on faces gets corrupted somehow and goes back to 0 for the rotation (While in the game, they are as I set it.) Let me know if you need my project in full. In-fact the AI and Events map has the blocky shadow issues if I recall correctly.
  9. Luawerks has been updated to 1.2.8, making some small adjustments and fixes to the system. If you have previously purchased Luawerks, this update is available for free on the Leadwerks Marketplace. Following changes include: Fixed GUI code for Leadwerks Game Engine 4.6 Removed the feature "allowfullscreenfromeditor" as it was causing conflicts with fullscreen. Added ignoreeditorwinsettings bool setting to force the game to ignore editor launch settings. (Sorry for the delay..) About Luawerks Luawerks is a Lua framework for video games developed on the Leadwerks Game Engine. It supplies developers with additional functions, handles the game loop and allows them to debug their code with a developers console. With all that out of the way, you can focus on making your game fun! You can purchase Luawerks from the Leadwerks Marketplace for $9.99. For documentation and bug reporting, please visit the GitHub page.
  10. Just putting this info here in-case someone looks this up: Add an additional sub-step to prevent the spring from "freaking out" when down. world->Update(2) Current code that's working very nice. function Script:Start() self.entity:SetMass(1) self.entity:SetGravityMode(false) local position=self.entity:GetPosition(true) self.joint=Joint:Slider(position.x,position.y,position.z,0,-20,0,self.entity,nil) self.joint:EnableLimits() self.joint:SetLimits(0,0.02) self.joint:SetFriction(1000,1000) self.joint:SetSpring(2500,2500,50) end function Script:UpdateWorld() if self.joint:GetAngle() >= 0.01 then System:Print(self.joint:GetAngle()) end end
  11. I get this error when I close my app with Ubuntu 18.04.
  12. The child will always be hidden with the parent. I feel any delay will result in the same effect.
  13. I've decided to take a different direction with this. While It's still not 1:1, I now have a perk in doing it the way I am now. Still, would like some insight for future issues,
  14. Hello, This is going to be hard to explain, but I need to parent a model to an entity that I want hidden in-order to get custom VR models to work correctly. The issue is tjhat when the parent is hidden, all of it's children are forced hidden as well. There is a rubber band effect when you just apply the the parent's matrix to the child's matrix every frame. // Update The model to the controller's matrix if (m_pControllerA != nil) { m_pControllerA->SetMatrix(VR::GetControllerModel(m_intControllerA)->GetMatrix()); } if (m_pControllerB != nil) { m_pControllerB->SetMatrix(VR::GetControllerModel(m_intControllerB)->GetMatrix()); } When it is parented to the controller, the models are one-to-one and there is no delay.My question is how do I mimic the matrix updating without actually doing any parenting?
  15. Simple script issue where the stock Sliding Door script no longer starts open when told to do so out of the box. This is my Start function fix. If you think of anything better, let me know. function Script:Start() self.entity:SetGravityMode(false) if self.entity:GetMass()==0 then Debug:Error("Entity mass must be greater than 0.") end self.sound={} if self.opensoundfile~="" then self.sound.open = Sound:Load(self.opensoundfile) end if self.loopsoundfile~="" then self.sound.loop = Sound:Load(self.loopsoundfile) end if self.closesoundfile~="" then self.sound.close = Sound:Load(self.closesoundfile) end if self.sound.loop~=nil then self.loopsource = Source:Create() self.loopsource:SetSound(self.sound.loop) self.loopsource:SetLoopMode(true) self.loopsource:SetRange(50) end if self.manualactivation==false then self.Use=nil end self.opentime=0 --Create a motorized slider joint local position=self.entity:GetPosition(true) local pin=self.distance:Normalize() self.joint=Joint:Slider(position.x,position.y,position.z,pin.x,pin.y,pin.z,self.entity,nil) self.openangle=self.distance:Length() self.closedangle=0 if self.openstate then self.entity:SetPosition(position+self.distance) self.joint:SetAngle(self.openangle) end self.joint:EnableMotor() self.joint:SetMotorSpeed(self.movespeed) end
  16. What about a VR game also?
  17. Confirmed, just tried this. It needs to be debugged via C++, nothing can be on the lua side. On the other side, this demo is from 2013/2014 and a lot has changed since then.
  18. It's a start, might need adjusting later but this is great for VR push buttons. function Script:Start() self.entity:SetMass(1) self.entity:SetGravityMode(false) local position=self.entity:GetPosition(true) self.joint=Joint:Slider(position.x,position.y,position.z,0,-20,0,self.entity,nil) self.joint:EnableLimits() self.joint:SetLimits(0,1) -- The lower the number, the shorter distance. self.joint:SetSpring(1000,1000,self.entity:GetMass()) end function Script:UpdateWorld() if self.joint:GetAngle() >= 0.1 then System:Print(self.joint:GetAngle()) end end
  19. Haven't tried since the 17th, but I'll look at it again with the latest RC. I can't test executing without a launch script as that's needed to function.
  20. Really great, I'm going to need this when it comes time to convert my code for the new engine. I already have some macros in place for this. Hopefully we can see a new beta of Turbo out so I can experiment with my actors.
  21. 4.6 came a long way, you did good work. With this update, I can't wait to move forward with my VR project.
  22. This works with 4.5 and I think it's part of a bigger issue...
  23. Seems the crash fix in the beta broke the controller model entity. As stated here, I can no longer interact with the controller's as model entities.You can see for yourself if you launch the VR Game Template in 4.6 The Teleporter will be broken as the values from the VR controller aren't being applied to the model.
  24. There are a lot of issues with the script editor, but I don't think it's a priority to fix them.
×
×
  • Create New...