working out the center of the screen

Started by
9 comments, last by Jacob Mnasin 10 years, 5 months ago

how do i work out the center of the screen so i can space those cordinates for the vertexbuffer,etc these values so this button will be center of the screen and how would i give some control to this button such as mouse clicking on it,thanks if you can help...

the below code is for directx 9


// create the vertices using the CUSTOMVERTEX struct
CUSTOMVERTEX vertices[] =
{
//Triangle 1
{ 150.0f, 400.5f, -5.5f, //xyz screenspace
0, 1, //textures coords
1.0f }, //rhw
// D3DCOLOR_XRGB(0, 0, 255), }, //diffuse blue
 
{ 325.0f, 500.0f, -5.5f, //xyz screenspace
1, 1, //textures coords
1.0f }, //rhw
//D3DCOLOR_XRGB(0, 255, 0), }, //diffuse green
 
{ 150.0f, 500.0f, -5.5f, //xyz screenspace
1, 0, //textures coords
1.0f }, //rhw
//D3DCOLOR_XRGB(255, 0, 0), }, //diffuse red
 
 
//Triangle 2
{ 325.0f, 500.0f, -5.5f, //xyz screenspace
1, 0, //textures coords
1.0f }, //rhw
//D3DCOLOR_XRGB(0, 255, 0), }, //diffuse green
 
{ 150.0f, 400.5f, -5.5f, //xyz screenspace
0, 0, //textures coords
1.0f }, //rhw
//D3DCOLOR_XRGB(0, 0, 255), }, //diffuse blue
 
{ 325.0f, 400.5f, -5.5f, //xyz screenspace
0, 1, //textures coords
1.0f }, //rhw
//D3DCOLOR_XRGB(255, 0, 0), }, //diffuse red
};

:)
Advertisement

The screen center is screenWidth/2, screenHeight/2.

If you want to place the object completely centered, you would have to use the following formula:

x and y being the top left corner of object and rectangleWidth and rectangleHeight being the width and height of the rectangle you are rendering.

x = screenWidth/2 - rectangleWidth/2;

y = screenHeight/2 - rectangleHeight/2;

Picking is a bit different and required that you first implement at least a basic collision detection. for a few examples see:

Program Files/Microsoft DirectX SDK (June 2010)\Samples\C++\Misc\Collision

http://www.braynzarsoft.net/index.php?p=D3D11PICKING

http://www.rastertek.com/dx11tut47.html

Thanks for the reply, do you have to use picking to press buttons?, would i not be able to use mouse cords instead of rays?

:)

yes if you're rending in 2D.

x,y being the top left corner of your button:

you would check if the mouse position is greater then x,y but less then x+width, y+height.

great,i think i have the idea now,theres going to be a global bool with mousepress correct if i am using windows messages,else how else will the rest of the code know i am pressing the mouse button.

:)

You're honestly better off learning DX11...theres no reason to learn something which will soon be discontinued. DX includes functions for detecting mouse and keyboard input.

You should have a look at these:

http://www.rastertek.com/tutdx11.html

DirectX 11 is way to complicated for me ive already tried,I think directx 9 is still worth learning before 10,11 even tho it has the same drawing polygon concepts,thanks for your suggestion...

:)

this is what i have, i am stuck on the last point

//Triangle 1
{ 800 / 2 - triangle.right/2, //x
600 / 2 - triangle.bottom/2, //y
-5.5f, //z screenspace
//0, 1, //textures coords
1.0f }, //rhw
// D3DCOLOR_XRGB(0, 0, 255), }, //diffuse blue
{ 800 / 2 + triangle.right/2, //x
600 / 2 - triangle.bottom / 2, //y
-5.5f, //z screenspace
//1, 1, //textures coords
1.0f }, //rhw
//D3DCOLOR_XRGB(0, 255, 0), }, //diffuse green
{ 800 / 2 - triangle.right/2, -5.5f, //xyz screenspace
600 / 2 + triangle.bottom / 2, //y
//1, 0, //textures coords
1.0f }, //rhw
//D3DCOLOR_XRGB(255, 0, 0), }, //diffuse red
i am sure this is right, but i cannot see the last point??
:)

int width = 200;
int height = 150;

position.x = screenWidth/2 - width/2;
position.y = screenHeight/2 - height/2;

// create the vertices using the CUSTOMVERTEX struct
CUSTOMVERTEX vertices[] =
{
//Triangle 1

vertices[0].position = (position.x, position.y, -1.0f);  // Top left.
vertices[0].uv = (0.0f, 0.0f);

vertices[1].position = (position.x + width, position.y - height, -1.0f);  // Bottom right.
vertices[1].uv = (1.0f, 1.0f);

vertices[2].position = (position.x, position.y - height, -1.0f);  // Bottom left.
vertices[2].uv = (0.0f, 1.0f);

// Second triangle.
vertices[3].position = (position.x, position.y, -1.0f);  // Top left.
vertices[3].uv = (0.0f, 0.0f);

vertices[4].position = (position.x + width, position.y, -1.0f);  // Top right.
vertices[4].uv = (1.0f, 0.0f);

vertices[5].position = (positon.x + width, position.y - height, -1.0f);  // Bottom right.
vertices[5].uv = (1.0f, 1.0f);

shouldnt there be a vertices[0].rhw, and then ignore the 3rd param has the z value is not needed if .position is a D3DXVECTOR3?

:)

This topic is closed to new replies.

Advertisement