Author Topic: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game - On Hold  (Read 17703 times)

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Defined Sense of Atmosphere (DSoA) is an attempt to create a three dimensional danmaku shooter based around using a spherical projection method to provide an increased line of sight, allowing the player to respond to threats from more directions, and creating a more intense game.

Current Version: 0.4.3
Older Versions: 0.3, 0.2
This version is a proof of concept, testing the viability of the Lambert Azimuthal Equal-Area Projection method, providing complete vision in a constrained space. It allows the player to move in an environment in order to experience the effects of the projection. In the environment, each cube is 1x1x1 units large and is separated by 2 units from each of its neighbors. At the moment I'm making this in java but only because it's convenient for me. I'm on the lookout for a more sophisticated language and API.



Controls:
W/S/A/D/Q/E: Move 1 unit forward/backward/left/right/down/up in the direction you are facing
T/G//H/F//Y/R: Move 1 unit up/down the x//y//z axis
I/K/L/J: Look up/down/left/right 15 degrees
O/U: Rotate 15 degrees to the left/right
Click+Move Mouse Horizontally/Vertically: Look left/right/up/down
Scroll Mouse Wheel Up/Down: Rotate head right/left
C/V: Decrease/Increase line length
B/N: Decrease/Increase refresh period
Z: Reset your orientation
X: Reset your position to the origin

New players are recommended to avoid using the mouse as it gives the camera odd orientations which can create extreme rendering problems. Start by moving with WSADQUE and observe how the cubes move around them. Note how color can be used to identify orientation. Keep in mind that in order to avoid hitting a cube the player should always move 3 units at a time in any direction. Later, start orienting with IKLJOU, and keep in mind that 6 increments of 15 degrees make a 90 degree turn.
The two circles can be very useful in interpreting the world. The outer circle represents the edge of the player's vision, and of all rendering. The inner circle represents all directions 90 degrees out from the direction the player is facing. This means that everything within the inner circle is in front of the player, everything between the inner and outer circle is behind the player, and everything outside the outer circle is have trouble reconciling its place in life.
Resolution is the maximum length of drawn lines, lowering the number will create a higher quality render and a longer load time. The refresh period is the amount of time the program waits before redrawing the screen, increasing it will make the program more stable. The default is 10 but I usually have it between 100 and 50.

I should mention that the reason I pursue this project is to expose myself to interesting problems. This means that the game will only progress so long as there remain interesting avenues to develop the game through. It is also why I choose to write the entire program from scratch. I have a very good understanding of how this program works, and can break down the math pretty well, so if anyone wants to know how anything is done, I will be more than happy to try and explain.
« Last Edit: August 08, 2012, 10:50:40 PM by Imosa »

Kaze_Senshi

  • Ehhhhh...
  • Pale Apple
    • My youtube channel
