Advertisement Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

310 Neutral

About andrew111

  • Rank
  1. andrew111

    Question about creating a replay system

    You might find these interesting:   Game Developer Dec 2012 p36 - recording unity - Building a replay system in Unity    Game Developer May 2008 p46 - IMPLEMENTING DETERMINISTIC PLAYBACK SYSTEMS   Game Developer Jun-Jul 2008 p47 - IMPLEMENTING DETERMINISTIC PLAYBACK SYSTEMS PART 2
  2. If the implementation language doesn't matter, there is a library for Scala called Kiama at   I don't remember all the details since it has been a while since I used it, but it uses a "packrat parser". Which you basically write the grammar directly in Scala, and specify the classes/params to be used to build the syntax tree.   Attributes are declared in recursive tree-like  expressions. We used the attributes for things like calculating scope and constant expressions, I forget what else, but I remember it being really easy at the time.   Another option is to use Ragel for lexing and Lemon for parsing. These can be used to generate parsers in C.  
  3. andrew111

    X11 Client Events

    Try this: Display *display; Window win; Atom wmDelete; void onInit() { wmDelete=XInternAtom(display, "WM_DELETE_WINDOW", True); XSetWMProtocols(display, win, &wmDelete, 1); } void onUpdate() { XEvent ev; while(XPending(display)) { XNextEvent(display,&ev); if(ev.type==DestroyNotify) { //on exit } if(ev.type==ClientMessage && (Atom)[0] == wmDelete) { //on close window } XFreeEventData(display, &ev.xcookie); } }
  4. Looks like a cut down version of stencil shadow volumes. Where it draws the shadows quads to the stencil buffer, and then the lit things are drawn except for the pixels marked by the stencil buffer. Pretty neat idea, looks like it would work for any N sided polygon.   You can't do it in a vertex shader since you can only access one vertex at a time, where as that algorithm needs access to two. Also I think vertex shaders can spit out only one vertex at a time, where that spits out 4. If you had geometry shaders you could do it there but that's opengl 3.3+.   Edit: Actually you could pass more than one vertex to the shader by doing something like for verts in quad or triangle {   glVertex4f(cur.x,cur.y,next.x,next.y); }   But I don't know if you are able to emit more than 1 vertex from the shader. If you could, it might be possible...     Edit2: Actually I just realised another idea, where you send a quad for each edge, e.g. for each edge {   glBegin(GL_QUAD);     glNormal(edgeNor.x,edgeNor.y,0);    glVertex3f(cur.x,cur.y,0);//0 represents the vertex on the edge to not extrude     glNormal(edgeNor.x,edgeNor.y,0);   glVertex3f(next.x,next.y,0); //0 represents the vertex on the edge to not extrude     glNormal(edgeNor.x,edgeNor.y,0);   glVertex3f(cur.x,cur.y,1); //1 represents the extruded vertex     glNormal(edgeNor.x,edgeNor.y,0);   glVertex3f(next.x,next.y,1);//1 represents the extruded vertex   glEnd(); }   Basically in the vertex shader you: 1. redundently do the dot product check to see if a shadow should be extruded. Pass a varying float to there fragment shader, where if shadow pass 1, else pass 0 2. If the vertex.z ==1, extrude the vertex along the light direction.   Fragment shader: 1. Check the varying float passed from the vertex shader, if == 0 then call discard to abort drawing the shadow   Kind of convoluted, but it should/could work.
  5. andrew111

    Font Rendering

    This library really needs some kind of docs or at least example code, I wasn't able to figure it out.
  6. Thanks, I'll give it a try when I get time.
  7. Okay, after Álvaro's question I realised I was confusing the problem. for two triangles sharing an edge I want to find out whether they are facing away from each other, facing towards each other or laying flat (same normal).   So a slight change from  C0lumbo's method, I dot product the normal from the first triangle to the non shared edge of the second triangle, where dotproduct=0 is both triangles laying flat, dotproduct<0 facing away (convex), dotproduct>0 facing towards (concave).   Seems like it should work.
  8.   Yes this was the problem I ran into, I'll give your suggestion a try.     The triangles are part of a 3D mesh, so I'm trying to tell if they are concave or convex, so >= PI is convex and < PI is concave.   The vertices are winded clockwise so the triangle normals always on the outer surface of the mesh.   EDIT:   Ah I just realised what you meant, I've been looking at the problem a bit wrong. I'll have think about this a bit more and get back to you.
  9. Hi I have two triangles sharing an edge and I have their normal vectors. Na          Nb  \    F   /   \  /|\  /   \/ | \/    /\ | /\    \  | /     \ | /     \|/       G (Na and Nb are the triangle normals, F and G are their shared edge) I want to check if the angle between the normals is: = 0, < PI, = PI or > PI.   I'm a bit rusty on 3d related math, but I looked at dot product and I don't think that works since I believe it can only be used to find the angle between 0 and PI, where as I  want between 0 and 2*PI.   I think maybe something could be done with cross product, e.g. since normals are unit length I have: Na * Nb = sinX*V (V being the cross product, X being the angle).   But I don't know where to go from there.       I've looked at this post from a similar/same question:     But in this I don't understand what the a1 and a2 is (I'm guessing something like sinX), or what he means on the second step, compute the components?   Thanks.
  10. andrew111

    How can I use multiple shaders in one mesh?

    If you mean to combine the results of multiple shader programs into one, I think you will have to render the mesh to a texture with each shader program, and then blend the results together (probably using another shader program).
  11. When I learn a new language I usually find a decent book to go through, where I go through each of the language features, e.g. syntax, modules, classes, functions, data types, inputting/outputting text etc, while trying out some small examples from each part (just so I don't immediately forget) and spending only enough time to get an idea of how each work (nothing in depth). Then once I've got all that down I'll flip through the standard libraries and write some examples on any that interest me, while just making mental notes of the rest of the libraries so I know whats available if I ever need them. Then after that like others have said, working on various projects that interest me, or for whatever reason I picked that language.
  12. Well one thing you can do is use c code from within it. I've just started looking at LuaJIT recently, and an idea I had apart from scripting world objects, was to use it to setup all the monotonous code, such geometry data (eg vertexarrayobjects, vertex buffers, attribute bindings, index buffers etc), shader programs, textures, texture samplers etc. Using luajit ffi to minimise the amount of cbindings necessary. And then in your main program, load those 'resource files' into a table and just say: load_resource("shader_program.lua"); lua_getfield(L,-1,"prog"); GLuint program = *((GLuint*)lua_touserdata(L,-1)); lua_pop(L,2); .. glUseProgam(program); A resource file might look like: prog = CreateShaderProgram { {"vert", [[ attribute vec3 a_pos; void main() { .. } ]]}, {"frag", [[ void main() { .. } ]]}, {"attrib", "a_pos", 0}} vao = CreateVertexArrayObject { .. }
  13. andrew111

    Texturing a Hemisphere/Skydome

    The More OpenGL Game Programming book's source code has an example under Chapter09/SkyDomesWin32. I'm not sure if the book explains it or not.
  14. andrew111

    Please simplify my code.

    I'm not sure if you've programmed in c, I've used it a bit for writing libraries, and the main problems I have with it, are things that c++ has introduced shortcuts for, and of course its painfully lacking of the standard template library (So you have to implement your own lists, hashmaps etc). So not defining classes isn't really equivalent to c code. I know the feeling, I dislike mixing functional code with imperative code, but I think procedural and oop can fit together fine. I know the feeling of over obsessing with oop from when I first started programming. If you want to see programming from another perspective, to see why oop isn't so important, you should look at a functional language like scheme (racket is a good implementation) or haskell. Also if you're interested in alternate oop systems, look at clos (common lisp object system), I think it's a vast improvement over the c++/java/c# oop system. Knowing some of these things, I believe will help you put things in a better perspective.
  15. andrew111

    Please simplify my code.

    That does not have anything to do with why c++ doesn't have an "Application" class for the main. riverreal is correct in that c++ is a multi paradigm language, which means you use oop where it helps, and procedural or functional (limited) programming etc where they help. And I don't think having an "Application" class helps at all, making a class to be instantiated once (except for cases of inheritance) seems like a wasted effort.
  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!