Summer of Code/2014/AnubhavJ/Turtle Art 3D
About Me
What is your name?
Anubhav Jaiswal
What is your email address?
anubhav2503@gmail.com
What is your Sugar Labs wiki username?
Sugar Labs wiki username: AnubhavJ
What is your IRC nickname on irc.freenode.net?
IRC nickname: martian_
What is your first language?
My first language is 'Hindi'. Though I'm proficient in 'English' as well.
Where are you located, and what hours (UTC) do you tend to work?
Location: Hyderabad, India
Time Zone: UTC + 5:30 (Indian Standard Time)
Working hours: 13:30 to 21:30 UTC (flexible)
Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer?
I am new to Open Source and have only recently begun contributing to open source projects. During this period, my contributions have been to Sugar Labs. I want to start giving back to the Free and Open Source community that has given me so much both in terms of software, experience and guidance.
Why Sugar Labs?
The Sugar Learning Platform is the core component of a worldwide effort to provide every child with equal opportunity for a quality education. When I'm contributing to this open-source project, not only I will be doing it through lines of code, but indirectly, this will help in a child's education in some way or the other. Sugar's activities are used in school every day by nearly 3 million children in more than forty countries. If I could use my skills in such a way that even a single child is benefited from it, nothing would make me more happier.
ABOUT THE PROJECT
Name:
Turtle Art 3D
Describe your project in 10-20 sentences. What are you making? Who are you making it for, and why do they need it? What technologies (programming languages, etc.) will you be using?
The Turtle Art 3D is an extension to already existing core activity of sugar – Turtle Art. Sugar, as of now lacks any 3D programming environments. Turtle Art is limited to drawing only 2D figures. The idea is to provide Turtle Art with a 3D programming interface which would include modules such that the user can draw 3-Dimensional figures using logo blocks. There is a rich program in 3D Logo developed by Horacio Reggini. The specific project would be to write an extension to Turtle Blocks to encompass Reggini's ideas.
This plugin would add basic 3D transforms to Turtle Blocks (e.g., setxyz, pitch, roll, yaw), camera and lighting models, surface texture mapping, and a rich set of example projects. One of the possible ways of creating models would be to use the concept of objects. An extended goal, if time permits would be a plugin for generating objects for MineCraft.
This extension would be useful to students of the age-group 10 – 15. It would enable them to create 3D figures using simple logo blocks. This would help them in a number of ways:
- serve as a precursor to learning programming languages in future
- to build an understanding of 3D geometry, 3D transformations
- improve their imagination and 3D visualization skills
- lay a strong foundation for the mathematical concepts of co-ordinate geometry and vectors
- boost their creativity
Programming Language: Python
Libraries: pyGtk , library for 3D rendering (OpenGL)
What is the timeline for development of your project?
Week | Task |
---|---|
<22 Apr - 5 May> (Pre-program week 1) | Discuss the features required for the extension and the modules to be written |
<6 May - 20 May> (Pre-program week 2) | Work and plan out the design of the extension |
<20 May - 27 May> | Create the basic framework for the activity |
<27 May - 3 June> | Create the 3D environment, Enable the 3D motion of the turtle equipped with basic functionalities - setxyz, pitch, roll, yaw |
<3 June - 10 June> | Add support for palettes which would contain blocks for turtle command |
<10 June - 17 June> | Add camera and lighting models |
<17 June - 24 June> | Add texture rendering to surfaces of 3D objects |
<24 June> | MID TERM EVALUATIONS |
<24 June - 1 July> | Buffer Week |
<1 July - 8 July> | Compile up the code, Create sample projects/examples by adopting ideas from Reggini’s implementation |
<8 July - 22 July> | Present the code in front of kids and teachers, note the challenges faced and collect their feedback |
<22 July - 29 July> | Get back to design and iterate on success/failures from the feedback, Make necessary changes to code |
<29 July - 5 August> | Add ‘export to 3D model’ capabilities such that the model is compatible with use in Blender |
<5 August - 11 August> | Clean up UI, Fix bugs, Write documentation |
<11 August - 18 August> | Wrap up the complete work and submit the code for Final Evaluations |
Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described.
- A prototype of Turtle Art 3D: Developed a prototype for the Turtle Art 3D to get a better understanding of the work that needs to be done. It can be reviewed here:
https://github.com/Anubhav-J/TA3D
- Familiarity with Turtle Art codebase: Possess some level of familiarity with the existing Turtle Art codebase
- Familiarity with submission and review procedure
- Prior experience with python and Graphics programming
- No prior commitments in summer, it would be my top priority
- Summer Vacations during the months of May, June and July , therefore can spend at least 40 hours per week (6 days a week)
- Other than that, I enjoy working with Python and C++ and have worked on several projects
Relevant Prior Experience
- Developed a complete 3D environment game using OpenGL
https://github.com/Anubhav-J/3d-world
- Implemented OpenGL graphics pipeline in C++
https://github.com/Anubhav-J/pipeline
- Developed a 2D game in python using curses library
You and the community
If your project is successfully completed, what will its impact be on the Sugar Labs community?
My thoughts:
Once this project is successfully completed, Sugar will then have a completely new and one of a kind 3D programming environment for students. A student in any part of the world will then be able to not only create 3D visualizations but at the same time improve his mathematical concepts of coordinate geometry and vectors. It is designed to be easy enough for children, yet powerful enough for people of all ages. It would serve as a playground where any child can learn to create 3D drawings and figures using his imagination and also serve as a challenge to the more adventurous to create complex 3D art involving a lot of co-ordinate geometry concepts.
Walter Bender
Horatio Reggini developed the first 3D Logo project back in the early 1980s. He argued that 3D Logo engaged children in the powerful ideas of perscpective and visual perception. Ironically, in the 30+ years since, while 3D is a large part of our entertainment life, it is largely missing from the tools for learning. None of the popular programming enviroments for children have 3D capabilities. That will change as a direct result of this project. --Walter (talk) 20:18, 19 March 2014 (EDT)
Tony Forster A 3D programming extension has the potential to be a very valuable contribution to the Sugar community. 3D is highly prized by children and the opportunity to author 3D is highly motivating for them. Motivation is strongly associated with quality learning. The best programming tools for children are low entry and high ceiling, 3D lifts the ceiling quite high. If the perception of low entry can be maintained, that is that the early part of the learning curve is perceived as gradual, then this will be a valuable contribution to the Sugar community. Tonyforster (talk) 01:03, 21 March 2014 (EDT)
What will you do if you get stuck on your project and your mentor isn't around?
An organisation isn't run by one person, the spirit of open source embodies community involvement. If my mentor isn't around, I'm sure there will always be willing developers from the sugar community that I can depend on. Also, depending upon the type of problem, I can always ask about it on relevant IRC channels. If all else fails, in my college I am surrounded by students who are open source enthusiasts and have vast amounts of python and Graphics experience and are always ready to help. So there are a lot of ways I can tackle a problem I'm stuck on when my mentor isn't available. In the worst case, I can always go through the code and work upon it myself.
How do you propose you will be keeping the community informed of your progress and any problems or questions you might have over the course of the project?
- Create a Wiki page for overall project state containing: ToDo, wishlist, setup, how-to send patches/pull reqs, etc.
- Maintain a blog for detailed weekly progress and how the development is coming along.
- Questions asked via IRC and/or mailing list.
- Major milestones announced to Community via mailing list.
Miscellaneous
Screenshot of sugar development environment Home view
Link to pull request
Here is the link to a patch: (author: anubhavj, committer: Manuel Quiňones)
https://git.sugarlabs.org/browse/mainline/commit/58d23139df8a5e241be4d6b56b0c9176c2bc99fc
Describe a great learning experience you had as a child.
A great learning experience for me would be when I used to teach Maths to my little brother. Initially I was afraid to do so as I myself was not an expert in it and had a tendency to avoid. But it was later that I realized that teaching not only helped him, but also aided me in improving my Mathematical skills and refining my concepts. It was then that I realized the value of imparting knowledge in whatever way you can.