Re: Defined Sense of Atmosphere v0.2 - 3D Danmaku Proof of Concept Game
« Reply #1 on: July 10, 2012, 08:52:22 PM »
Hello man, nice title for a game this Defined Sense of Atmosphere. I don`t know if you know this game, but I`ll let a link for you use as reference or inspiration if you don`t know., it`s a remake of touhou 6 in 3D (http://www.youtube.com/watch?v=09ngfE279uk). How are you thinking to do the shooting part (automatic shoot/aim or not?). And I don`t know how you did this one in java, it looks hard to code :P, anyway if you are searching for a game making language you should take a look in Unity3D, I like it and it has a free version.
My youtube channel with my creations: https://www.youtube.com/user/KazeSenshi2929
( ゆっくりしていってね)>

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.2 - 3D Danmaku Proof of Concept Game
« Reply #2 on: July 11, 2012, 03:47:37 AM »
Hello man, nice title for a game this Defined Sense of Atmosphere. I don`t know if you know this game, but I`ll let a link for you use as reference or inspiration if you don`t know., it`s a remake of touhou 6 in 3D (http://www.youtube.com/watch?v=09ngfE279uk). How are you thinking to do the shooting part (automatic shoot/aim or not?). And I don`t know how you did this one in java, it looks hard to code :P, anyway if you are searching for a game making language you should take a look in Unity3D, I like it and it has a free version.
I do know about that game. It hasn't been a source of inspiration, but I might use it for some if I ever make a bullet pattern. I could have made this in any language that can do algebra and draw a GUI (also input controls if I wanted movement). Once the math was done, the rest was all getting the interface to work.
Basic shooting would just be determined by where you are looking, so aiming would be an issue.

I tried to bypass the resolution issue by calculating the arc length of a projected line, and then determining how many points I would need to plot to make a smooth approximation. I was hoping the equation for a projected line would be something nice and manageable... it wasn't:
[(2*(cpa*lva*t*cyb*czc-cpa*lva*t*cyc*czb+cpa*lpa*cyb*czc-cpa*lpa*cyc*czb+cpb*lvb*t*cyc*cza-cpb*lvb*t*cya*czc+cpb*lpb*cyc*cza-cpb*lpb*cya*czc+cpc*lvc*t*cya*czb-cpc*lvc*t*cyb*cza+cpc*lpc*cya*czb-cpc*lpc*cyb*cza))*sin((1/2)*arccos((cpa*cza*lva*t+cpa*cza*lpa+cpb*czb*lvb*t+cpb*czb*lpb+cpc*czc*lvc*t+cpc*czc*lpc)/sqrt(abs((lva*t+lpa)*cpa)^2+abs((lvb*t+lpb)*cpb)^2+abs((lvc*t+lpc)*cpc)^2)))/sqrt(2*cpa*cya*lva*t^2*cpb*cyb*lvb+2*cpa*cya*lva*t*cpb*cyb*lpb+2*cpa*cya*lva*t^2*cpc*cyc*lvc+2*cpa*cya*lva*t*cpc*cyc*lpc+2*cpa*cya*lpa*cpb*cyb*lvb*t+2*cpa*cya*lpa*cpc*cyc*lvc*t+2*cpb*cyb*lvb*t^2*cpc*cyc*lvc+2*cpb*cyb*lvb*t*cpc*cyc*lpc+2*cpb*cyb*lpb*cpc*cyc*lvc*t+2*cpa*cya*lpa*cpb*cyb*lpb+2*cpa*cya*lpa*cpc*cyc*lpc+2*cpb*cyb*lpb*cpc*cyc*lpc+2*cpa^2*lva*t*cyb^2*czc^2*lpa+2*cpa^2*lva*t*cyc^2*czb^2*lpa-2*cpa^2*lpa^2*cyb*czc*cyc*czb+2*cpb^2*lvb*t*cyc^2*cza^2*lpb+2*cpb^2*lvb*t*cya^2*czc^2*lpb-2*cpb^2*lpb^2*cyc*cza*cya*czc+2*cpc^2*lvc*t*cya^2*czb^2*lpc+2*cpc^2*lvc*t*cyb^2*cza^2*lpc-2*cpc^2*lpc^2*cya*czb*cyb*cza+cpa^2*cya^2*lva^2*t^2+cpb^2*cyb^2*lvb^2*t^2+cpc^2*cyc^2*lvc^2*t^2+cpa^2*lpa^2*cyb^2*czc^2+cpa^2*lpa^2*cyc^2*czb^2+cpb^2*lpb^2*cyc^2*cza^2+cpb^2*lpb^2*cya^2*czc^2+cpc^2*lpc^2*cya^2*czb^2+cpc^2*lpc^2*cyb^2*cza^2-2*cpa^2*lva^2*t^2*cyb*czc*cyc*czb-2*cpa*lpa*cyb*czc^2*cpb*lpb*cya-2*cpa*lpa*cyb^2*czc*cpc*lpc*cza-2*cpa*lpa*cyc^2*czb*cpb*lpb*cza-2*cpa*lpa*cyc*czb^2*cpc*lpc*cya-2*cpb^2*lvb^2*t^2*cyc*cza*cya*czc-2*cpb*lpb*cyc*cza^2*cpc*lpc*cyb-2*cpb*lpb*cya^2*czc*cpc*lpc*czb-2*cpc^2*lvc^2*t^2*cya*czb*cyb*cza+cpc^2*cyc^2*lpc^2+cpa^2*cya^2*lpa^2+cpb^2*cyb^2*lpb^2+2*cpa^2*cya^2*lva*t*lpa+2*cpb^2*cyb^2*lvb*t*lpb+2*cpc^2*cyc^2*lvc*t*lpc+cpa^2*lva^2*t^2*cyb^2*czc^2+cpb^2*lvb^2*t^2*cyc^2*cza^2+cpb^2*lvb^2*t^2*cya^2*czc^2+cpc^2*lvc^2*t^2*cya^2*czb^2+cpc^2*lvc^2*t^2*cyb^2*cza^2-4*cpa^2*lva*t*cyb*czc*lpa*cyc*czb+cpa^2*lva^2*t^2*cyc^2*czb^2+2*cpa*lva*t^2*cyb*czc*cpb*lvb*cyc*cza-2*cpa*lva*t^2*cyb*czc^2*cpb*lvb*cya+2*cpa*lva*t*cyb*czc*cpb*lpb*cyc*cza-2*cpa*lva*t*cyb*czc^2*cpb*lpb*cya+2*cpa*lva*t^2*cyb*czc*cpc*lvc*cya*czb-2*cpa*lva*t^2*cyb^2*czc*cpc*lvc*cza+2*cpa*lva*t*cyb*czc*cpc*lpc*cya*czb-2*cpa*lva*t*cyb^2*czc*cpc*lpc*cza-2*cpa*lva*t^2*cyc^2*czb*cpb*lvb*cza+2*cpa*lva*t^2*cyc*czb*cpb*lvb*cya*czc-2*cpa*lva*t*cyc^2*czb*cpb*lpb*cza+2*cpa*lva*t*cyc*czb*cpb*lpb*cya*czc-2*cpa*lva*t^2*cyc*czb^2*cpc*lvc*cya+2*cpa*lva*t^2*cyc*czb*cpc*lvc*cyb*cza-2*cpa*lva*t*cyc*czb^2*cpc*lpc*cya+2*cpa*lva*t*cyc*czb*cpc*lpc*cyb*cza+2*cpa*lpa*cyb*czc*cpb*lvb*t*cyc*cza-2*cpa*lpa*cyb*czc^2*cpb*lvb*t*cya+2*cpa*lpa*cyb*czc*cpb*lpb*cyc*cza+2*cpa*lpa*cyb*czc*cpc*lvc*t*cya*czb-2*cpa*lpa*cyb^2*czc*cpc*lvc*t*cza+2*cpa*lpa*cyb*czc*cpc*lpc*cya*czb-2*cpa*lpa*cyc^2*czb*cpb*lvb*t*cza+2*cpa*lpa*cyc*czb*cpb*lvb*t*cya*czc+2*cpa*lpa*cyc*czb*cpb*lpb*cya*czc-2*cpa*lpa*cyc*czb^2*cpc*lvc*t*cya+2*cpa*lpa*cyc*czb*cpc*lvc*t*cyb*cza+2*cpa*lpa*cyc*czb*cpc*lpc*cyb*cza-4*cpb^2*lvb*t*cyc*cza*lpb*cya*czc+2*cpb*lvb*t^2*cyc*cza*cpc*lvc*cya*czb-2*cpb*lvb*t^2*cyc*cza^2*cpc*lvc*cyb+2*cpb*lvb*t*cyc*cza*cpc*lpc*cya*czb-2*cpb*lvb*t*cyc*cza^2*cpc*lpc*cyb-2*cpb*lvb*t^2*cya^2*czc*cpc*lvc*czb+2*cpb*lvb*t^2*cya*czc*cpc*lvc*cyb*cza-2*cpb*lvb*t*cya^2*czc*cpc*lpc*czb+2*cpb*lvb*t*cya*czc*cpc*lpc*cyb*cza+2*cpb*lpb*cyc*cza*cpc*lvc*t*cya*czb-2*cpb*lpb*cyc*cza^2*cpc*lvc*t*cyb+2*cpb*lpb*cyc*cza*cpc*lpc*cya*czb-2*cpb*lpb*cya^2*czc*cpc*lvc*t*czb+2*cpb*lpb*cya*czc*cpc*lvc*t*cyb*cza+2*cpb*lpb*cya*czc*cpc*lpc*cyb*cza-4*cpc^2*lvc*t*cya*czb*lpc*cyb*cza), (2*(cpa*cya*lva*t+cpa*cya*lpa+cpb*cyb*lvb*t+cpb*cyb*lpb+cpc*cyc*lvc*t+cpc*cyc*lpc))*sin((1/2)*arccos((cpa*cza*lva*t+cpa*cza*lpa+cpb*czb*lvb*t+cpb*czb*lpb+cpc*czc*lvc*t+cpc*czc*lpc)/sqrt(abs((lva*t+lpa)*cpa)^2+abs((lvb*t+lpb)*cpb)^2+abs((lvc*t+lpc)*cpc)^2)))/sqrt(2*cpa*cya*lva*t^2*cpb*cyb*lvb+2*cpa*cya*lva*t*cpb*cyb*lpb+2*cpa*cya*lva*t^2*cpc*cyc*lvc+2*cpa*cya*lva*t*cpc*cyc*lpc+2*cpa*cya*lpa*cpb*cyb*lvb*t+2*cpa*cya*lpa*cpc*cyc*lvc*t+2*cpb*cyb*lvb*t^2*cpc*cyc*lvc+2*cpb*cyb*lvb*t*cpc*cyc*lpc+2*cpb*cyb*lpb*cpc*cyc*lvc*t+2*cpa*cya*lpa*cpb*cyb*lpb+2*cpa*cya*lpa*cpc*cyc*lpc+2*cpb*cyb*lpb*cpc*cyc*lpc+2*cpa^2*lva*t*cyb^2*czc^2*lpa+2*cpa^2*lva*t*cyc^2*czb^2*lpa-2*cpa^2*lpa^2*cyb*czc*cyc*czb+2*cpb^2*lvb*t*cyc^2*cza^2*lpb+2*cpb^2*lvb*t*cya^2*czc^2*lpb-2*cpb^2*lpb^2*cyc*cza*cya*czc+2*cpc^2*lvc*t*cya^2*czb^2*lpc+2*cpc^2*lvc*t*cyb^2*cza^2*lpc-2*cpc^2*lpc^2*cya*czb*cyb*cza+cpa^2*cya^2*lva^2*t^2+cpb^2*cyb^2*lvb^2*t^2+cpc^2*cyc^2*lvc^2*t^2+cpa^2*lpa^2*cyb^2*czc^2+cpa^2*lpa^2*cyc^2*czb^2+cpb^2*lpb^2*cyc^2*cza^2+cpb^2*lpb^2*cya^2*czc^2+cpc^2*lpc^2*cya^2*czb^2+cpc^2*lpc^2*cyb^2*cza^2-2*cpa^2*lva^2*t^2*cyb*czc*cyc*czb-2*cpa*lpa*cyb*czc^2*cpb*lpb*cya-2*cpa*lpa*cyb^2*czc*cpc*lpc*cza-2*cpa*lpa*cyc^2*czb*cpb*lpb*cza-2*cpa*lpa*cyc*czb^2*cpc*lpc*cya-2*cpb^2*lvb^2*t^2*cyc*cza*cya*czc-2*cpb*lpb*cyc*cza^2*cpc*lpc*cyb-2*cpb*lpb*cya^2*czc*cpc*lpc*czb-2*cpc^2*lvc^2*t^2*cya*czb*cyb*cza+cpc^2*cyc^2*lpc^2+cpa^2*cya^2*lpa^2+cpb^2*cyb^2*lpb^2+2*cpa^2*cya^2*lva*t*lpa+2*cpb^2*cyb^2*lvb*t*lpb+2*cpc^2*cyc^2*lvc*t*lpc+cpa^2*lva^2*t^2*cyb^2*czc^2+cpb^2*lvb^2*t^2*cyc^2*cza^2+cpb^2*lvb^2*t^2*cya^2*czc^2+cpc^2*lvc^2*t^2*cya^2*czb^2+cpc^2*lvc^2*t^2*cyb^2*cza^2-4*cpa^2*lva*t*cyb*czc*lpa*cyc*czb+cpa^2*lva^2*t^2*cyc^2*czb^2+2*cpa*lva*t^2*cyb*czc*cpb*lvb*cyc*cza-2*cpa*lva*t^2*cyb*czc^2*cpb*lvb*cya+2*cpa*lva*t*cyb*czc*cpb*lpb*cyc*cza-2*cpa*lva*t*cyb*czc^2*cpb*lpb*cya+2*cpa*lva*t^2*cyb*czc*cpc*lvc*cya*czb-2*cpa*lva*t^2*cyb^2*czc*cpc*lvc*cza+2*cpa*lva*t*cyb*czc*cpc*lpc*cya*czb-2*cpa*lva*t*cyb^2*czc*cpc*lpc*cza-2*cpa*lva*t^2*cyc^2*czb*cpb*lvb*cza+2*cpa*lva*t^2*cyc*czb*cpb*lvb*cya*czc-2*cpa*lva*t*cyc^2*czb*cpb*lpb*cza+2*cpa*lva*t*cyc*czb*cpb*lpb*cya*czc-2*cpa*lva*t^2*cyc*czb^2*cpc*lvc*cya+2*cpa*lva*t^2*cyc*czb*cpc*lvc*cyb*cza-2*cpa*lva*t*cyc*czb^2*cpc*lpc*cya+2*cpa*lva*t*cyc*czb*cpc*lpc*cyb*cza+2*cpa*lpa*cyb*czc*cpb*lvb*t*cyc*cza-2*cpa*lpa*cyb*czc^2*cpb*lvb*t*cya+2*cpa*lpa*cyb*czc*cpb*lpb*cyc*cza+2*cpa*lpa*cyb*czc*cpc*lvc*t*cya*czb-2*cpa*lpa*cyb^2*czc*cpc*lvc*t*cza+2*cpa*lpa*cyb*czc*cpc*lpc*cya*czb-2*cpa*lpa*cyc^2*czb*cpb*lvb*t*cza+2*cpa*lpa*cyc*czb*cpb*lvb*t*cya*czc+2*cpa*lpa*cyc*czb*cpb*lpb*cya*czc-2*cpa*lpa*cyc*czb^2*cpc*lvc*t*cya+2*cpa*lpa*cyc*czb*cpc*lvc*t*cyb*cza+2*cpa*lpa*cyc*czb*cpc*lpc*cyb*cza-4*cpb^2*lvb*t*cyc*cza*lpb*cya*czc+2*cpb*lvb*t^2*cyc*cza*cpc*lvc*cya*czb-2*cpb*lvb*t^2*cyc*cza^2*cpc*lvc*cyb+2*cpb*lvb*t*cyc*cza*cpc*lpc*cya*czb-2*cpb*lvb*t*cyc*cza^2*cpc*lpc*cyb-2*cpb*lvb*t^2*cya^2*czc*cpc*lvc*czb+2*cpb*lvb*t^2*cya*czc*cpc*lvc*cyb*cza-2*cpb*lvb*t*cya^2*czc*cpc*lpc*czb+2*cpb*lvb*t*cya*czc*cpc*lpc*cyb*cza+2*cpb*lpb*cyc*cza*cpc*lvc*t*cya*czb-2*cpb*lpb*cyc*cza^2*cpc*lvc*t*cyb+2*cpb*lpb*cyc*cza*cpc*lpc*cya*czb-2*cpb*lpb*cya^2*czc*cpc*lvc*t*czb+2*cpb*lpb*cya*czc*cpc*lvc*t*cyb*cza+2*cpb*lpb*cya*czc*cpc*lpc*cyb*cza-4*cpc^2*lvc*t*cya*czb*lpc*cyb*cza)]
When I tried to find the arc length, I got an overflow error, which is not really suprising. Now I'll have to settle for a less elegant and probably less accurate solution.
In any case, I thought I'd show that the entire process still comes down to simple math (although arc length would not be simple math). The only hard things in here are the two square roots (sqrt), and both determin the distance to a point on the line that you are trying to project, so you only have to do that once. 
If your intresting in what this stuff actually means (and it won't help you much), this is a parametic equation of a projected line, where the x and y coordinets of a point on the line are determined by the indipendent variable t:
'a', 'b', or 'c' at the end of each variable correspond to the 3 components of the vector or point, denoted by the first two letters.
lv is the direction of the original (stright) line you are trying to project, lp is a point on the line you are trying to project, cp is the position of your camera, cz is the direction in which you are looking, and cy is the direction of the imaginary line coming out of the top of your head (I needed another line coming out of your head).
If you want to project just a point, you can set the lv's to 0, and the lp's to the point you want to project.
« Last Edit: July 11, 2012, 04:00:20 AM by Imosa »

Kaze_Senshi

  • Ehhhhh...
  • Pale Apple
    • My youtube channel
Re: Defined Sense of Atmosphere v0.2 - 3D Danmaku Proof of Concept Game
« Reply #3 on: July 11, 2012, 04:37:22 AM »
I tried to bypass the resolution issue by calculating the arc length of a projected line, and then determining how many points I would need to plot to make a smooth approximation. I was hoping the equation for a projected line would be something nice and manageable... it wasn't:
[(2*(cpa*lva*t*cyb*czc-cpa*lva*t*cyc*czb+cpa*lpa*cyb*czc-cpa*lpa*cyc*czb+cpb*lvb*t*cyc*cza-cpb*lvb*t*cya*czc+cpb*lpb*cyc*cza-cpb*lpb*cya*czc+cpc*lvc*t*cya*czb-cpc*lvc*t*cyb*cza+cpc*lpc*cya*czb-cpc*lpc*cyb*cza))*sin((1/2)*arccos((cpa*cza*lva*t+cpa*cza*lpa+cpb*czb*lvb*t+cpb*czb*lpb+cpc*czc*lvc*t+cpc*czc*lpc)/sqrt(abs((lva*t+lpa)*cpa)^2+abs((lvb*t+lpb)*cpb)^2+abs((lvc*t+lpc)*cpc)^2)))/sqrt(2*cpa*cya*lva*t^2*cpb*cyb*lvb+2*cpa*cya*lva*t*cpb*cyb*lpb+2*cpa*cya*lva*t^2*cpc*cyc*lvc+2*cpa*cya*lva*t*cpc*cyc*lpc+2*cpa*cya*lpa*cpb*cyb*lvb*t+2*cpa*cya*lpa*cpc*cyc*lvc*t+2*cpb*cyb*lvb*t^2*cpc*cyc*lvc+2*cpb*cyb*lvb*t*cpc*cyc*lpc+2*cpb*cyb*lpb*cpc*cyc*lvc*t+2*cpa*cya*lpa*cpb*cyb*lpb+2*cpa*cya*lpa*cpc*cyc*lpc+2*cpb*cyb*lpb*cpc*cyc*lpc+2*cpa^2*lva*t*cyb^2*czc^2*lpa+2*cpa^2*lva*t*cyc^2*czb^2*lpa-2*cpa^2*lpa^2*cyb*czc*cyc*czb+2*cpb^2*lvb*t*cyc^2*cza^2*lpb+2*cpb^2*lvb*t*cya^2*czc^2*lpb-2*cpb^2*lpb^2*cyc*cza*cya*czc+2*cpc^2*lvc*t*cya^2*czb^2*lpc+2*cpc^2*lvc*t*cyb^2*cza^2*lpc-2*cpc^2*lpc^2*cya*czb*cyb*cza+cpa^2*cya^2*lva^2*t^2+cpb^2*cyb^2*lvb^2*t^2+cpc^2*cyc^2*lvc^2*t^2+cpa^2*lpa^2*cyb^2*czc^2+cpa^2*lpa^2*cyc^2*czb^2+cpb^2*lpb^2*cyc^2*cza^2+cpb^2*lpb^2*cya^2*czc^2+cpc^2*lpc^2*cya^2*czb^2+cpc^2*lpc^2*cyb^2*cza^2-2*cpa^2*lva^2*t^2*cyb*czc*cyc*czb-2*cpa*lpa*cyb*czc^2*cpb*lpb*cya-2*cpa*lpa*cyb^2*czc*cpc*lpc*cza-2*cpa*lpa*cyc^2*czb*cpb*lpb*cza-2*cpa*lpa*cyc*czb^2*cpc*lpc*cya-2*cpb^2*lvb^2*t^2*cyc*cza*cya*czc-2*cpb*lpb*cyc*cza^2*cpc*lpc*cyb-2*cpb*lpb*cya^2*czc*cpc*lpc*czb-2*cpc^2*lvc^2*t^2*cya*czb*cyb*cza+cpc^2*cyc^2*lpc^2+cpa^2*cya^2*lpa^2+cpb^2*cyb^2*lpb^2+2*cpa^2*cya^2*lva*t*lpa+2*cpb^2*cyb^2*lvb*t*lpb+2*cpc^2*cyc^2*lvc*t*lpc+cpa^2*lva^2*t^2*cyb^2*czc^2+cpb^2*lvb^2*t^2*cyc^2*cza^2+cpb^2*lvb^2*t^2*cya^2*czc^2+cpc^2*lvc^2*t^2*cya^2*czb^2+cpc^2*lvc^2*t^2*cyb^2*cza^2-4*cpa^2*lva*t*cyb*czc*lpa*cyc*czb+cpa^2*lva^2*t^2*cyc^2*czb^2+2*cpa*lva*t^2*cyb*czc*cpb*lvb*cyc*cza-2*cpa*lva*t^2*cyb*czc^2*cpb*lvb*cya+2*cpa*lva*t*cyb*czc*cpb*lpb*cyc*cza-2*cpa*lva*t*cyb*czc^2*cpb*lpb*cya+2*cpa*lva*t^2*cyb*czc*cpc*lvc*cya*czb-2*cpa*lva*t^2*cyb^2*czc*cpc*lvc*cza+2*cpa*lva*t*cyb*czc*cpc*lpc*cya*czb-2*cpa*lva*t*cyb^2*czc*cpc*lpc*cza-2*cpa*lva*t^2*cyc^2*czb*cpb*lvb*cza+2*cpa*lva*t^2*cyc*czb*cpb*lvb*cya*czc-2*cpa*lva*t*cyc^2*czb*cpb*lpb*cza+2*cpa*lva*t*cyc*czb*cpb*lpb*cya*czc-2*cpa*lva*t^2*cyc*czb^2*cpc*lvc*cya+2*cpa*lva*t^2*cyc*czb*cpc*lvc*cyb*cza-2*cpa*lva*t*cyc*czb^2*cpc*lpc*cya+2*cpa*lva*t*cyc*czb*cpc*lpc*cyb*cza+2*cpa*lpa*cyb*czc*cpb*lvb*t*cyc*cza-2*cpa*lpa*cyb*czc^2*cpb*lvb*t*cya+2*cpa*lpa*cyb*czc*cpb*lpb*cyc*cza+2*cpa*lpa*cyb*czc*cpc*lvc*t*cya*czb-2*cpa*lpa*cyb^2*czc*cpc*lvc*t*cza+2*cpa*lpa*cyb*czc*cpc*lpc*cya*czb-2*cpa*lpa*cyc^2*czb*cpb*lvb*t*cza+2*cpa*lpa*cyc*czb*cpb*lvb*t*cya*czc+2*cpa*lpa*cyc*czb*cpb*lpb*cya*czc-2*cpa*lpa*cyc*czb^2*cpc*lvc*t*cya+2*cpa*lpa*cyc*czb*cpc*lvc*t*cyb*cza+2*cpa*lpa*cyc*czb*cpc*lpc*cyb*cza-4*cpb^2*lvb*t*cyc*cza*lpb*cya*czc+2*cpb*lvb*t^2*cyc*cza*cpc*lvc*cya*czb-2*cpb*lvb*t^2*cyc*cza^2*cpc*lvc*cyb+2*cpb*lvb*t*cyc*cza*cpc*lpc*cya*czb-2*cpb*lvb*t*cyc*cza^2*cpc*lpc*cyb-2*cpb*lvb*t^2*cya^2*czc*cpc*lvc*czb+2*cpb*lvb*t^2*cya*czc*cpc*lvc*cyb*cza-2*cpb*lvb*t*cya^2*czc*cpc*lpc*czb+2*cpb*lvb*t*cya*czc*cpc*lpc*cyb*cza+2*cpb*lpb*cyc*cza*cpc*lvc*t*cya*czb-2*cpb*lpb*cyc*cza^2*cpc*lvc*t*cyb+2*cpb*lpb*cyc*cza*cpc*lpc*cya*czb-2*cpb*lpb*cya^2*czc*cpc*lvc*t*czb+2*cpb*lpb*cya*czc*cpc*lvc*t*cyb*cza+2*cpb*lpb*cya*czc*cpc*lpc*cyb*cza-4*cpc^2*lvc*t*cya*czb*lpc*cyb*cza), (2*(cpa*cya*lva*t+cpa*cya*lpa+cpb*cyb*lvb*t+cpb*cyb*lpb+cpc*cyc*lvc*t+cpc*cyc*lpc))*sin((1/2)*arccos((cpa*cza*lva*t+cpa*cza*lpa+cpb*czb*lvb*t+cpb*czb*lpb+cpc*czc*lvc*t+cpc*czc*lpc)/sqrt(abs((lva*t+lpa)*cpa)^2+abs((lvb*t+lpb)*cpb)^2+abs((lvc*t+lpc)*cpc)^2)))/sqrt(2*cpa*cya*lva*t^2*cpb*cyb*lvb+2*cpa*cya*lva*t*cpb*cyb*lpb+2*cpa*cya*lva*t^2*cpc*cyc*lvc+2*cpa*cya*lva*t*cpc*cyc*lpc+2*cpa*cya*lpa*cpb*cyb*lvb*t+2*cpa*cya*lpa*cpc*cyc*lvc*t+2*cpb*cyb*lvb*t^2*cpc*cyc*lvc+2*cpb*cyb*lvb*t*cpc*cyc*lpc+2*cpb*cyb*lpb*cpc*cyc*lvc*t+2*cpa*cya*lpa*cpb*cyb*lpb+2*cpa*cya*lpa*cpc*cyc*lpc+2*cpb*cyb*lpb*cpc*cyc*lpc+2*cpa^2*lva*t*cyb^2*czc^2*lpa+2*cpa^2*lva*t*cyc^2*czb^2*lpa-2*cpa^2*lpa^2*cyb*czc*cyc*czb+2*cpb^2*lvb*t*cyc^2*cza^2*lpb+2*cpb^2*lvb*t*cya^2*czc^2*lpb-2*cpb^2*lpb^2*cyc*cza*cya*czc+2*cpc^2*lvc*t*cya^2*czb^2*lpc+2*cpc^2*lvc*t*cyb^2*cza^2*lpc-2*cpc^2*lpc^2*cya*czb*cyb*cza+cpa^2*cya^2*lva^2*t^2+cpb^2*cyb^2*lvb^2*t^2+cpc^2*cyc^2*lvc^2*t^2+cpa^2*lpa^2*cyb^2*czc^2+cpa^2*lpa^2*cyc^2*czb^2+cpb^2*lpb^2*cyc^2*cza^2+cpb^2*lpb^2*cya^2*czc^2+cpc^2*lpc^2*cya^2*czb^2+cpc^2*lpc^2*cyb^2*cza^2-2*cpa^2*lva^2*t^2*cyb*czc*cyc*czb-2*cpa*lpa*cyb*czc^2*cpb*lpb*cya-2*cpa*lpa*cyb^2*czc*cpc*lpc*cza-2*cpa*lpa*cyc^2*czb*cpb*lpb*cza-2*cpa*lpa*cyc*czb^2*cpc*lpc*cya-2*cpb^2*lvb^2*t^2*cyc*cza*cya*czc-2*cpb*lpb*cyc*cza^2*cpc*lpc*cyb-2*cpb*lpb*cya^2*czc*cpc*lpc*czb-2*cpc^2*lvc^2*t^2*cya*czb*cyb*cza+cpc^2*cyc^2*lpc^2+cpa^2*cya^2*lpa^2+cpb^2*cyb^2*lpb^2+2*cpa^2*cya^2*lva*t*lpa+2*cpb^2*cyb^2*lvb*t*lpb+2*cpc^2*cyc^2*lvc*t*lpc+cpa^2*lva^2*t^2*cyb^2*czc^2+cpb^2*lvb^2*t^2*cyc^2*cza^2+cpb^2*lvb^2*t^2*cya^2*czc^2+cpc^2*lvc^2*t^2*cya^2*czb^2+cpc^2*lvc^2*t^2*cyb^2*cza^2-4*cpa^2*lva*t*cyb*czc*lpa*cyc*czb+cpa^2*lva^2*t^2*cyc^2*czb^2+2*cpa*lva*t^2*cyb*czc*cpb*lvb*cyc*cza-2*cpa*lva*t^2*cyb*czc^2*cpb*lvb*cya+2*cpa*lva*t*cyb*czc*cpb*lpb*cyc*cza-2*cpa*lva*t*cyb*czc^2*cpb*lpb*cya+2*cpa*lva*t^2*cyb*czc*cpc*lvc*cya*czb-2*cpa*lva*t^2*cyb^2*czc*cpc*lvc*cza+2*cpa*lva*t*cyb*czc*cpc*lpc*cya*czb-2*cpa*lva*t*cyb^2*czc*cpc*lpc*cza-2*cpa*lva*t^2*cyc^2*czb*cpb*lvb*cza+2*cpa*lva*t^2*cyc*czb*cpb*lvb*cya*czc-2*cpa*lva*t*cyc^2*czb*cpb*lpb*cza+2*cpa*lva*t*cyc*czb*cpb*lpb*cya*czc-2*cpa*lva*t^2*cyc*czb^2*cpc*lvc*cya+2*cpa*lva*t^2*cyc*czb*cpc*lvc*cyb*cza-2*cpa*lva*t*cyc*czb^2*cpc*lpc*cya+2*cpa*lva*t*cyc*czb*cpc*lpc*cyb*cza+2*cpa*lpa*cyb*czc*cpb*lvb*t*cyc*cza-2*cpa*lpa*cyb*czc^2*cpb*lvb*t*cya+2*cpa*lpa*cyb*czc*cpb*lpb*cyc*cza+2*cpa*lpa*cyb*czc*cpc*lvc*t*cya*czb-2*cpa*lpa*cyb^2*czc*cpc*lvc*t*cza+2*cpa*lpa*cyb*czc*cpc*lpc*cya*czb-2*cpa*lpa*cyc^2*czb*cpb*lvb*t*cza+2*cpa*lpa*cyc*czb*cpb*lvb*t*cya*czc+2*cpa*lpa*cyc*czb*cpb*lpb*cya*czc-2*cpa*lpa*cyc*czb^2*cpc*lvc*t*cya+2*cpa*lpa*cyc*czb*cpc*lvc*t*cyb*cza+2*cpa*lpa*cyc*czb*cpc*lpc*cyb*cza-4*cpb^2*lvb*t*cyc*cza*lpb*cya*czc+2*cpb*lvb*t^2*cyc*cza*cpc*lvc*cya*czb-2*cpb*lvb*t^2*cyc*cza^2*cpc*lvc*cyb+2*cpb*lvb*t*cyc*cza*cpc*lpc*cya*czb-2*cpb*lvb*t*cyc*cza^2*cpc*lpc*cyb-2*cpb*lvb*t^2*cya^2*czc*cpc*lvc*czb+2*cpb*lvb*t^2*cya*czc*cpc*lvc*cyb*cza-2*cpb*lvb*t*cya^2*czc*cpc*lpc*czb+2*cpb*lvb*t*cya*czc*cpc*lpc*cyb*cza+2*cpb*lpb*cyc*cza*cpc*lvc*t*cya*czb-2*cpb*lpb*cyc*cza^2*cpc*lvc*t*cyb+2*cpb*lpb*cyc*cza*cpc*lpc*cya*czb-2*cpb*lpb*cya^2*czc*cpc*lvc*t*czb+2*cpb*lpb*cya*czc*cpc*lvc*t*cyb*cza+2*cpb*lpb*cya*czc*cpc*lpc*cyb*cza-4*cpc^2*lvc*t*cya*czb*lpc*cyb*cza)]

Holy shit this one is big lol. You said that square roots are hard, but I think that power operations are hard to the computer process too, since you are using power of 2, you could change it like a^2 = a*a. Now I am curious what this equation will become when you recreate it with a less accurate solution :P
My youtube channel with my creations: https://www.youtube.com/user/KazeSenshi2929
( ゆっくりしていってね)>

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.2 - 3D Danmaku Proof of Concept Game
« Reply #4 on: July 11, 2012, 05:52:06 AM »
Holy shit this one is big lol. You said that square roots are hard, but I think that power operations are hard to the computer process too, since you are using power of 2, you could change it like a^2 = a*a. Now I am curious what this equation will become when you recreate it with a less accurate solution :P
You think that squaring and square rooting are equally difficult because they are opposite operations? Without guess and check or using a computer, tell me the square root of 5. Square roots are time consuming operations for a computer, and so it's good practice to use them as little as possible. Also, you ignore the trig functions? Something tells me you don't know what the trig functions are.

Trying to make another equation would be too hard. I'll just check the length of the straight edges you see now, and if they are too long I'll add a point.

Kaze_Senshi

  • Ehhhhh...
  • Pale Apple
    • My youtube channel
Re: Defined Sense of Atmosphere v0.2 - 3D Danmaku Proof of Concept Game
« Reply #5 on: July 11, 2012, 12:29:51 PM »
You think that squaring and square rooting are equally difficult because they are opposite operations? Without guess and check or using a computer, tell me the square root of 5. Square roots are time consuming operations for a computer, and so it's good practice to use them as little as possible. Also, you ignore the trig functions? Something tells me you don't know what the trig functions are.

Trying to make another equation would be too hard. I'll just check the length of the straight edges you see now, and if they are too long I'll add a point.

Well I think that squaring and square routes are equally difficult because when using C-Languange you can do a square root using the power operation ( sqrt(2) = pow( 2, 0.5 ) ) But I don't know if the idea is valid for other languages, and I didn't see the trig functions in your equation before because is pretty long to read :P
My youtube channel with my creations: https://www.youtube.com/user/KazeSenshi2929
( ゆっくりしていってね)>

D8ms

  • Oriental
    • saigyouji.net
Re: Defined Sense of Atmosphere v0.2 - 3D Danmaku Proof of Concept Game
« Reply #6 on: July 11, 2012, 12:39:01 PM »
A lot of old fashioned game devs will tell you that C++ is the optimal language for games because it does these things faster than all the other languages (ignoring the languages suited for academia i.e. fortran) I doubt this is the actual case now a days, but I've never really looked it up. However, it's certainly a choice to explore, as java is still considered pretty slow AFAIK.

Well I think that squaring and square routes are equally difficult because when using C-Languange you can do a square root using the power operation ( sqrt(2) = pow( 2, 0.5 ) ) But I don't know if the idea is valid for other languages, and I didn't see the trig functions in your equation before because is pretty long to read :P

Have you ever tried to do square roots manually? It takes a lot longer than just multiplying two numbers together because it's much more complexed. The logic for when the power is an int is very different than when it's a fraction. If I were to give an extreme example, think of multiplying a few primes together. Shouldn't take very long for a computer to process right? Now ask the computer to return the prime factors, you'll notice that the run time differs by several orders on the big O scale.
« Last Edit: July 11, 2012, 12:50:51 PM by D8ms »

Kaze_Senshi

  • Ehhhhh...
  • Pale Apple
    • My youtube channel
Re: Defined Sense of Atmosphere v0.2 - 3D Danmaku Proof of Concept Game
« Reply #7 on: July 11, 2012, 01:39:34 PM »
A lot of old fashioned game devs will tell you that C++ is the optimal language for games because it does these things faster than all the other languages (ignoring the languages suited for academia i.e. fortran) I doubt this is the actual case now a days, but I've never really looked it up. However, it's certainly a choice to explore, as java is still considered pretty slow AFAIK.

Have you ever tried to do square roots manually? It takes a lot longer than just multiplying two numbers together because it's much more complexed. The logic for when the power is an int is very different than when it's a fraction. If I were to give an extreme example, think of multiplying a few primes together. Shouldn't take very long for a computer to process right? Now ask the computer to return the prime factors, you'll notice that the run time differs by several orders on the big O scale.

Well, I only remember  that I made square roots manually using Newton's Method (http://en.wikipedia.org/wiki/Newton's_method#Square_root_of_a_number). But as far as I remember the default C sqrt function only receive as a parameter a double number, so using an Integer or not doesn't make difference, since it'll cast the integer number to a floating point one and use some method like newton's to solve it.
My youtube channel with my creations: https://www.youtube.com/user/KazeSenshi2929
( ゆっくりしていってね)>

D8ms

  • Oriental
    • saigyouji.net
Re: Defined Sense of Atmosphere v0.2 - 3D Danmaku Proof of Concept Game
« Reply #8 on: July 11, 2012, 02:25:34 PM »
Well, I only remember  that I made square roots manually using Newton's Method (http://en.wikipedia.org/wiki/Newton's_method#Square_root_of_a_number). But as far as I remember the default C sqrt function only receive as a parameter a double number, so using an Integer or not doesn't make difference, since it'll cast the integer number to a floating point one and use some method like newton's to solve it.

Good point, I keep forgetting that C/Java has to deal with floating points. Without knowing how C handles optimizing exp, I can't really say anything else unless I feel like setting up C/Java and doing some run-time tests. That said, it wouldn't hurt to apply some regex, get rid of the exponents and do a run-time test with the new equation.

Edit:

Also, you ignore the trig functions?
Where did he mention trig functions?
« Last Edit: July 11, 2012, 02:34:38 PM by D8ms »

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.3 - 3D Danmaku Proof of Concept Game
« Reply #9 on: July 17, 2012, 05:51:31 AM »
I decided to add headers so people wouldn't be intimidated by this post:

Rant: Stop what your doing for a moment, because I have been for the past week.
This has been a surprisingly difficult update. I thought of how I was going to increase resolution last Tuesday, and have been tried to write the code for it until Thursday, when I succeeded and realized my method was flawed. After messing around with it on Friday, I got 0 work down over the weekend, but finally figured it off on Monday. So the last thing I had to do was rebuild the training environment. Unfortunately, the way that the game now stores model information is insanely difficult to work with, so after about an hour of failing to assemble half a cube, I decided to write a new set of functions to build the environment, and these functions aren't even general enough for anything more than the current version. They are also pretty inefficient, not that it matters here since there aren't many objects and the functions only run once at the start of the program. Regardless, time for some real content.

What's New: You thought I could only drew straight lines? Your right.
Here's what's new. The program now checks the length of lines that it draws, if the length is greater than a certain value (res, default is 20 pixels), the original line gets a point added half way along its length. This new point is projected and the distances between this mid-point and the end points are measured. Recursion ensues, and once complete, a smoother approximation for the line is drawn. The image above was taken with 1 pixel long lines; however, that’s just for show. I can’t move properly at 1 pixel resolution and it doesn’t look much better than 20 for the size that I play on. This method should work well but breaks down if end points start out within the resolution distance of each other, causing it to ignore any curve that may be present.
One thing that I am careful about is repeating things that I have already done. To this end, I redesigned how the program stores model information. v0.2 had a list of vertices and a list of faces. Within each face were 3 indexes, pointing to vertices in the list. In this way, each vertex would only have to be transformed once, and faces could be drawn between the transformed vertices. v0.3 required that I place additional vertices along the edges of the transformed faces, so each edge would have to have been made of multiple vertices, but I didn’t like this idea because not every point along an edge would have to be used in every rendering. Only lines going through extreme warping would need high resolution, so I needed a way to exclude certain points from the rendering process. Having already noticed the recursive nature of my splitting process, I decided to nest edges within edges, allowing me to store points that I had already calculated and cut them out entirely when not needed. With this set up, vertices and edges are shared between faces meaning nothing ever gets projected more then once. The issue now is that in order to create a face, I need to declare the vertices, connect the vertices with edges, and connect the edges with a face. This process makes manually building objects very hard and so I have to create helper functions that search the arrays to see if vertices and edges already exist. This isn’t really a problem but it forces me ever farther away from the core of the code.
Also the tetrahedron was removed, not because I couldn’t add it. I wanted to add it. However, I realized that I hadn’t updated in a week and should probably do that. It will return though, probably with friends.

The Future: Something's been bugging me in the back of my head.
What’s next? Three things. The first is some rendering errors with faces being drawn out of order. For the most part it’s fine but I should probably address that. Second, is a more serious rendering error that occurs when you look directly at a point, causing the point to jump to the upper left corner. In practical use, this shouldn’t happen, because movement is done in decimal increments, which is why I’m not really worried about it, but from a mathematical point of view, it just shouldn’t happen, so I’ll figure it out. Third is what happens when a face is directly behind you. When this happens you will see a rounded polygon dominate your screen and moving forwards does not make it go away. This is because the shape is occupying a very small area around the point behind your camera. This point is actually stretched to be the entire perimeter of the outer circle. The way that this shape should actually be rendered is to invert it, and cover all the space that you see it not covering. The issue is simply that this effect does not come out of the equations I have written and a write a special case.

What's Next: You tell me, or it's more math (and it will probably be math anyway).
I thought I’d get some input on what people want to see, because I’m always up for new ideas. As this part of rendering gets closer to completion I can start thinking about things like, lighting (eventually shadows), applying textures, or correct object intersection (notice how I never have two faces intersect? There’s a reason for that). I could also work on a few algorithms in 3 space like creating convex hulls, or Voronoi tessellations, if you’re into the technical part of programming. Yes, I could even make objects move on their own instruction, fly toward the camera, and create a certain pichun sound on contact.
I could also start thinking about rewriting this in a different language and API, something that sounds like a very good idea. Since the only other two people in this thread use Unity3D, I'll ask this. Can Unity3D create the projection that I have now, or does it only allow for perspective projection? 
So tell me if you’re interested in seeing anything and I’ll take it into consideration.

Final note, since this project is more about my discoveries as I work, rather than the final product, I’m trying to make a good write up of the rendering process from start to finish, in simple-ish English. It’s meant to be a lot more helpful then the block of math that I threw up onto the thread earlier.
« Last Edit: July 17, 2012, 06:10:40 AM by Imosa »

Kaze_Senshi

  • Ehhhhh...
  • Pale Apple
    • My youtube channel
Re: Defined Sense of Atmosphere v0.3 - 3D Danmaku Proof of Concept Game
« Reply #10 on: July 17, 2012, 07:54:15 PM »
News =), I tested here and it looks to be more smooth than the last version, I ran here and sometimes it crashes and become frozen. Using the cmd I could see the stacktrace, but it only repeat the same line various times, how it shows the same lines various times I think that you did a function stack overflow since you said that you are usign recursion. Also the exception cause disappeared because the loops is too fast =(



The image above was taken with 1 pixel long lines; however, that?s just for show.
Where is the image?

I could also start thinking about rewriting this in a different language and API, something that sounds like a very good idea. Since the only other two people in this thread use Unity3D, I'll ask this. Can Unity3D create the projection that I have now, or does it only allow for perspective projection?
I am noob with Computer graphics algorithms and cia, but Unity does have a perpective camera projection I think, I use it in my platform game to the objects give the sense of depth when you look at it, I don't know if this is what you want. More details here http://docs.unity3d.com/Documentation/Components/class-Camera.html
My youtube channel with my creations: https://www.youtube.com/user/KazeSenshi2929
( ゆっくりしていってね)>

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.3 - 3D Danmaku Proof of Concept Game
« Reply #11 on: July 17, 2012, 08:47:03 PM »
News =), I tested here and it looks to be more smooth than the last version, I ran here and sometimes it crashes and become frozen. Using the cmd I could see the stacktrace, but it only repeat the same line various times, how it shows the same lines various times I think that you did a function stack overflow since you said that you are usign recursion. Also the exception cause disappeared because the loops is too fast =(

http://img859.imageshack.us/img859/5577/dfav03bug.jpg
Uhhh, yeah, I noticed that error about an hour after posting this. Can't believe I missed it. Not sure how to fix it either. I'll have to take another look at my method and hopefully it will come out. The issue only comes up in points when you are lined up with a cube so either keep between the cubs by always moving in sets of 3 or use the mouse, which makes hitting those points almost impossible.
Where is the image?
In the first post: http://i.imgur.com/TSE0X.png
I am noob with Computer graphics algorithms and cia, but Unity does have a perpective camera projection I think, I use it in my platform game to the objects give the sense of depth when you look at it, I don't know if this is what you want. More details here http://docs.unity3d.com/Documentation/Components/class-Camera.html
Alright, thanks. I'll look into it.

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #12 on: July 24, 2012, 12:26:06 AM »
If you don’t want to read this, just know that the program now has another new control, so check up on that.

This is an interesting update because a lot of little unremarkable things happened. This is also a lazy update because, honestly, I’m just doing this to show that I’m still working, and would rather get back to it. Like I said, I’m addressing some broken features in the program, however I’ve been busy in the past week and only been able to addressed two problems, neither of which are the the fatal stack overflow error.
 
The first issue that I addressed was the strange warping that happens when you use the mouse. I thought this problem was caused by the mouse movement triggering too much work. Orientation of the character is controlled by 3 3-space vectors, on pointing in the direction you are looking (a), one pointing out the top of your head (b), and one pointing out the right side of your head (c). Whenever you dragged your mouse horizontally or vertically, it would rotate your head about vectors b or c respectively (rotating around a is controlled by the mouse wheel). This means rotating two vectors around a third. Rotating a vector requires a bit of math, so it’s doable, but it’s not the shortest process. I saved time on rotating the second vector by just finding the cross product of two I already had. Every time the mouse is moved this process has to be done twice because the mouse never only moves horizontally or vertically. Afterwards the image on the screen would be redrawn because your perspective has changed. Like I said there isn’t an incredible amount of math involved but you do have to think about how fast the mouse can move. I’m guessed that operations were beginning to edit data before previous operations were finished.
I attempted to fix this, by changing when the program updates the player’s orientation. Until now the program has been event driven in its operation, that is every change on the screen has been caused by button press or mouse movement telling the program to redraw the screen. I have no implemented a second thread in the program which updates the screen ever few milliseconds. Now, when you move the mouse, the movement is rotation is saved, and when the next redrawing happens, a single equation applies the rotation.
Unfortunately the problem is not solved. The warping still happens; however, the effect has been reduced. An issue with two processes attempting to edit the same data is something I know very little about, so I’m not surprised that this didn’t work perfectly. In fact, here, now you know as much about the problem as I do. However, there was an interesting math problem here so I couldn’t help but address it (maybe I’ll explain what that later).

The second issue that I addressed was an error that occurs when you look directly at a point. The point would snap to the upper left hand corner until you looked anywhere else, and then it would return. I wanted to know what was going on here because the stack overflow error occurs when you look directly away from a point. The issue turned out to be a slight discrepancy in math, where the program saved 2^(1/2) to two variables and divide one by the other. You would expect the answer to be one, however these numbers were saved as doubles and there was a slight error in their calculation, causing one to be .0000000000000003 larger than the other, and the division to result in a number slightly greater than 1. Still not really an issue until the next step where this 1+[very small amount] was fed into arccosine which returned NaN. Apparently that doesn’t throw an error so this NaN sailed through the rest of the calculation, fucking up any good math and finally being interpreted as a 0, for the purposes of displaying it on the screen. This has now been sorta’ fixed. I say that because the issue wasn’t my method, but the computers way of executing the method. Hopefully a similar issue is causing my recursive method to fail termination and throwing a stack overflow error.

I know I said I would do a comprehensive run down of what my program is doing, however; I figure I should wait until the rendering process doesn’t have a fatal crash. That probably doesn’t reflect well on my trustworthiness. So unless someone asks, I’m holding off on explaining that.
« Last Edit: July 24, 2012, 12:39:44 AM by Imosa »

AnonymousPondScum

Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #13 on: July 24, 2012, 09:39:21 PM »
The zip file at the Mediafire link is apparently glitched/corrupt.

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #14 on: July 25, 2012, 11:11:39 PM »
The zip file at the Mediafire link is apparently glitched/corrupt.
I've had multiple people report that it works. How do you figure it's glitched/corrupt?
« Last Edit: July 25, 2012, 11:14:48 PM by Imosa »

AnonymousPondScum

Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #15 on: July 26, 2012, 08:30:30 PM »
I've had multiple people report that it works. How do you figure it's glitched/corrupt?

Apparently the first few times I tried the file did not download properly all the way.

I tried just now and both the file and the .exe work fine. So nevermind me now! :getdown:

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #16 on: July 26, 2012, 11:56:15 PM »
Apparently the first few times I tried the file did not download properly all the way.

I tried just now and both the file and the .exe work fine. So nevermind me now! :getdown:
Ummm, if you found and downloaded a .exe, I would immediately delete it and do a virus scan because I don't make .exe files.

AnonymousPondScum

Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #17 on: July 28, 2012, 01:34:04 AM »
I meant the Executable JAR File.

EthanSilver

  • Lunatic Programmer
  • Got squid, will travel.
    • Ethan Silver's Junkpile - Hacks and translation patches
Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #18 on: July 29, 2012, 07:52:42 PM »
Out of curiousity, and I'll admit I skimmed over the thread largely, any reason why you're not using a 3D API? Maybe I'm just not getting what you're doing here (I'd bring up EosD 3D as a reference but someone already did) but it seems to me like you could just skip all this and fall back on, say, DX or OGL. Use a vertex shader to give it that spherical projection and you're set - virtually all of the math is hardware rather than software. Modern-day computers, and even somewhat dated ones, easily support all that'd be required so if you're worried about portability/hardware requirement issues, don't. :)

Other than that little comment, neat project. EosD 3D often made it hard to know wtf was going on so a more "global" viewpoint would probably help. IMO the biggest issue is depth however, and even a spherical projection won't help with that. Unless you have some really trippy monitor the game is ultimately being represented on a flat surface. Your eyes need multiple viewpoints to create depth information and a flat surface only gives you one. All's you can fall back on is comparing environmental cues like shadows (not exactly present when you're flying high above the ground), scaling (which generally only gives you an approximation of an object's distance; not all that great in a danmaku shooter), or overlap (which only allows you to sort objects (ie, bullet A is in front of bullet B), not tell how far apart they are). Without finding some way of dealing with that, I don't think danmaku shooters and 3D can coexist very well even if you can see more stuff around yourself...


Latest works
The Strongest

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #19 on: July 30, 2012, 07:50:35 AM »
Out of curiousity, and I'll admit I skimmed over the thread largely, any reason why you're not using a 3D API? Maybe I'm just not getting what you're doing here (I'd bring up EosD 3D as a reference but someone already did) but it seems to me like you could just skip all this and fall back on, say, DX or OGL. Use a vertex shader to give it that spherical projection and you're set - virtually all of the math is hardware rather than software. Modern-day computers, and even somewhat dated ones, easily support all that'd be required so if you're worried about portability/hardware requirement issues, don't. :)
I should mention that the reason I pursue this project is to expose myself to interesting problems. This means that the game will only progress so long as there remain interesting avenues to develop the game through. It is also why I choose to write the entire program from scratch. I have a very good understanding of how this program works, and can break down the math pretty well, so if anyone wants to know how anything is done, I will be more than happy to try and explain.
This interest with 3D projection is very near and dear to my heart. I'd hate to make anyone think that I have grand aspirations of game design, I don't.  I'm just worming my way through the work and if a game is left in my trail at some point, ok. At some point I may actively pursue making a game at which point I'll look into how best to do that. You've given me some important terminology.

Other than that little comment, neat project. EosD 3D often made it hard to know wtf was going on so a more "global" viewpoint would probably help. IMO the biggest issue is depth however, and even a spherical projection won't help with that. Unless you have some really trippy monitor the game is ultimately being represented on a flat surface. Your eyes need multiple viewpoints to create depth information and a flat surface only gives you one. All's you can fall back on is comparing environmental cues like shadows (not exactly present when you're flying high above the ground), scaling (which generally only gives you an approximation of an object's distance; not all that great in a danmaku shooter), or overlap (which only allows you to sort objects (ie, bullet A is in front of bullet B), not tell how far apart they are). Without finding some way of dealing with that, I don't think danmaku shooters and 3D can coexist very well even if you can see more stuff around yourself...
I've given it a little thought. I know objects in the distance appear bluer by virtue of the atmosphere, but I think that's a very subtle effect. Still, color variation and alpha channels are probably ho depth is going to be solved.

Also, I'll take this opportunity to mention how there may not be a normal update today because, although a huge problem that has plagued the game since version .2 has been fixed, I have not fixed the stack overload error, and I think that takes priority. I am having serious trouble tracing the exact cause of the issue and I have recently not been able to invest the hours to fix it. My biggest fear is not being able to find a good solution in which case, I guess I might try an established 3D API and kill myself a little inside.
« Last Edit: July 30, 2012, 08:03:41 AM by Imosa »

EthanSilver

  • Lunatic Programmer
  • Got squid, will travel.
    • Ethan Silver's Junkpile - Hacks and translation patches
Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #20 on: July 30, 2012, 06:47:06 PM »
This interest with 3D projection is very near and dear to my heart. I'd hate to make anyone think that I have grand aspirations of game design, I don't.  I'm just worming my way through the work and if a game is left in my trail at some point, ok.
If you're just doing this as a labour of love/out of sheer personal interest/just because it's an interesting challenge, then that's pretty awesome, really. I respect that quite a bit. :)

My biggest fear is not being able to find a good solution in which case, I guess I might try an established 3D API and kill myself a little inside.
Your biggest challenge right now is that you can't really benefit from hardware acceleration (ie, most, if not all, of your calculations occur on the CPU - not 100% familiar with Java, so take that with a grain of salt >_> ). On the other hand, 3D APIs access your hardware directly and, short of specifically setting it up otherwise, will generally try to let it take over rather than the CPU. You will simply never get as good a performance as that regardless of your algorithm... but you probably don't need that much either. So don't let yourself be discouraged. ;) A "bad" solution's fine so long as it doesn't leave your project crippled.

I gave it a shot just now and it looks pretty good. The performance seems just fine on my PC (despite that . Although I keep running into some weird problem... At times it seems like I'll end up "inside" a bullet, which looks weird. I'm guessing collision-detection and the likes aren't implemented yet, so it's probably a little early to talk about this sort of thing. ;) The mouse also causes the program to just lock up after enough movement has occurred (though the keyboard runs just fine). All things considered, doing fly-bys through the bullets with the keyboard as if the bullets were moving towards me didn't feel anything like EoSD 3D's mess of uninterpretable bullet piles, which is great. I'm kinda eager to see this project entering a "gameplay" stage. :)
« Last Edit: July 30, 2012, 07:04:46 PM by EthanSilver »


Latest works
The Strongest

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Re: Defined Sense of Atmosphere v0.4 - 3D Danmaku Proof of Concept Game
« Reply #21 on: August 08, 2012, 10:50:14 PM »
I decided I should probably update what's going on with this project, because I haven't posted in over a week but I'm not killing it.
I've been thinking about looking into and switching to a proper 3D api. On one hand I want to be in the thick of this project and obscure as little work as possible behind other people's stuff, so that the end result is entirely mine. On the other hand, I want to see how Defined Sense of Atmosphere would function as a real game, and look at problems that arise after 3D has been established. After much deliberation I have decided on the ladder. The reason is that while what the program is currently displaying is not correct, I am fairly certain my method is meaning the issues lie in stuff like NAN errors that I mentioned previously. Errors like these really don't interest me much so I feel fine leaving them be. Once I finish the current set of problems I'll run into a the problem of shape collision, not what happens when you collide with something, but what the rendering engine does when any two planes intersect. This is something else I don't really care much about because I think it can only be done with a heuristics shortcut that I don't want to take. On top of all that I have a hunch that a 3D api may not obscure as much as I think since at the end of the day, it still has to remain flexible enough for the programmer.
So 3D api it is; however, there is one last issue. I'm sure Java has a fine 3D api but why use Java? I started with Java because it was convenient but if I'm going seriously pursue a game I might just want to switch over to C++ now for the speed and better performance.
Where am I during this massive change? Nowhere. For the past 3-4 weeks I have been focusing on finishing my summer class, pixel art, and vacationing at the beach, so I've been taking a break from programming and will continue to, at least until next week. The problem is that next week, I start my fall semester, and soon afterwards, a new job. So I'll be studying, working, networking, and being a friend, all of which, kind of has to take priority over personal projects, making learning a new language, and API very difficult. Perhaps I'll just use a Java 3D api and save myself some time, promising to update to C++ later (Valve time, of course). So, I'm putting this project in an official hold until further notice.
This was not a failure. I'm very happy with what I got out of it, more exposure to a subject that I love, a huge step forward in a long standing personal goal, and a chance to show off what I'm all about on this forum.

Now for a little explanation for Ethan's problem because it's something REALLY cool that's actually been around since v0.2. This is going to be pretty long winded but I don't have any practice explaining this so I'm kinda talking myself through it and taking you along for the ride.
For anyone that has been in the same situation as Ethan you may have also thought you were inside a cube since your entire vision was obscured. However, note that moving backwards "gets you out of the cube" but moving forwards doesn't. Indeed, you have failed at interpreting the screens information and should probably be pawned by bullets. Check it out.
At the beginning you might have noticed that the area only contains cubes which are made of flat surfaces and remembered that you have the full sphere of vision. Now you run toward a cube and find yourself at Ethan's screen. Work backwards, what would the world have to look like in order for you to see what Ethan is seeing. Something that you may not have noticed is that the world consists entirely of triangles, each square face of a cube is just two triangles. So every shape in the world is bounded by 3 sides, which are defined by 3 vertices. Where are the 3 sides and vertices in the shape covering Ethan's screen? Well, you can't really tell, they are pretty flush against the edge of your vision. Alright, but at least we know that all the vertices have to be very close to that edge, so lets figure out how a vertex gets to be at that edge. Time for an experiment and stick with me on this.
Put your face up against a wall and touch the wall with your finger. Now draw an imaginary line from your eye down the vision of your eye until it hits the wall, and then draw another imaginary line from your eye to where your finger is touching the wall. What is the angle between these two lines? 30, 45, 60 degrees? Move your finger around and think about this for a second. Now move your figure as far away from your head as possible, still touching the wall. What is happening to that angle? Keep going, beyond where you can reach, and you may notice that the angle will never increase past 90 degrees but it will get infinitely close. In order for that angel to be 90 degrees your finger what you have leave the wall and move next to your eye.
Great, where am I going with all of this? Our screen has 90 degrees out from the center of our vision, conveniently already marked for us. The inner ring has been there since v0.2 and this is exactly why. What we know about the edges and vertices of the shape covering Ethan's vision is that they are farther then 90 degrees out from the center of our vision. They are behind us. If you keep thinking about it, you will realize that in order for a point to reach the edge of our vision, the angle would have to approach 180 degrees.
So imagine 3 points anywhere behind your head and draw a triangle between them. Put the points anywhere you want, so long as they are greater then 90 degrees out from the center of your vision, and you will find that the triangle formed will NEVER be in front of your eye. The only way we could truly see what Ethan is seeing is if the surface was curved within the 3 vertices which we know it isn't because everything is flat surfaces. So what's going on here? It's a rendering error, plain and simple. Ethan has stumbled upon a situation that can not possibly happen in a correct rendering.
I'll save you some trouble and tell you the condition when this error happens: the triangle needs to intersect the line created by your vision, behind your location. I'll leave figuring out why the condition is such, to you.
I'll move on to what the correct rendering should be. Look back at the screen. When drawing a shape what I really want to do is obscure every point within the bounding edges of the shape with the correct color of that shape. When we have a shape behind us what points does it bound. An easy way to figure out where I'm going is to go back to my condition and find the point when the shape intersects the line created by your vision. Where does this point render on the screen? The point will be on the line of your vision but the angle to that point will not be 0 degrees, it will be... 180 degrees. Prepare to make a huge perceptional jump. The point is the entire outer edge of your vision. In order for this method of 3D projection to work, we need to bound our vision by a point so we explode the point into a line. The correct way to render something when it is behind you (as per the condition I gave above) is to color every point that isn't with in the normal bounds of the shape.

So what does this look like. I corrected this problem but never added it to a publishable version, so here are some screenshots. However, first an explanation of coordinates. In these pictures (and when you start the program), you are looking down the z axis, from the origin. The x axis is pointing down and the y axis is pointing right. So a simple way to think of these coordinates is positive x moves something down on the screen, positive y moves something right on the screen, positive z moves something into the screen. This means that the angle out from your vision will stay below 90 degrees so long as z is above 0, the angle will be 90 degrees when z is 0, and the angle will be above 90 degrees when z is negative.

Vertices: (-2,0,2), (2,1,2), (2,-1,2). All z's are positive, all vertices are in front, shape is in front, color all points inside of shape.

Vertices: (-2,0,-2), (2,1,-2), (2,-1,-2). All z's are negative, all vertices are behind, shape is behind, color all points outside of shape.
Now for some not so simple cases. I'm going to graph (1,-2,-2), (-1,-2,-2), and a third point. z is negative so both points are behind, y is negative so both points are to your left, but they have different x's so one will appear above and one will appear below. Two new points, (0,2,3) and (0,2,1) are both in front and to the right; however, the shapes graphed with these two points render very differently.

Here is (1,-2,-2), (-1,-2,-2), (0,2,3).

Here is (1,-2,-2), (-1,-2,-2), (0,2,1).

So that's pretty much it. There is so much I'd like to show in this explanation, but I just don't have the time or the resources. If you want to get more into this stuff, PLEASE feel free to talk to me, because math and computer science are two of my passions and I love explaining what I know, but it really helps if I think someone is interested.
« Last Edit: August 08, 2012, 11:03:55 PM by Imosa »

EthanSilver

  • Lunatic Programmer
  • Got squid, will travel.
    • Ethan Silver's Junkpile - Hacks and translation patches
Hmm, I think I get what you're saying... Your projection behaves oddly when a vertex ends up behind the camera (ie, z is negative relative to the viewpoint) due to it being an impossible image. However it's not as though the vertex can simply be tested against z and discarded since the other two vertices it's connected to might have a positive z. Dunno if you're still tweaking it right now, but would something like this resolve it...?

- Test the polygon's 3 vertices against the camera. If all three of them fall behind the camera, discard the polygon and move on to the next one.
- If one vertex falls behind the camera, clip it to the camera's depth and add a polygon to transform the triangle into a trapezoid (with one end "against" the camera).
- If two vertices fall behind the camera, clip their depth to the camera's without adding any new vertices.
- Rasterize the polygon (ie, fill it in).

This would allow you to simulate having a near clipping plane, preventing the rasterizer from attempting to draw anything that'd be behind the camera. You may want to define an inverted viewing frustum (to simulate a blind-spot) and cull what's inside of it in order to allow for a greater field of vision than 180' rather than simply testing Z, now that I think of it...

(Unless I misunderstood. My bad if that's the case. :) )

Quote
On top of all that I have a hunch that a 3D api may not obscure as much as I think since at the end of the day, it still has to remain flexible enough for the programmer.

The learning curve is a bit steep but once you work out the main bits and pieces required to set up a scene and render a polygon you can easily take it from there and just improve as you learn new concepts. The very basic approach is the same for every API: after having initialized the API as required, send polygon information to the video card (through the API) along with "cues" (eg, use texture #42, or turn off lighting) and tell it to render those each frame. Then deinit once you're done. Also, keep an eye out for space pirates at all times.

Quote
I'm sure Java has a fine 3D api
If I'm not mistaken (I don't really do any java ^^; ) it should support OpenGL. Nearly all platforms do. While you'll probably hear a LOT of debating over wether D3D or OGL is the best, the truth is they're virtually the same thing. In the end the majority of the work gets done by your video card and APIs just provide a framework to use the card; they all have to communicate with the card the same way when everything's said and done so the concepts only slightly differ...

Quote
but why use Java? I started with Java because it was convenient but if I'm going seriously pursue a game I might just want to switch over to C++ now for the speed and better performance.
C++ is not a magic speed-bullet. ;) C++ is considered a performant language because it can be very, very low-level (OHAI inline assembly, unmanaged array boundaries, and void*!) just as it can be very, very high-level (OHAI object inheritance model, singletons, and templates!). But ultimately code written in C++ and code written in any other language will perform about the same (unless you're dealing with an especially poor language or one that's heavily interpreted, like javascript for instance) - the REAL difference is in what your code is actually doing. C++ may give you tools that allow you to shape your code better, it also gives you tools that allow you to ruin it bad.

For that matter...

Quote from: Wikipedia's entry on Java
In the early days of Java (before the HotSpot VM was implemented in Java 1.3 in 2000) there were some criticisms of performance. As of 2011, these criticisms are generally unfounded - Java has been demonstrated to run at a speed comparable with optimised native code, and modern JVM implementations are regularly benchmarked as one of the fastest language platforms available - typically just a small factor slower than C/C++.

I'd tell you to stick to Java if you're not as comfortable in C++ if you intend to seriously pursue a game (unless you feel you absolutely must use D3D as your API). Ultimately what little extra performance you can squeeze out of using a different language that compiles sliiiightly better will be lost to your using an inferior solution to solve a problem out of unfamiliarity with the language's intricacies.


Latest works
The Strongest

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
Thanks for the advice. I really haven't looked into any 3D APIs so I can't really comment on the learning curve. As for the use of C++ I guess I need to look a little more at the differences are between Java and C++ and avoid jumping on the band wagon. Thanks.

I think you may be misunderstanding my projection a bit.
Hmm, I think I get what you're saying... Your projection behaves oddly when a vertex ends up behind the camera (ie, z is negative relative to the viewpoint) due to it being an impossible image. However it's not as though the vertex can simply be tested against z and discarded since the other two vertices it's connected to might have a positive z. Dunno if you're still tweaking it right now, but would something like this resolve it...?

- Test the polygon's 3 vertices against the camera. If all three of them fall behind the camera, discard the polygon and move on to the next one.
- If one vertex falls behind the camera, clip it to the camera's depth and add a polygon to transform the triangle into a trapezoid (with one end "against" the camera).
- If two vertices fall behind the camera, clip their depth to the camera's without adding any new vertices.
- Rasterize the polygon (ie, fill it in).

This would allow you to simulate having a near clipping plane, preventing the rasterizer from attempting to draw anything that'd be behind the camera. You may want to define an inverted viewing frustum (to simulate a blind-spot) and cull what's inside of it in order to allow for a greater field of vision than 180' rather than simply testing Z, now that I think of it...

(Unless I misunderstood. My bad if that's the case. :) )
Right off the bat I want to clarify that the projection does not behave oddly when a single vertex is behind you (which for simplicity's sake is negative z). The only point that has any issue in projection is (0,0,z) where z<=0 and in practice, such a projection almost never occurs (it does occur in the current versions but only because you use the arrow keys). Everything else is nicely defined. In any case I think what a point does when it is at those coordinates is a matter for another discussion.
You begin talking about discarding and clipping polygons, and that shouldn't happen. You have a full sphere of vision, so things don't disappear, they just go somewhere else. It's now a matter knowing where they go. (1,-2,-2), (-1,-2,-2), (0,2,3) was in front of the camera and it rendered exactly as should be expected, and in the demos you have polygons that are entirely behind you and they render as should be expected. It's only when a shape bounds the direction behind your head that things go wrong because you are forced to color in that one point that you can't really see. However, this is far from constituting a blind spot because a blind spot is an area, and this is just a point.
Originally I did consider just skipping polygons that met this problem condition but then I realized that these polygons still obscure other things that need obscuring.

Perhaps this will help. You can now move in the above test case but I'm not sure what nasty errors might occur. Spin yourself around some with IJKLUO and see how the polygon acts. Remember the meaning of the inner and outer circles (if I've explained them well enough for you to pick them up, otherwise, good luck).
http://www.mediafire.com/download.php?4vn1jwj0w7rx8hx
Also check out the wikipedia article on the projection. There's a really simple image that explains what the projection actually does. http://en.wikipedia.org/wiki/Lambert_azimuthal_equal-area_projection

Incidentally, not touching the project for two weeks and then rigging a test case when I officially announce the project is on hold. I suck at this.

-=+Edit+=-
One thing to know is that you can ignore all the stuff that appears outside the outer ring. It's easy to draw a giant triangle then it is to draw the circle.
« Last Edit: August 09, 2012, 02:36:07 AM by Imosa »

XYXYX

  • Space[d]Cat
  • "hum is the music, natural is the static..."
    • Space[d]Cat
If you want to quickly prototype some stuff, have you looked at using Processing with Toxiclibs, Processing is really good for quickly prototyping stuff, and I've seen lots of projects that use for instance, particles mapped to a spheres surface (thats where toxiclibs comes in) something like these for example http://www.flight404.com/blog/?p=370 and http://www.flight404.com/blog/?p=358, theres also librarys on the Processing site (under reference) that make camera control alot easier, and it all compiles into .jars (since its written in Java)

Id love to see what comes out of this project, if your careful i think it can be awesome, or too spinny to play ;) GOOD LUCK! What have you been upto with it lately?

Imosa

  • Any sufficiently advanced technology
  • is indistinguishable from magic
If you want to quickly prototype some stuff, have you looked at using Processing with Toxiclibs, Processing is really good for quickly prototyping stuff, and I've seen lots of projects that use for instance, particles mapped to a spheres surface (thats where toxiclibs comes in) something like these for example http://www.flight404.com/blog/?p=370 and http://www.flight404.com/blog/?p=358, theres also librarys on the Processing site (under reference) that make camera control alot easier, and it all compiles into .jars (since its written in Java)

Id love to see what comes out of this project, if your careful i think it can be awesome, or too spinny to play ;) GOOD LUCK! What have you been upto with it lately?
It's been hard to find time during the semester to focus on a project like this. The idea is still vivid in my mind though, so I'll keep your advice. I have some time over the holidays and while I haven't decided what I'll do I've been thinking about something a little easier this all of this (sad, thigh it may be).