• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
Anddos

what is this code doing

3 posts in this topic

This is the code

 

[code]POINT p;
GetCursorPos(&p);
p.x = max(min(p.x, 800), 0); p.y = max(min(p.y, 600), 0); float x = (p.x - 400) / 800.0f; float y = (p.y - 300) / 600.0f;    
D3DXVECTOR3 lookAt(x, 1.5f - y, -1.0f);[/code]

Edited by Michael Tanczos
0

Share this post


Link to post
Share on other sites

It's getting the position of the cursor on the screen, seeing how far away it is from the center of the screen, and then creating a vector that represents this offset, likely to be used to make the camera look at where the cursor is.

2

Share this post


Link to post
Share on other sites

To further elaborate:

max() returns whichever of the two parameters are larger.

min() returns whichever of the two parameters are smaller.

 

p.x and p.y are the location, in pixels, of the mouse on the screen.

The screen's width is 800, and the height is 600.

 

So: 

p.x = max(min(p.x, 800), 0);  //If 'p.x' is greater than the screen's width, it returns the screen's width (just to keep it in bounds).

p.x = max(min(p.x, 800), 0);  //If 'p.x' is less than 0, it returns 0 (just to keep it in bounds).

 

And the same with 'p.y' and the screen's height.

 

 

float x = (p.x - 400) / 800.0f; //Subtracts half the screen's width from 'p.x', to put 'p.x' in a range from -400 to 400 with 0 being the center of the screen.

float x = (p.x - 400) / 800.0f//Divides it by 800, to convert the range from "-400 to 400" to "-0.5 to 0.5".

 

And the same with 'p.y'...

 

D3DXVECTOR3 lookAt(x, 1.5f - y, -1.0f); //Creates a 3D math vector for Direct3D. Based off the name of the vector, it'll probably be used to reorient the camera to look in that direction.

2

Share this post


Link to post
Share on other sites
(I would expect that GetCursorPos returns pixel indices in the range [0, nCols-1] and [0, nRows-1] for a nCols by nRows screen. If so, then the following 2 aspects are worth to be mentioned. Besides these details the posts above already stated what the snippet is good for.)

First, a given screen of 800 x 600 pixels has pixel indices ranging from 0 to 799 and from 0 to 599. Cursor positions are usually given by the pixel indices the hot spot is over, so the maximums should IMHO be limited to 799 and 599 instead of 800 and 600. (Also I'm not sure why the given code snippet needs to limit the cursor position at all.)

Second, a pixel is a tiny area, but nevertheless an area, while a D3DXVECTOR denotes an infinitesimal small, well, point in this case. To map from the one to the other, one has to decide what location on a pixel should be hit. If nothing "special" is done (as in the given solution), then the lower left corner will be hit. This causes the following asymmetry: The left lower pixel will result in (x,y) = (-0.5, -0.5), while the upper right pixel will result in (x,y) = (0.49875, 0.49833). If, on the other hand, the center should be hit (for symmetrical results), then half the extent of a pixel has to be considered.

Another consequence is that with the solution "as is" the (x,y) = (0,0) results for the pixel to the right and top of the real center of the screen. Actually the screen's center is not covered by a pixel, because it lies at the corners of 4 surrounding pixels, so you can't address it with the pointer device. Edited by haegarr
1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0