• Content count

  • Joined

  • Last visited

Community Reputation

172 Neutral

About Tthe13th

  • Rank
  1. Virtual Robots - Robot programming simulator

    Update: Added Actor. You can now be part of the world and give your robots commands. How to use actor commands is shown in in-game Tutorials and also in the following video: Also quad-copters were added to observe your robots.
  2. Hello, Virtual Robots is a robot programming simulator, currently submitted to Steam Greenlight. The objective of this game is to write code for your robots. Yes, WRITE. Ironically, this game does not have a code editor. The best code editor you can get for Virtual Robots is probably Notepad++. After you write code, you can assign it to your robots and watch them to do, what you told them to do. Robots can carry boxes, use guns and swords, navigate through a maze and open doors with sensors. Virtual Robots use Pyrois scripting language for its code: If you like this game, please vote for it on Steam Greenlight:
  3.   Hello, at some point of game programming process i realized that simple NPCs that can attack player or run away won't be enough. I needed a better way to tell a NPC what it is supposed to do. I know there are many scripting languages that are able to do this, but i'm a noob and i couldn't implement them. So i decided to make my own scripting language. One with a C like syntax, that would be easy to implement and easy to use. Pyrois Scripting Language is designed mainly for NPC scripting in computer games but can be used in any application that requires custom command execution. Pyrois is writen in C++ and released under GNU General Public License (GPLv3) as C++ library. Pyrois Scripting Language has syntax similar to C programming language and supports arrays and structures. Pyrois is approximately 20-300 times slower than C++ (this depends on type of code you write with Pyrois). You can download Pyrois SDK from official website:
  4. Hello After some time i finally decided to release my HeightMap editor. I decided to release it as freeware with optional donations.   Zemnik is a HeightMap Editor for small to medium-size HeightMaps. Maximum tested safe working size was 12000x12000 (depends on RAM size). Zemnik comes with many build in functions for manual HeightMap editing. Zemnik supports per-vertex and per-pixel texturing with maximum of 255 different textures. Maximum tested per-pixel texture size was 7000x7000 (depends on RAM size). Zemnik also allws you to place markers with text, position and orientation on your map. With the ability to place 3D models it could be used as map editor for games. Last, but not least, Zemnik can load already created HeightMaps, and use them as models.   Zemnik uses DirectX 11 for rendering so it's for Windows only although maps and other files created with Zemnik are usable in any other application. After downloading Zemnik you can find c++ header and source on how to load and use Zemnik  HeightMap files. It also contains HLSL example of how Zemnik HeightMaps are rendered with DirectX.   official website:   This is the very first project i officially released so i'm sure i made some beginner mistakes. If you find any bugs or something that should be different please post it here.   I made a short video on how make a simple map with Zemnik:
  5. Texture array with mipmaps

    Solved with pDeviceContext->CopySubresourceRegion(pTextureArray, i * 9, 0, 0, 0, pNewTexture, 0, 0); pDeviceContext->GenerateMips(pTextureSRV);
  6. Hello, a while ago i started to use texture arrays for multitexturing in terrain shader. I didn't know how to load image files for texture array, so i used ID3D11DeviceContext::CopySubresourceRegion to populate texture array with textures loaded with WICTextureLoader. That looks like this: D3D11_TEXTURE2D_DESC textureDesc; D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc; ZeroMemory(&shaderResourceViewDesc, sizeof(shaderResourceViewDesc)); ZeroMemory(&textureDesc, sizeof(textureDesc)); textureDesc.Width = TEX_PIXEL_SIZE; textureDesc.Height = TEX_PIXEL_SIZE; textureDesc.MipLevels = 1; textureDesc.ArraySize = v_texFName.size() + 1; textureDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; textureDesc.SampleDesc.Count = 1; textureDesc.Usage = D3D11_USAGE_DEFAULT; textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; textureDesc.CPUAccessFlags = 0; textureDesc.MiscFlags = 0; shaderResourceViewDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; shaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; shaderResourceViewDesc.Texture2DArray.MostDetailedMip = 0; shaderResourceViewDesc.Texture2DArray.MipLevels = 1; shaderResourceViewDesc.Texture2DArray.ArraySize = v_texFName.size() + 1; shaderResourceViewDesc.Texture2DArray.FirstArraySlice = 0; HRESULT hr; hr = pd3dDevice->CreateTexture2D(&textureDesc, 0, &pTextureArray); if (FAILED(hr)) debugMsg("FAIL pTextureArray: %d", hr); hr = pd3dDevice->CreateShaderResourceView(pTextureArray, &shaderResourceViewDesc, &pTextureSRV); if (FAILED(hr)) debugMsg("FAIL pTextureSRV: %d", hr); WCHAR wcharstr[260]; ID3D11Resource *pNewTexture; for (UINT i = 0; i < v_texFName.size(); i++) { MultiByteToWideChar(CP_ACP, 0, v_texFName[i]->text, -1, wcharstr, 260); CreateWICTextureFromFile(pd3dDevice, wcharstr, &pNewTexture, 0); DXUTGetD3D11DeviceContext()->CopySubresourceRegion(pTextureArray, i, 0, 0, 0, pNewTexture, 0, 0); SAFE_RELEASE(pNewTexture); } Now after reading some articles i noticed that WICTextureLoader can automatically generate mipmaps. CreateWICTextureFromFileEx(pd3dDevice, pDeviceContext, wcharstr, 0, D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET, 0, D3D11_RESOURCE_MISC_GENERATE_MIPS, false, &pNewTexture, 0); But now i don't know how to copy these mipmapped textures into texture array. According to some articles it should work like this:     textureDesc.MipLevels = 0;     textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;     textureDesc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS;     shaderResourceViewDesc.Texture2DArray.MipLevels = -1;     // if texture has 9 mipmap levels for (UINT i = 0; i < v_texFName.size(); i++) { MultiByteToWideChar(CP_ACP, 0, v_texFName[i]->text, -1, wcharstr, 260); CreateWICTextureFromFileEx(pd3dDevice, DXUTGetD3D11DeviceContext(), wcharstr, 0, D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET, 0, D3D11_RESOURCE_MISC_GENERATE_MIPS, false, &pNewTexture, 0); for (UINT j = 0; j < 9; j++) DXUTGetD3D11DeviceContext()->CopySubresourceRegion(pTextureArray, i * 9 + j, 0, 0, 0, pNewTexture, j, 0); SAFE_RELEASE(pNewTexture); } But this doesn't seem to work. (it works only for the nearest mip level)   My questions are: Why does a 256x256 px texture have 9 mip levels, and how do i get number of mip levels from a texture? Why does the last code work only for the first mip level? How do i populate a texture array with mipmapped textures?
  7. Quaternion as angular velocity

    Thanks for the replies, at first i thought i shouldn't use slerp as i couldn't simply transfer from one orientation to another, and really need angular velocity. Then i realized i can use slerp to create angular velocity if i simply lerp between identity quaternion and Q1->Q2 quaternion. What i did:   get quaternion that points from matrix 1 to matrix 2: Q1 -> Q2 to get this i did q = Q1^(-1) * Q2   now q is orientation that is requires to rotate Matrix 1 to Matrix 2 to get a small part of this orientation every frame update quatnow = XMQuaternionSlerp(XMQuaternionIdentity(), m_vAdjustQuat, fElapsedTime / CLIENT_POSITION_ADJUST_TIME); m_mWorldMat = XMMatrixRotationQuaternion(quatnow)*m_mWorldMat;   This looks kinda promising but there are still some visible lags.
  8. Hello, first, i don't really understand quaternions, so please keep it simple. I have 2 transformation matrices and i need one of them to move and rotate so, that over time, it becomes the exact same matrix as the second one. Moving this matrix is simple. Let's say M1 has position P1 and M2 has position P2. I want that over time t, P1 moves to P2. I create vector v = P2 - P1 v = normalized(v) * (length(v) / t) Now every frame i just have to P1 += v*ElapsedTime t -= ElapsedTime while t>0   How do i do this with a quaternion? Until now i used axis based angles and rotation matrices to rotate an object. This was simple M = RotationMatrix( alpha * ElapsedTime )*M I'm using DirectXMath, to get quaternion from matrix there is XMQuaternionRotationMatrix method, to create rotation matrix from quaternion there is XMMatrixRotationQuaternion.   I need quaternion that i can use as M = XMMatrixRotationQuaternion( quaternion* ElapsedTime )*M But i don't think i can simply multiply a quaternion with a scalar.   Questions are: How do i get a quaternion that can be used to rotate one matrix to another and how can i use this quaternion to rotate that matrix over time t?
  9. Sorry i forgot to mention, i'm using C++ with RakNet library.
  10. Hi, For a while i started with network programming. So far i created networking part for my game and a simple game server. To play the game, players have to log in with their username and password. So far, the login procedure is simple, player sends their user name and password as simple strings. Passwords on the server are also stored as simple text files. When player attempts to log in, server reads the password from file and compares it with the received password. At this point we really can't talk about security, so here is what i wanted to ask. I have read that passwords are usually stored in a salted hash form. The salt is also stored. When the server receives password from player it tries to hash it again and then compares it with stored hash. Now to the question: How do i send the password over the LAN / internet? Sending plain text isn't secure. What are the usual methods to send passwords? What are the usual methods to log in to games that require user name, password?
  11. Hello all, Let's say i have an array of objects and i want to test each object in this array with every other object in this array. The single threaded solution would be a for for test: for (UINT i=0; i < v_obj.size() - 1; i++) // -1 - no need to test the last one for (UINT j = i + 1; j < v_obj.size(); j++) doSomething(v_obj[i], v_obj[j]); I want to ask how the multithreaded solution would look like? I was thinking about leaving the first for loop and dividing the second based on number of threads. Each thread would do the test with part of the remaining array. Is there a standard way to do tests like this? How would your solution to this look like?
  12. Texture render target size

      THIS, thank you good sir.
  13. Texture render target size

    Scene rendered with shadows: Here size of shadow map texture is same as size of window: Here size of shadow map is 1024x1024, different than size of window:   Maybe i asked a wrong question in the first place. This is how i switch render targets: ID3D11RenderTargetView *prentw = 0; ID3D11DepthStencilView *dsw = 0; float ClearColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; pd3dImmediateContext->OMGetRenderTargets(1, &prentw, &dsw); pd3dImmediateContext->OMSetRenderTargets(1, &m_ShadowCtrl->m_pShadowRTV[0], m_ShadowCtrl->m_pDSV); pd3dImmediateContext->ClearDepthStencilView(m_ShadowCtrl->m_pDSV, D3D11_CLEAR_DEPTH, 1.0, 0); pd3dImmediateContext->ClearRenderTargetView(m_ShadowCtrl->m_pShadowRTV[0], ClearColor); // // rendering // pd3dImmediateContext->OMSetRenderTargets(1, &prentw, dsw); SAFE_RELEASE(dsw); SAFE_RELEASE(prentw); After pd3dImmediateContext->OMSetRenderTargets(1, &m_ShadowCtrl->m_pShadowRTV[0], m_ShadowCtrl->m_pDSV); the size of render target changes from size of window to size of texture. Does ID3D11DeviceContext know that the size changed? If no, how do i tell him?
  14. Texture render target size

    What i want to do: i want to apply blured shadows to my scene. I know how shadow maps work. First i render the scene depths from point of light with (yes) orthogonal projection matrix to a texture. First image Then i apply blur efect to this texture. Second image. Then i use this texture to determine whitch parts of the rendered scene are in shadows.     Now this is where things get complicated. The third image is renderd in the same way as the first. Same projection matrix. The fourth image is the same as the second image. Same blur effect same projection matrix. The only difference between first/third, second/fourth image is the size of texture to whitch i render. First and second textures have same size as screen and third and fourth have size 1024 x 1024.
  15. Texture render target size

    Problem isn't creating custom sized texture, problem is using custom size texture as render target. I show it, these are textures with screen size: depth: blur: These are textures with size 1024 x 1024: depth: blur: Rendered scene wont fit into that texture.