Jump to content

Search the Community

Showing results for tags 'getScreenPosition'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Welcome to UNIGINE Forums
    • News & Announcements
    • Getting started
  • Development
    • Content Creation
    • World Design
    • Rendering
    • Animation
    • Physics, Navigation and Path Finding
    • UI Systems
    • Sound & Video
    • Editor
    • C++ Programming
    • C# Programming
    • Networking
    • Sim IG (Image Generator)
    • VR Discussions
    • General
  • Improving UNIGINE
    • Documentation
    • Feedback for UNIGINE team
    • Bug Reports
    • Unigine SDK Beta feedback
  • Community
    • Add-on Store (https://store.unigine.com/)
    • Showcase
    • Collaboration
    • Tools, Plugins, Materials & Tutorials
    • General Discussions
  • Legacy
    • UnigineScript

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Found 1 result

  1. Hi, I am trying to get the screen position in Unigine 2.3.1 for world coordinates and it always returns 0,0 I am drawing the three points on the screen with the visualizer and they are showing up, so I know they are on screen and visible. Capturing the screen and finding their points in a paint program I can also figure out what their screen coordinates are. However, when I try to figure it out in code, it always returns 0,0. I've also adapted the getScreenPosition script function to c++, but that doesn't quite work either. Maybe there's a bug in my conversion code. Anyways, how do I get the screen coordinate in c++? Here's my c++ code: int screenX, screenY; player->getScreenPosition(screenX, screenY, Vec3(worldBase), App::get()->getWidth(), App::get()->getHeight()); Log::message("screenBase 2 %f,%f\n", screenX, screenY); //always outputs 0,0 In the case above, worldBase is set to (0,0,0). In my example, it should be outputting 960, 540. As I said above, I also tried converting your getScreePosition script function to c++, but it doesn't work, maybe you can spot a bug with it? I can't. dvec2 getScreenPosition(const dmat4& mvp, const dvec3& point) { int h = Gui::get()->getHeight(); int w = Gui::get()->getWidth(); dvec4 p = mvp * dvec4(point, 1.0); return dvec2(w * (0.5 + p.x * 0.5 / p.w), h * (0.5 - p.y * 0.5 / p.w)); } dmat4 getModelViewProjection() { PlayerSpectatorPtr player = PlayerSpectator::cast(Game::get()->getPlayer()); mat4 projection = player->getProjection(); Mat4 modelview = player->getIWorldTransform(); projection.m00 *= float(Gui::get()->getHeight()) / Gui::get()->getWidth(); dmat4 wvp = dmat4(projection) * dmat4(modelview); return wvp; } I calculate the modelViewProjection matrix once and then pass it to all the getScreenPosition calls. You may also wonder why I'm not doing the w < 0 check. I happen to know these points will always be on screen, so I just skipped that.
×
×
  • Create New...