Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Keeping the aspect ratio when resizing control


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 Hyrules   Members   -  Reputation: 114

Like
0Likes
Like

Posted 27 July 2012 - 04:12 PM

Hi everyone,

I'm currently having a bug with my aspect ratio in my gis. I'm trying to figure out where I should fix the problem.
I have a panel in a form showing a directx viewport. The problem is when I resize the form i get some kind of scaling which mean that the aspect ratio is not preserved. I'm just not quite sure how to preserve the aspect ratio and how to do it. Is it with the camera or the viewport ?

this is where I set the camera and the world : ptd is the panel on which the viewport is drawn.
[source lang="csharp"] private void SetWorldAndCam() { // Set Constant Buffer cbPerObjectBufferDesc = new BufferDescription(); cbPerObjectBufferDesc.SizeInBytes = Marshal.SizeOf(typeof(cbPerObject)); cbPerObjectBufferDesc.Usage = ResourceUsage.Default; cbPerObjectBufferDesc.BindFlags = BindFlags.ConstantBuffer; cbPerObjectBufferDesc.CpuAccessFlags = CpuAccessFlags.None; cbPerObjectBufferDesc.OptionFlags = ResourceOptionFlags.None; cbPerObjectBufferDesc.StructureByteStride = Marshal.SizeOf(typeof(cbPerObject)); // Set Camera camPos = 5; camPosition = new Vector3(0.0f, 0.0f, -1.0f); camTarget = new Vector3(0.0f, 0.0f, 0.0f); camUp = new Vector3(0.0f, 1.0f, 0.0f); camView = Matrix.LookAtLH(camPosition, camTarget, camUp); camProj = Matrix.OrthoLH(ptd.Width, ptd.Width, 0.00001f, 1000.0f); World = Matrix.Identity; WVP = World * camView * camProj; cbPerObj.WVP = Matrix.Transpose(WVP); DataStream cbData = new DataStream(Marshal.SizeOf(typeof(cbPerObject)), true, true); cbData.Write(cbPerObj); cbData.Position = 0; cbPerObjectBuffer = new Buffer(device, cbData,cbPerObjectBufferDesc); context.VertexShader.SetConstantBuffer(cbPerObjectBuffer, 0); }[/source]
This one is triggered when I resize the form :
[source lang="csharp"] public void ResizeViewport() { renderTarget.Dispose(); swapChain.ResizeBuffers(2, ptd.Width, ptd.Height, Format.R8G8B8A8_UNorm, SwapChainFlags.AllowModeSwitch); using (var resource = Resource.FromSwapChain<Texture2D>(swapChain, 0)) renderTarget = new RenderTargetView(device, resource); depthStencilDesc.Width = ptd.Width; depthStencilDesc.Height = ptd.Height; depthStencilBuffer.Dispose(); depthStencilBuffer = new Texture2D(device, depthStencilDesc); depthStencilView.Dispose(); depthStencilView = new DepthStencilView(device, depthStencilBuffer); context.OutputMerger.SetTargets(depthStencilView,renderTarget); viewport = new Viewport(0, 0, ptd.Width, ptd.Height); context.Rasterizer.SetViewports(viewport); UpdateScene(0, 0, 0); }[/source]

This is where i update the scene.
[source lang="csharp"] public void UpdateScene(float x , float y, float z) { float currentX; float currentY; float currentIH = 0; float currentIW = 0; currentX = x * (float)camPos; currentY = y * (float)camPos; if (z != 0) { if (z > 0 && camPos < 20 ) { // currentIH = ImageHeight / ((float)ptd.Width / (float)ptd.Height); // currentIW = ImageWidth / ((float)ptd.Width / (float)ptd.Height); currentIH = ImageHeight / 2; currentIW = ImageWidth / 2; camPos = camPos + 0.5; } else { if (z < 0 && camPos > 1) { // currentIH = ImageHeight * ((float)ptd.Width / (float)ptd.Height); // currentIW = ImageWidth * ((float)ptd.Width / (float)ptd.Height); currentIH = ImageHeight * 2; currentIW = ImageWidth * 2; camPos = camPos - 0.5; } } Console.Write(camPos + "\r"); ImageHeight = currentIH; ImageWidth = currentIW; } camView = camView * Matrix.Translation(new Vector3(currentX, -currentY, 0.0f)); WVP = World * camView * camProj ; cbPerObj.WVP = Matrix.Transpose(WVP); DataStream cbData = new DataStream(Marshal.SizeOf(typeof(cbPerObject)), true, true); cbData.Write(cbPerObj); cbData.Position = 0; cbPerObjectBuffer = new Buffer(device, cbData, cbPerObjectBufferDesc); context.VertexShader.SetConstantBuffer(cbPerObjectBuffer, 0); }[/source]


any help would be appreciated. thanks in advance.

Edited by Hyrules, 27 July 2012 - 04:18 PM.


Sponsor:

#2 Hyrules   Members   -  Reputation: 114

Like
0Likes
Like

Posted 27 July 2012 - 04:22 PM

correction... still have a aspect ratio problem...

Edited by Hyrules, 27 July 2012 - 04:32 PM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS