Login [Register]
Don't have an account? Register now to chat, post, use our tools, and much more.
One of my final unfinished goals for summer 2014 was to evaluate the feasibility of a long-planned 3D graphing application for the TI-84 Plus C Silver Edition, called Graph3DC. Based heavily on my experiences writing Graph3DP in C for the Casio Prizm, it was intended to be a fast, responsive z80 ASM 3D graphing application for the TI-84+CSE. I'm happy to say that I've started writing the program, and it looks like it will not only be feasible within the constraints of the calculator's LCD and CPU speed, but with luck also work as a Doors CSE program rather than needing to be converted to an App. After a week of wrestling with fixed-point arithmetic and trig routines, I have completed my first pass over code to compute, rotate, color, and render the simplest possible graph, a flat grid. As you can see, work remains to be done on the rotation and coloring code, but I look forward to keeping this topic updated as I move forward.

Left to right: rotating a graph, a flat z=0 graph, and a z=x+y graph
Looking very nice indeed Kerm!
Looking awesome so far, eager to see more progress Smile
Thanks, guys! I found and repaired problems with multiplying negative numbers and with generating colors, so rotation now works properly. The two screenshots below show rotating the z=0 plane (left) and the z=x+y plane (right). The weird things that happen on the right are the result of a special frustrum culling value being set for some points but rendering not recognizing that culling value yet; soon, those lines will not be drawn. Progress!

This looks amazing. I just want to point out I've no idea what 3d graphing is good for, or how it is even done :p But it looks awesome Very Happy
Thanks very much; I'm having fun making this now that I finally have graphics to look at and can tell that a week of programming was not for naught. One of the steps I'm going to need to work on is getting users to type in equations, a la Input/Prompt, and the following reference materials should help:
http://z3.invisionfree.com/Cemetech/index.php?showtopic=354&st=0&#entry10490173
http://www.cemetech.net/projects/uti/viewtopic.php?t=7976
I will also need to convert my 8.8-bit fixed-point numbers to and from TI floating point numbers with a selectable scaling factor between 10^-N and 10^N, a process I'm still designing in my head. Finally, here's the current status of Graph3DC rendering z=0 against Graph3DP (man, I miss the Prizm's CPU):
*bump* On the train this morning I made a number of improvements. The screen coordinates for both X and Y coordinates are now stored as words, which will make interpolating the points where partially-offscreen line segments cross the LCD boundary possible. This may make it slower to draw black over lines than to simply fill the screen with black, so I'll need to investigate once I actually implement the routine that deals with partially and fully offscreen lines. In other news, I implemented the missing two color modes originally from Graph3DP, so Graph3DC now offers three color modes:
1. Spectrum (from a minimum of blue up to a maximum of red, going through green)
2. Blues (from a minimum of blue to a maximum of green, going through turquoise)
3. Flame (from a minimum of red to a maximum of yellow, going through orange)

You can see these three color modes demonstrated in the GIF below. Don't mind the apparently missing line segments; that's just jsTIfied's screenshotting code getting overzealous with color approximation.
Screenshot and video both look awesome. Looks like this is coming along very nicely Very Happy
tifreak8x wrote:
Screenshot and video both look awesome. Looks like this is coming along very nicely Very Happy
Thanks, I'm very happy with the progress, and the fact that so far the speed is within the realm of acceptable even for student users. I still have a lot to add within the 4.5KBish remaining to me, but I'm confident I won't run out of space. I'm less confident that I'll find a sane way to let the OS do input for me, failing at which would be something of a dealbreaker.
Are you planning to do Inequalz style integration where you provide your own Y= screen and graph screen or will it all be inclosed in the app?

I think for schools and the such more TI like integration might be worth the speed trade offs, you're not really gonna beat a TI 89 or Nspire CAS on a z80 anyway so seamless integration would help the usefulness.
TheStorm wrote:
Are you planning to do Inequalz style integration where you provide your own Y= screen and graph screen or will it all be inclosed in the app?
That would be neat, but since it's a program instead of an App, I think it would be cleaner to just enclose it in a standalone program, like Graph3DP.

Quote:
I think for schools and the such more TI like integration might be worth the speed trade offs, you're not really gonna beat a TI 89 or Nspire CAS on a z80 anyway so seamless integration would help the usefulness.
If I use the OS for text and numeric input, I'll get all the benefits of entering equations and window bounds using the OS and its menus without having to deal with tons of really terrible hooks.

I implemented graph bounds and axes today, toggleable using the [F2] key that corresponds to the little axes icon. Here's how it looks with my favorite Z=((X+Y)/2)^2 graph.

The box and arrows actually come up like that? That looks fantastic. Makes me wish I knew how to put this program to use, now :<
Its amazing how the increase in resolution and the addition of colour can make apps like this look so professional. Truely is a masterpiece in the making Kerm Smile.
tifreak8x wrote:
The box and arrows actually come up like that? That looks fantastic. Makes me wish I knew how to put this program to use, now :<
Yes! The bounding box and the axes are rendered automatically; the axes appear at x,y=0, y,z=0, and x,z=0, while the bounding box is drawn with faces at xmin, xmax, ymin, ymax, zmin, and zmax. You can toggle showing neither, both, or only one of the two elements.
tr1p1ea wrote:
Its amazing how the increase in resolution and the addition of colour can make apps like this look so professional. Truely is a masterpiece in the making Kerm Smile.
Thank you, tr1p1ea! As I said on IRC, your fast colored line routine helps a lot in making this possible, so cheers for that.

Edit: I implemented proper frustrum culling, in that line segments marked for culling now actually get culled during rendering. I was about to implement proper clipped drawing of lines that cross LCD boundaries when I discovered that tr1p1ea had already implemented this feature (which unfortunately in turn showed me how I could have accelerated clipping the line-drawing routine on the Casio Prizm). Check out the graph of Z=((X+Y)/2)^2 for Xmin=Ymin=-8 and Xmax=Ymax=8 below, demonstrating culling and clipping:

Looks sensational and I love the culling and clipping - makes for a truely professional look.

I was wondering if there are any updates?
KermMartian wrote:
(which unfortunately in turn showed me how I could have accelerated clipping the line-drawing routine on the Casio Prizm)


So, Prizm update gogogo?

Screenshots continue to impress and amaze.
tr1p1ea wrote:
Looks sensational and I love the culling and clipping - makes for a truely professional look.

I was wondering if there are any updates?
No new updates, unfortunately. This has been the last week of my summer internship, and I've been transitioning into graduate student mode for an impending paper deadline. I hope to have more updates as soon as I figure out a sane way to handle transforming between my 8.8-bit fixed-point numbers and TI floating-point numbers. I know I'm going to need a scaling value in there, but I haven't gotten the mental space to figure out the details yet.

tifreak8x wrote:
KermMartian wrote:
(which unfortunately in turn showed me how I could have accelerated clipping the line-drawing routine on the Casio Prizm)


So, Prizm update gogogo?
That's unlikely to happen. I'm quite happy with the state of the Prizm grapher, and don't feel that additional effort is worth it for the number of users first the calculator in general and specifically my program have.

Quote:
Screenshots continue to impress and amaze.
Thank you! I hope the finished product lives up to the promise of these early glimpses.
*bump* I talked to BrandonW this evening on HCWP about equation inputs, and he strongly recommended using the dialog functions (a la http://brandonw.net/calcstuff/dialogNotes.txt) if they still exist on the TI-84+CSE. I'll be doing some reverse-engineering to try to find where they are on the new calculator.
This is quite an impressive program! I do think that the color is an amazing touch. I can't believe I haven't noticed this until now. Great job! Smile
MateoConLechuga wrote:
This is quite an impressive program! I do think that the color is an amazing touch. I can't believe I haven't noticed this until now. Great job! Smile
Thanks very much! It's unfortunate that the 15MHz z80 combined with the "giant" color LCD keeps the speed from being too impressive, but at least it functions fast enough to hopefully not frustrate end-users. Now that I've spoken to BrandonW about the mechanics of entering equations, I feel more confident that this is something I'm going to be able to complete in a moderately professional-looking form. Smile

Edit: Here's what I have and what I need to know:

Code:
Name                       Monochrome Equate  Color Equate
bcall DialogInit            4C06 ->             4BF1?
bcall StartDialog           4C03 ->             4BEE?
bcall RestartDialog         4D3E ->             4D29?
bcall StartDialog_Override  4C21 ->             4C0C?
bcall DialogStartGetKey     4C1E ->             4C09?
bcall ForceDialogKeypress   4C1B ->             4C06?
bcall GetDialogNumOP1       4C09 ->             4BF4?
bcall SetDialogNumOP1       4C0C ->             4BF7?
bcall GetDialogNumHL        4C0F ->             4BFA?
bcall SetDialogKeyOverride  4C15 ->             4C00?
bcall ResDialogKeyOverride  4C18 ->             4C03?
bcall CallDialogCallback    4C24 ->             4C0F?
bcall SetDialogCallback     4C27 ->             4C12?
bcall ResDialogCallback     4C2A ->             4C15?
bcall CopyDialogNum         4C2D ->             4C18?
bcall DialogKeyHook         4FE1 ->             4FC6?
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 5
» All times are GMT - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement