• FEATURED

View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

# working out the center of the screen

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.

10 replies to this topic

### #1Anddos  Members

Posted 07 November 2013 - 10:00 PM

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
};



#### Attached Thumbnails

Edited by Anddos, 07 November 2013 - 11:55 PM.

### #2JacobM  Members

Posted 08 November 2013 - 06:49 PM

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

### #3Anddos  Members

Posted 08 November 2013 - 07:40 PM

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?

### #4JacobM  Members

Posted 08 November 2013 - 07:45 PM

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.

### #5Anddos  Members

Posted 08 November 2013 - 07:50 PM

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.

### #6JacobM  Members

Posted 08 November 2013 - 08:00 PM

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

### #7Anddos  Members

Posted 08 November 2013 - 08:13 PM

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...

Edited by Anddos, 08 November 2013 - 09:54 PM.

### #8Anddos  Members

Posted 08 November 2013 - 09:05 PM

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??

#### Attached Thumbnails

Edited by Anddos, 08 November 2013 - 09:57 PM.

### #9JacobM  Members

Posted 08 November 2013 - 11:08 PM

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);



### #10Anddos  Members

Posted 09 November 2013 - 12:50 AM

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?

Edited by Anddos, 09 November 2013 - 01:01 AM.

### #11JacobM  Members

Posted 09 November 2013 - 02:28 AM

I was just giving you an example. you will have to plug them in on your own using the variable names you declared in CUSTOMVERTEX.

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.