Jump to content
  • Advertisement

brega

Member
  • Content Count

    23
  • Joined

  • Last visited

Community Reputation

100 Neutral

About brega

  • Rank
    Member
  1. Thanks for reply. I have switched to "pure" HLSL: D3DXCompileShaderFromFile(...) dev->CreateVertexShader(...) dev->CreatePixelShader(...) ... and use pragma directive: #pragma pack_matrix(row_major)//as D3DXMATRIX ... void VS(...) { OUT.Position = mul(float4(IN.Position.xyz, 1.0f), WorldViewProjection); // for column-major (default) // but this works for both using "effect framework" //OUT.Position = mul(WorldViewProjection, float4(IN.Position.xyz, 1.0f)); } and now shader work as expected. One more question: any particular reason why is that coulmn-major (matrices packing) are set as default for HLSL shaders?
  2. If i assume it correctly default packing for (constant reg.) matrices are column-major? But aren't column-major just transpose of row-major? Then i am confused as how does transforming vertices works with both ways?: OUT.Position = mul(float4(IN.Position.xyz, 1.0f), WorldViewProjection); I thought that for row-major it should be: OUT.Position = mul(WorldViewProjection, float4(IN.Position.xyz, 1.0f));
  3. I have a mesh with this vertex data (examined mesh->DrawSubset() with PIX): type: usage: FLOAT3 POSITION FLOAT3 NORMAL D3DCOLOR COLOR and from dxsdk docs about D3DCOLOR type: Quote: 4-D packed unsigned bytes mapped to 0 to 1 range. Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A). so its 32 bit color value? and in my shader i must set it as float4 for it to work: float4x4 WorldViewProjection; struct VertexData { float3 Position : POSITION; float3 Normal : NORMAL; float4 Color : COLOR; }; struct VertexOutput { float4 Position : POSITION; float4 Color : TEXCOORD0; }; struct PixelOutput { float4 Color : COLOR0; }; void VS(in VertexData IN, out VertexOutput OUT) { OUT.Position = mul(float4(IN.Position.xyz, 1.0f), WorldViewProjection); OUT.Color = IN.Color; } void PS(in VertexOutput IN, out PixelOutput OUT) { OUT.Color = IN.Color; } technique Tech { pass p0 { VertexShader = compile vs_3_0 VS(); PixelShader = compile ps_3_0 PS(); } } but its 4 x 32 bit??? Is there some conversation behind scene that i am not aware of? EDIT: i have another question on same shader: if i set: row_major float4x4 WorldViewProjection;//like D3DXMATRIX //column_major float4x4 WorldViewProjection; row-major packing matrices has 5 instruction slots used and column-major has 6 instruction slots used but in dxsdk they say that column-major is efficient then row-major.
  4. brega

    world*proj for normals

    Thanks for the link. bookmarked.
  5. brega

    world*proj for normals

    Sorry for intrusion but i have a similar question. Suppose that i don't need any scaling (since i scale all meshes in modeling prg.) and i keep "default" scale of xyz.scale = 1.0 and have mesh with this vertex data: struct VertexData { float3 Position : POSITION; float2 TexCoord : TEXCOORD0; float3 Normal : NORMAL; float3 Tangent : TANGENT; float3 Binormal : Binormal; }; and want to "apply" normalmap/parallax effect do i need to transform these with "transpose of the inverse of the world matrix" or just mul it with world?
  6. brega

    confused

    Ahhh, i have missed right vector upDir = cross(lookDir, rightDir)
  7. brega

    confused

    Quote: For a 3D matrix, you have 3 axes - X, Y and Z. You can calculate one of the axes if you know the other two, by using the cross product Sorry, but we already know two axes (cam position & target) how to calculate up direction? D3DXVECTOR3 upDir; D3DXVECTOR3 position = D3DXVECTOR3(0.0f, 50.0f, 0.0f); D3DXVECTOR3 lookAtPoint = D3DXVECTOR3(0.0f, 0.0f, 0.0f); D3DXVec3Cross(&upDir, &position, &lookAtPoint); // this gives me { 0, 0, 0 } Or i misunderstood your response.
  8. brega

    confused

    Then how do you calculate up vector? is this correct?: lookat vector = normalize(lookat - camera pos) up vector = cross (lookat vector)
  9. brega

    [C++] typedef keyword

    Quote: ...you're using www.functionx.com as a C++ reference... yes i was reading from there. thanks for clarification. is this better resource for learning Cplusplus www.cprogramming.com
  10. I need help to better understand typedef keyword. Reading from various sources typedef is used to make name alias for existing data type, this example i can understand: typedef vector<int> vint; ... vint vOfInt;// same as vector<int> vOfInt vOfInt.push_back(3); vOfInt.push_back(4); vOfInt.push_back(5); confusion 1 I was lurking thru "d3d9types.h" header witch is full of typedef's for example this piece of code: typedef struct _D3DVECTOR { float x; float y; float z; } D3DVECTOR; why would they use typedef keyword here? isn't this same as: struct D3DXVECTOR { float x; float y; float z; }; or there is something else "behind scene" going on that i am not aware of? confusion 2 "The typedef keyword can be followed by an attribute before the data type" // global variables typedef public short SmallNumber; typedef private unsigned int Positive; // WTF?! typedef protected double* PDouble; // WTF?! i don't get this one??? when would you use this?
  11. brega

    [C++] Help me choose container

    @Antheus Quote: ...std::partition YEESSSS. This is the thing that i was looking for. Thanks greatly for hint and clear explanation. There is only one thing that i don't understand. What "TBB" stands for? Is it something about multithreading? Since i am still beginner i'll stick to just one until i learn more about it.
  12. I think that is appropriate to continue conversation on my problem in For Beginners forum
  13. I am continuing "pursuit" to solve my problem that i have started here. Here is what am i doing and what i need: I am trying to create scene manager class and manage resources that it holds. I need some type of container that can hold just pointers to data/resources that does not allocate/deallocate nothing since i am doing it by hand. Here is some half pseudo (inserting into container): LightSceneElement* SceneManager::AddLightSceneElement(SceneElement* parent, ELightType type) { LightSceneElement* pLight = new LightSceneElement(); pLight->Init(this, parent, type);// intit basic properties conatainerLights.insert(pLight);// this should be my imagenary container return pLight;// return pLight so i can take control elswhere and manipulate it } then when finished delete all data: void SceneManager::Close() { ... foreach element in containerLights { LightSceneElement* pLight = *containerLights.iter;//obtain pointer delete pLight; //delete data that it points to pLight = 0; } } It should have fast function to sort my elements (that i have talked about in linked thread) and it should be fast at inserting elements: void SceneManager::Draw() { ... // for example render static meshes container<SceneElement*> containerNotCulledStaticMeshes;// name shoud be obvious foreach static mesh in containerAllStaticMeshes // container that holds all static meshes { if seen by camera { SceneElement* pCurrentMesh = *containerAllStaticMeshes.iter;//obtain pointer containerNotCulledStaticMeshes.insert(pCurrentMesh);//just insert pointer } } ... containerNotCulledStaticMeshes.sort(SceneElement::BackToFront());//sort meshes foreach static mesh in containerNotCulledStaticMeshes { SceneElement* pElement = *containerNotCulledStaticMeshes.iter;//obtain pointer SetShader(); pElement->Draw(); } } Is there some kind of "container" for this?
  14. no need for the first link, i have already got that basic knowledge about pointers. i have never tried to make my own linked list container but instead i use std::list one so i have no idea how this "system" manipulates elements. To me its just a "black box". i will try to make my own tomorrow based on your second link (and ill try to find some others for reference) and your "ideas". if i stuck i hope you don't mind continue helping me? thanks greatly.
  15. Dawoodoz, you make my brain melt down. Since i am a beginner i need to chew this one step a time so please try and explain it to me. 1. Are you talking about some custom linked list container that you've made? 2. Quote: For fixed size allocation... known number of elements in front? something like vector::reserve but for list? Quote: reuse chunks of memory by inserting garbage memory into a linked list of pointers. what is chunk? single element in a list? what is garbage memory? list filled with (for example) same dummy element? 3. Quote: The pointer to the next chunk will have a special place in each allocation... i don't get this, what this means? And rest of text also is confusing for me.
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!