• Advertisement

MrDarkKnight

Member
  • Content count

    41
  • Joined

  • Last visited

Community Reputation

98 Neutral

About MrDarkKnight

  • Rank
    Member
  1. OpenGL Free Camera problem

    Thank you. You were a lot of help. I didn't know that Matrix.CreateFromYawPitchRoll() expects the angles in radians. I should read the hints in VS2010 more often. [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] Anyways I just did the following and it fixed my problem. [CODE] public void Lock() { float Angle = 90.0f; Angle = MathHelper.ToRadians(Angle); if (Pitch > Angle) Pitch = Angle; if (Pitch < -Angle) Pitch = -Angle; if (Yaw > (Angle * 4) ) Yaw -= (Angle * 4); if(Yaw < (Angle - Angle) ) Yaw += (Angle * 4); } [/CODE] also I did what you said and changed the lock function place in my code. If i don't, crazy things happens [img]http://public.gamedev.net//public/style_emoticons/default/biggrin.png[/img] [CODE] public void Control(GraphicsDeviceManager graphics, GameTime gameTime, float Velocity, float MouseSensitivity) { ....... // Determine how much the camera should turn float deltaX = MouseSensitivity * (ScreenX - (float)mouseState.X); float deltaY = MouseSensitivity * (ScreenY - (float)mouseState.Y); Lock(); Mouse.SetPosition(ScreenX, ScreenY); // Rotate the camera Rotate(deltaX, deltaY); ...... } [/CODE]
  2. Hello I have a free camera in my game. My problem is the camera moves too fast when I move the mouse. Now if I slow down the camera the pitch and yaw in degrees also slow down. I want to slow down my camera movement but in the same time I don't want the Pitch and Yaw to slow down. If you look at the video the pitch and yaw are very slow, I can speed them up by increasing the mouse sensitivity variable but then the camera moves very fast. I just want to make a free camera that locks at 90 and -90 degrees when I move up and down. Sorry I’m not making a lot of sense but I don't know how to explain it. I already made a free camera in OpenGL and it works but I don't know what I’m doing wrong in XNA. XNA free camera problem [media]http://www.youtube.com/watch?v=bz98kF2xhS0[/media] OpenGL free camera locks at 90 and -90 degrees [media]http://www.youtube.com/watch?v=xxMT-faut2k&context=C3429d35ADOEgsToPDskIJvzwvczQF6wuNQv4QOhV5[/media] code FreeCamera class [CODE] using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace XNA_4._0_Tutorial { class FreeCamera : Camera { public float Pitch { get; set; } public float Yaw { get; set; } public Vector3 Position { get; set; } public Vector3 Target { get; set; } private Vector3 Translation; public FreeCamera(Vector3 Position, GraphicsDevice graphicsDevice) : base(graphicsDevice) { this.Position = Position; } public void Lock() { if(Pitch > 90.0f) Pitch = 90.0f; if(Pitch < -90.0f) Pitch = -90.0f; if(Yaw > 360.0f) Yaw -=360.0f; if(Yaw < 0.0f) Yaw +=360.0f; } public void Rotate(float YawOffset, float PitchOffset) { this.Yaw += MathHelper.ToDegrees(YawOffset); this.Pitch += MathHelper.ToDegrees(PitchOffset); } public void Move(Vector3 Translation) { this.Translation += Translation; } public void Control(GraphicsDeviceManager graphics, GameTime gameTime, float Velocity, float MouseSensitivity) { MouseState mouseState = Mouse.GetState(); KeyboardState keyState = Keyboard.GetState(); int ScreenX = graphics.PreferredBackBufferWidth / 2; int ScreenY = graphics.PreferredBackBufferHeight / 2; Lock(); // Determine how much the camera should turn float deltaX = MouseSensitivity * (ScreenX - (float)mouseState.X); float deltaY = MouseSensitivity * (ScreenY - (float)mouseState.Y); Mouse.SetPosition(ScreenX, ScreenY); // Rotate the camera Rotate(deltaX, deltaY); Vector3 translation = Vector3.Zero; // Determine in which direction to move the camera if (keyState.IsKeyDown(Keys.W)) translation += Vector3.Forward; if (keyState.IsKeyDown(Keys.S)) translation += Vector3.Backward; if (keyState.IsKeyDown(Keys.A)) translation += Vector3.Left; if (keyState.IsKeyDown(Keys.D)) translation += Vector3.Right; // Move 10 units per millisecond, independent of frame rate translation *= Velocity * (float)gameTime.ElapsedGameTime.TotalMilliseconds; // Move the camera Move(translation); // Update the camera Update(); } public override void Update() { // Calculate the rotation matrix Matrix Rrotation = Matrix.CreateFromYawPitchRoll(Yaw, Pitch, 0); // Offset the position and reset the translation Translation = Vector3.Transform(Translation, Rrotation); Position += Translation; Translation = Vector3.Zero; // Calculate the new target Vector3 forward = Vector3.Transform(Vector3.Forward, Rrotation); Target = Position + forward; // Calculate the up vector Vector3 up = Vector3.Transform(Vector3.Up, Rrotation); // Calculate the view matrix View = Matrix.CreateLookAt(Position, Target, up); } } } [/CODE]
  3. what i have to learn to develop a game ?

    if you know nothing about programing, I would recommend going and buy a C# book and start learning programing first. If you don't want to buy a book I would highly recommend checking out [url="http://www.youtube.com/user/thenewboston"]the new boston[/url] YouTube channel, he has a lot of tutorials about programing. Then after that go and buy an XNA book to start learning game development. http://www.youtube.com/watch?v=x_9lfHjYtVg
  4. XNA or SFML and OpenGL ?

    I went ahead and downloaded XNA and played with it a bit, and I have to say it’s a really good library. Microsoft did a really good job making it easy for relatively inexperienced developers to make games. Unlike OpenGL, XNA has everything from I/O, Sound, Model loader, 3D math library, Network etc... Don't get me wrong I really love OpenGL and it’s my first 3D API to learn and I know that’s its all about rendering 3D but it’s always nice to pack everything a game dev needs to make a great game in one library. However I really don't like C#, it’s very similar to Java and I hate java [img]http://public.gamedev.net//public/style_emoticons/default/biggrin.png[/img]. I have always been a C++ guy. C# is easy to learn and very nicely done but I just don't like it. The most thing I hate about C# is the foreach loop, I mean what the hell is all that about?! You can do the same thing in a normal for loop, so why use foreach ??!!!! Anyways I'll make few projects with XNA and then maybe go back to OpenGL and C++.
  5. bug in sfml?

    I'm not sure if i understand your problem. I think you mean you are seeing white background behind you image or sprite. you can make the white background color of you sprite to disappear by making it transparent, you can do that by using the following like of code. [CODE] sf::Image Image; Image.CreateMaskFromColor(Color.White); //Or Image.CreateMaskFromColor(sf::Color(255, 255, 255)); [/CODE]
  6. XNA or SFML and OpenGL ?

    Hey guys I worked with OpenGL and SFML and C++, and they are very good API/Library/Language. In OpenGL I had to write my own OBJ loader and Camera class and basically everything for 3D development. In SFML everything is there to use for 2D dev and I really liked the library a lot. Right now I'm using SFML and OpenGL to make a 3D game. I'm using SFML for Window handling, I/O, loading images, sound etc... I really like both SFML and OpenGL, but OpenGL require a lot of coding to be done before actually getting into game logic for a 3D game. So my question is, Is XNA easies to develop with? Does it provide everything for me to develop a 3D game? Is it faster to start actually making the game? I just want to hear your opinions guys. Thanks a lot.
  7. OpenGL if cube is far don't render.

    Thank you very very much, that was really helpful. I googled View Frustum Culling and it look easy enough to implement. I was just drawing cubes as you said, for fun, and just to check how powerful my card is. Anyways I tried rendering with Immediate mode and with VBO and i have to say there is a huge performance difference between the two. I got 200FPS more with VBO rather than using Immediate mode. On unrelated topic, the only thing that scares the hell out of me in OpenGL 4.0 is shaders, they look hard and they look like you need to write 1000 line of code to do simple thing. And looks like everything moved from OpngGL to GLSL. anyways thanks guys for all of your help.
  8. OpenGL if cube is far don't render.

    thank for the help. I just relized the way i'm drawing the 10000 cubes is very bad. I think there is a much much better way to draw 10000 cubes. I modified my Drawing code and i gained 700FPS !. now my FPS is ~780FPS. But its still bad considering there is only like 10 cubes show up on the screen at a time. I should get ~1500FPS. so is there a better way to draw the 10000 cubes? [CODE] void Engine::Render(sf::Window &Window) { .... // Same as old glBindVertexArray(VertexBufferID); for(int i=0; i<10000; i++) { glTranslatef(0.0f, 0.0f, Z * i); if(Camera1.Z >=Z * i) { glDrawArrays(GL_QUADS, 0, 24); } } glBindVertexArray(0); } [/CODE]
  9. Hello guys I have function which creates a cube using VBO. I call this function outside the game loop, in Init() function. I have a render() function that renders the cube. In this function I have a for loop that makes 10000 cubes and render them on the screen, everything shows up and works perfectly. Now if I don't render anything I get around ~1600FPS. But after rendering the 10000 cubes my FPS drops to ~80FPS. I also have a free camera class where I can move in the world. The problem now is even if I move so far and I don't see the cubes anymore, my FPS still stays at ~80FPS. How can make it, that if I move far away I don't render the cubes and make my FPS get back to 1600FPS ? [CODE] void Engine::Init() { ..... //Init OpenGL CreateCubeVBO(5); // create cube with size of 5 units } [/CODE] [CODE] void Engine::Render(sf::Window &Window) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glLoadIdentity(); Camera1.Control(Window, 0.2, 0.2, Camera1.IsMouseIn); SkyBox1.Draw(50.0); Camera1.Update(); for(int i=0; i<10000; i++) //Draw 10000 cubes a move each one 10 units in the Z axis { glTranslatef(0.0f, 0.0f, 10.0f * i); glBindVertexArray(VertexBufferID); glDrawArrays(GL_QUADS, 0, 24); glBindVertexArray(0); } } [/CODE] [CODE] void Engine::CreateCubeVBO(float Size) { GLfloat Vertices[] = { Size/2, Size/2, Size/2, -Size/2, Size/2, Size/2, -Size/2, -Size/2, Size/2, Size/2, -Size/2, Size/2, -Size/2, Size/2, Size/2, -Size/2, Size/2, -Size/2, -Size/2, -Size/2, -Size/2, -Size/2, -Size/2, Size/2, Size/2, Size/2, -Size/2, -Size/2, Size/2, -Size/2, -Size/2, -Size/2, -Size/2, Size/2, -Size/2, -Size/2, Size/2, Size/2, -Size/2, Size/2, Size/2, Size/2, Size/2, -Size/2, Size/2, Size/2, -Size/2, -Size/2, Size/2, Size/2, Size/2, -Size/2, Size/2, Size/2, -Size/2, Size/2, -Size/2, Size/2, Size/2, -Size/2, Size/2, -Size/2, Size/2, -Size/2, -Size/2, Size/2, -Size/2, -Size/2, -Size/2, Size/2, -Size/2, -Size/2 }; glGenVertexArrays(1, &VertexBufferID); glBindVertexArray(VertexBufferID); glGenBuffers(1, &VertexBufferID); glBindBuffer(GL_ARRAY_BUFFER, VertexBufferID); glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(0); } [/CODE]
  10. how to save 3D map?

    Ok I have another question about maps, and I thought why create new topic. Anyways, right now I have a 3d camera and I can move around my 3d world. Its just a simple room and a hallway. The thing is, I create this world just by writing the vertices and it took me some time to do it. This is my game map. [CODE] 52 vertices -3.0 0.0 -3.0 -1.5 0.0 -3.0 0.0 0.0 -3.0 1.5 0.0 -3.0 3.0 0.0 -3.0 -3.0 0.0 -1.5 -1.5 0.0 -1.5 0.0 0.0 -1.5 1.5 0.0 -1.5 3.0 0.0 -3.0 -3.0 0.0 0.0 -1.5 0.0 0.0 0.0 0.0 0.0 1.5 0.0 0.0 3.0 0.0 0.0 -3.0 0.0 1.5 -1.5 0.0 1.5 0.0 0.0 1.5 1.5 0.0 1.5 3.0 0.0 1.5 -3.0 0.0 3.0 -1.5 0.0 3.0 0.0 0.0 3.0 1.5 0.0 3.0 3.0 0.0 3.0 -3.0 1.0 -3.0 -1.5 1.0 -3.0 0.0 1.5 -3.0 1.5 1.5 -3.0 3.0 1.5 -3.0 -3.0 1.0 -1.5 -1.5 1.0 -1.5 0.0 1.5 -1.5 1.5 1.5 -1.5 3.0 1.5 -1.5 -3.0 1.0 0.0 -1.5 1.0 0.0 0.0 1.5 0.0 1.5 1.5 0.0 3.0 1.5 0.0 -3.0 1.0 1.5 -1.5 1.0 1.5 0.0 1.0 1.5 1.5 1.0 1.5 3.0 1.0 1.5 -3.0 1.0 3.0 -1.5 1.0 3.0 0.0 1.0 3.0 1.5 1.0 3.0 0.0 1.5 1.5 1.5 1.5 1.5 3.0 1.5 1.5 [/CODE] My question is, how can I create a single simple room without the need of writing every vertices myself? Now all these vertices were hand written and it took some time to do them, what if I have a big world with 3 or 5 rooms, how can I build these rooms? Do I use software like blender 3d or 3dmax to create a room and load it into my game? And how do companies build their maps? How do they build the rooms and hallways etc... ?
  11. [quote name='japro' timestamp='1327512934' post='4906146'] OpenGL 4.2 pretty much deprecates the fixed pipeline so you have to write shaders. The way you do transforms then is by passing the transformation matrix to the shader which then applies it to the vertices during rendering. [/quote] oo ok thank you very much. i'll start working on shaders. thank you guys for all your help.
  12. thank you [url="../../user/110541-guptan/"]guptan[/url] but i would like to know how to rotate the cube using OpenGL Mathematics (GLM) library. can anyone tell me how can rotate my cube using OpenGL Mathematics (GLM) library?
  13. [quote name='guptan' timestamp='1327497688' post='4906090'] You must be knowing how to write shaders for opengl 4.2 and make it running. Try a port of the following code(most probably no change), for matrix calculations (translation, rotation, scaling etc.) to get the uniform variables that you pass to your shader. [url="http://opengles-book-samples.googlecode.com/svn/trunk/iPhone/Common/esTransform.c"]http://opengles-book...n/esTransform.c[/url] [/quote] so if i don't use shaders i can't do translation, rotation or scaling? what is sharder? what is the use of them? sorry for the newbie questions.
  14. Hello guys OpenGL 4.2 is basically killing me, I can't rotation, transformation or scaling, I have to use another library to do it, which is OpenGL mathematics. And I can't find any tutorials on how to do this. I miss OpenGL 2.1. Can you please guys help me out here. I have this cube and I want to rotate it how can I do that in OpenGL mathematics? [CODE] void Engine::CreateCube() { float* Vertices = new float[72]; // Vertices for our square Vertices[0] = -0.3f; Vertices[1] = -0.3f; Vertices[2] = 0.3f; Vertices[3] = 0.3f; Vertices[4] = -0.3f; Vertices[5] = 0.3f; Vertices[6] = 0.3f; Vertices[7] = 0.3f; Vertices[8] = 0.3f; Vertices[9] = -0.3f; Vertices[10] = 0.3f; Vertices[11] = 0.3f; Vertices[12] = -0.3f; Vertices[13] = -0.3f; Vertices[14] = -0.3f; Vertices[15] = -0.3f; Vertices[16] = 0.3f; Vertices[17] = -0.3f; Vertices[18] = 0.3f; Vertices[19] = 0.3f; Vertices[20] = -0.3f; Vertices[21] = 0.3f; Vertices[22] = -0.3f; Vertices[23] = -0.3f; Vertices[24] = -0.3f; Vertices[25] = 0.3f; Vertices[26] = -0.3f; Vertices[27] = -0.3f; Vertices[28] = 0.3f; Vertices[29] = 0.3f; Vertices[30] = 0.3f; Vertices[31] = 0.3f; Vertices[32] = 0.3f; Vertices[33] = 0.3f; Vertices[34] = 0.3f; Vertices[35] = -0.3f; Vertices[36] = -0.3f; Vertices[37] = -0.3f; Vertices[38] = -0.3f; Vertices[39] = 0.3f; Vertices[40] = -0.3f; Vertices[41] = -0.3f; Vertices[42] = 0.3f; Vertices[43] = -0.3f; Vertices[44] = 0.3f; Vertices[45] = -0.3f; Vertices[46] = -0.3f; Vertices[47] = 0.3f; Vertices[48] = 0.3f; Vertices[49] = -0.3f; Vertices[50] = -0.3f; Vertices[51] = 0.3f; Vertices[52] = 0.3f; Vertices[53] = -0.3f; Vertices[54] = 0.3f; Vertices[55] = 0.3f; Vertices[56] = 0.3f; Vertices[57] = 0.3f; Vertices[58] = -0.3f; Vertices[59] = 0.3f; Vertices[60] = -0.3f; Vertices[61] = -0.3f; Vertices[62] = -0.3f; Vertices[63] = -0.3f; Vertices[64] = -0.3f; Vertices[65] = 0.3f; Vertices[66] = -0.3f; Vertices[67] = 0.3f; Vertices[68] = 0.3f; Vertices[69] = -0.3f; Vertices[70] = 0.3f; Vertices[71] = -0.3f; glGenVertexArrays(1, &VAO_ID[0]); // Create our Vertex Array Object glBindVertexArray(VAO_ID[0]); // Bind our Vertex Array Object so we can use it glGenBuffers(1, VBO_ID); // Generate our Vertex Buffer Object glBindBuffer(GL_ARRAY_BUFFER, VBO_ID[0]); // Bind our Vertex Buffer Object glBufferData(GL_ARRAY_BUFFER, 72 * sizeof(GLfloat), Vertices, GL_STATIC_DRAW); // Set the size and data of our VBO and set it to STATIC_DRAW glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0); // Set up our vertex attributes pointer glEnableVertexAttribArray(0); // Disable our Vertex Array Object glBindVertexArray(0); // Disable our Vertex Buffer Object delete [] Vertices; // Delete our vertices from memory } [/CODE] In my redner function which draws the cube i tried doing this but nothing changes. [CODE] void Engine::Render() { glViewport(0, 0, WindowWidth, WindowHeight); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); ViewMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -5.f)); // Create our view matrix which will translate us back 5 units ModelMatrix = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f)); // Create our model matrix which will halve the size of our model glm::mat4 View = glm::mat4(1.); View = glm::rotate(View, angle * -1.0f, glm::vec3(1.f, 0.f, 0.f)); glBindVertexArray(VAO_ID[0]); // Bind our Vertex Array Object glDrawArrays(GL_QUADS, 0, 24); // Draw our cube glBindVertexArray(0); // Unbind our Vertex Array Object } [/CODE]
  15. OpenGL VBO and VAO problem with OpenGL 4.2

    [quote name='Tsus' timestamp='1327425767' post='4905821'] Hi, Perhaps you forgot to initialize glew, before creating any resource? (When I comment this out in some working code of mine it throws me the exact same exception.) [CODE]if(glewInit() != GLEW_OK) cout << "GLEW init failed!" << endl;[/CODE] Cheers! [/quote] thank you so much. it works perfectly
  • Advertisement