{"id":20863871,"url":"https://github.com/ziaenezhad/pei","last_synced_at":"2026-05-21T03:03:22.964Z","repository":{"id":84905405,"uuid":"99994534","full_name":"ziaenezhad/Pei","owner":"ziaenezhad","description":"Helper Classes for 3D Graphic, Inputs Handling and Resources Management in C++","archived":false,"fork":false,"pushed_at":"2017-08-11T06:34:43.000Z","size":24410,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-19T08:16:20.505Z","etag":null,"topics":["c-plus-plus","direct3d","input","resource-management","utilities"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ziaenezhad.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-08-11T05:25:33.000Z","updated_at":"2017-11-12T00:44:22.000Z","dependencies_parsed_at":"2023-09-15T02:38:52.975Z","dependency_job_id":null,"html_url":"https://github.com/ziaenezhad/Pei","commit_stats":null,"previous_names":["ziaenezhad/pei"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziaenezhad%2FPei","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziaenezhad%2FPei/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziaenezhad%2FPei/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziaenezhad%2FPei/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ziaenezhad","download_url":"https://codeload.github.com/ziaenezhad/Pei/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243236668,"owners_count":20258884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","direct3d","input","resource-management","utilities"],"created_at":"2024-11-18T05:33:41.223Z","updated_at":"2025-12-29T03:23:28.951Z","avatar_url":"https://github.com/ziaenezhad.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Helper Classes for 3D Game Development\n\n![](https://raw.githubusercontent.com/sajjad-shirazy/Pei/4dbb298f/MSVS2008/ClassDiagram1.png)\n\n## Dependencies\n- stdlib\n- sigc++\n- windows\n- d3d9\n- d3dx9\n- dinput\n\n## Usage\n```c++\n#include \"../Pei.h\"\n\nusing namespace Pei::Graphic;\nusing namespace Pei::Utility;\nusing namespace Pei::Input;\nSPRenderer* renderer = 0;\nclass Entity : public SPSlotHost\n{\npublic:\n\tvoid OnMouseMove(SPMouse::MouseState mouseState)\n\t{\n\t\tsystem(\"cls\");\n\t\tstd::cout\u003c\u003c\"MouseMove X: [\"\u003c\u003cmouseState.position.x\u003c\u003c\"]\"\u003c\u003cstd::endl;\n\t\tstd::cout\u003c\u003c\"MouseMove Y: [\"\u003c\u003cmouseState.position.y\u003c\u003c\"]\"\u003c\u003cstd::endl;\n\t}\n\tvoid OnMouseDown(SPMouse::MouseState mouseState)\n\t{\n\t\tsystem(\"cls\");\n\t\tstd::cout\u003c\u003c\"MouseDown  : [\"\u003c\u003cmouseState.rgbButtons[0]\u003c\u003c\"]\"\u003c\u003cstd::endl;\n\t\tstd::cout\u003c\u003c\"MouseMove X: [\"\u003c\u003cmouseState.position.x\u003c\u003c\"]\"\u003c\u003cstd::endl;\n\t\tstd::cout\u003c\u003c\"MouseMove Y: [\"\u003c\u003cmouseState.position.y\u003c\u003c\"]\"\u003c\u003cstd::endl;\n\t}\n\tvoid OnMouseUp(SPMouse::MouseState mouseState)\n\t{\n\t\tsystem(\"cls\");\n\t\tstd::cout\u003c\u003c\"MouseUp    : [\"\u003c\u003cmouseState.rgbButtons[0]\u003c\u003c\"]\"\u003c\u003cstd::endl;\n\t\tstd::cout\u003c\u003c\"MouseMove X: [\"\u003c\u003cmouseState.position.x\u003c\u003c\"]\"\u003c\u003cstd::endl;\n\t\tstd::cout\u003c\u003c\"MouseMove Y: [\"\u003c\u003cmouseState.position.y\u003c\u003c\"]\"\u003c\u003cstd::endl;\n\t}\n\tvoid OnKeyDown(SPKeyboard::Keys key)\n\t{\n\t\tstatic bool grid = false;\n\t\tif(key == SPKeyboard::Key_W)\n\t\t{\n\t\t\tgrid = !grid;\n\t\t\tif(grid)\n\t\t\t\trenderer-\u003eSetFillMode(SPRenderer::FillMode_Wireframe);\n\t\t\telse\n\t\t\t\trenderer-\u003eSetFillMode(SPRenderer::FillMode_Solid);\n\t\t}\n\t}\n\n};\n\nint main()\n{\n\tSPLoopManager loopman;\n\tloopman.AllowSleep(true);\n\n\t\n\tSPWindow win(0,\"; )\");\n\tHWND window = win.GetHandle();\n\tSPMouse mouse(window);\n\tSPKeyboard keyboard(window);\n\tEntity *en = new Entity();\n\tmouse.onMouseMove += en;\n\tmouse.onMouseDown += en;\n\tmouse.onMouseUp += en;\n\tkeyboard.onKeyDown += en;\n\n\trenderer = new SPRenderer(win.GetHandle());\n\t//renderer-\u003eFullscreen();\n\tSPMesh* plane = Pei::SPResourceManager::GetMesh(\"goll.x\");\n\tSPRenderingParameters rp;\n\trenderer-\u003eSetLightEnable(true);\n\trenderer-\u003eSetAlphaTestEnable(false);\n\trenderer-\u003eSetAlphaBlendEnable(false);\n\trenderer-\u003eSetTextureSamplerEnabled(true);\n\t//renderer-\u003eSetFillMode(SPRenderer::FillMode_Wireframe);\n\trenderer-\u003eGetCamera()-\u003eWalk(-350);\n\trenderer-\u003eGetCamera()-\u003eFly(60);\n\trenderer-\u003eGetCamera()-\u003ePitch(0.2f);\n\t//renderer-\u003eGetCamera()-\u003eSetCameraSize(1366,768);\n\t//rp.position.z += 2500;\n\trp.Transform();\n\tplane-\u003eSetCurrentSubsetIndex(0);\n\n\tSPColor color(255,0,255);\n\n\twhile(!win.IsWindowClosed())\n\t{\t\t\n\t\tloopman.BeginLoop();\n\t\tSPWindow::ProcessMessages();\n\t\trenderer-\u003eStartRendering();\n\t\trenderer-\u003eClearBackBuffer(\u0026color);\n\t\trp.rotation.y += 0.005f;\n\t\trp.Transform();\n\t\t\n\t\trenderer-\u003eGetCamera()-\u003eWalk(0.2f);\n\t\tplane-\u003eRender(\u0026rp);\n\t\trenderer-\u003eStopRendering();\n\t\t//mouse.Update();\n\t\tkeyboard.Update();\n\t\tloopman.EndLoop();\n\t}\n\tPei::SPResourceManager::RemoveResources(0);\n\treturn 0;\n}\n```\n\n## Result\n![](https://cdn.rawgit.com/sajjad-shirazy/Pei/f59c8199/Screenshots/Screenshot%20(4).png)\n![](https://cdn.rawgit.com/sajjad-shirazy/Pei/f59c8199/Screenshots/Screenshot%20(6).png)\n![](https://cdn.rawgit.com/sajjad-shirazy/Pei/f59c8199/Screenshots/Screenshot%20(7).png)\n\n## Classes\n### Utility\n- Pei::Utility::SPArchive\n- Pei::Utility::SPArchive::IOType\n- Pei::Utility::SPErrorHandler\n- Pei::Utility::SPLoopManager\n- Pei::Utility::SPSerializable\n- Pei::Utility::SPTimer\n- Pei::Utility::SPWindow\n- Pei::Utility::SPColor\n- Pei::Utility::SPRect\n- Pei::Utility::SPSlotHost\n\n### Graphic\n- Pei::Graphic::SPCamera\n- Pei::Graphic::SPCamera::ProjectionTypes\n- Pei::Graphic::SPMesh\n- Pei::Graphic::SPRenderer\n- Pei::Graphic::SPRenderer::FillMode\n- Pei::Graphic::SPTexture\n- Pei::Graphic::SPVertex_PNDT\n- Pei::Graphic::SPVertex_PD\n- Pei::Graphic::SPMaterial\n- Pei::Graphic::SPRenderingParameters\n- Pei::Graphic::SPRenderingParameters::BlendingMode\n- Pei::Graphic::SPVector3\n\n### Resource\n- Pei::SPResource\n- Pei::SPResource::Types\n- Pei::SPResourceManager\n\n### Input\n- Pei::Input::SPKeyboard\n- Pei::Input::SPKeyboard::Keys\n- Pei::Input::SPKeyboard::OnKeyDown\n- Pei::Input::SPKeyboard::OnKeyUp\n- Pei::Input::SPMouse\n- Pei::Input::SPMouse::Buttons\n- Pei::Input::SPMouse::MouseState\n- Pei::Input::SPMouse::OnMouseMove\n- Pei::Input::SPMouse::OnMouseDown\n- Pei::Input::SPMouse::OnMouseUp","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziaenezhad%2Fpei","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fziaenezhad%2Fpei","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziaenezhad%2Fpei/lists"}