Difference between revisions of "Render Part A Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 72: Line 72:
  
 
===Chord===
 
===Chord===
 +
{{RubyToImplement|chord|render/assignment|Chord|initialize(x_radius, y_radius, theta_a, theta_z)<br/>render()}}
 +
 
Note: to produce the reference image the code below was used:
 
Note: to produce the reference image the code below was used:
  
Line 84: Line 86:
  
 
===Image===
 
===Image===
 +
{{RubyToImplement|image|render/assignment|Image|initialize(path)<br/>render()}}
 +
 
{{RubyToRun|image|render/assignment|main}}
 
{{RubyToRun|image|render/assignment|main}}
  
Line 89: Line 93:
  
 
===Text===
 
===Text===
 +
{{RubyToImplement|image|render/assignment|Text|initialize(text, font)<br/>render()}}
 +
 
{{RubyToRun|text|render/assignment|main}}
 
{{RubyToRun|text|render/assignment|main}}
  
Line 100: Line 106:
  
 
====Component====
 
====Component====
 +
{{RubyToImplement|bezier_curve|render/assignment|BezierCurve|initialize(control_points)<br/>render()}}
 +
 
{| class="wikitable" style="text-align: right; "
 
{| class="wikitable" style="text-align: right; "
 
| Quadratic (Second Order) Curve:
 
| Quadratic (Second Order) Curve:

Revision as of 05:47, 29 November 2020

OpenGL

glBegin
glVertex2f
glEnd
glColor3f
glEnable
glPushMatrix
glTranslatef
glRotatef
glPopMatrix
glMap1f
glRasterPos2f
glPixelZoom
glDrawPixels
glClearColor

GLUT

glutBitmapCharacter

Code to Investigate

Cavalcade of Graphics

ruby/examples/cavalcade_of_graphics.rb

Code to Implement

Components

Each of the renderable components has its own file in the src/main/ruby/render/assignment directory.

Equilateral Triangle

file: src/main/ruby/render/assignment/equilateral_triangle.rb Ruby logo.svg
class: EquilateralTriangle
superclass: initialize(half_side_length)
render()
methods: '

Equilateral Triangle Render Studio.svg

wikipedia

The triangle should be equilateral, rendered with its the origin at the center of mass.

Your constructor should accept a half_side_length parameter.

The height of the triangle should be side_length * sqrt(3)/2

The center of mass is one third from the bottom.

So, the bottom left point A's x coordinate should be -half_side_length and its y coordinate should be -1/3 height.

file to run: src/main/ruby/render/assignment/equilateral_triangle.rb Ruby logo.svg

Render equilateral triangle.png

Rectangle

file: src/main/ruby/render/assignment/rectangle.rb Ruby logo.svg
class: Rectangle
superclass: initialize(half_width, half_height)
render()
methods: '
file to run: src/main/ruby/render/assignment/rectangle.rb Ruby logo.svg

Render rectangle.png

Ellipse

file: src/main/ruby/render/assignment/ellipse.rb Ruby logo.svg
class: Ellipse
superclass: initialize(x_radius, y_radius)
render()
methods: '

Note: to produce the reference image the code below was used:

    slice_count = 32
    delta_theta = (2*Math::PI) /slice_count
file to run: src/main/ruby/render/assignment/ellipse.rb Ruby logo.svg

Render ellipse.png

Chord

file: src/main/ruby/render/assignment/chord.rb Ruby logo.svg
class: Chord
superclass: initialize(x_radius, y_radius, theta_a, theta_z)
render()
methods: '

Note: to produce the reference image the code below was used:

    slice_count = 32
    delta_theta = (@theta_z-@theta_a) / slice_count

Note: a Chord with 32 slices will have 33 points.

file to run: src/main/ruby/render/assignment/chord.rb Ruby logo.svg

Render chord.png

Image

file: src/main/ruby/render/assignment/image.rb Ruby logo.svg
class: Image
superclass: initialize(path)
render()
methods: '
file to run: src/main/ruby/render/assignment/image.rb Ruby logo.svg

Render image.png

Text

file: src/main/ruby/render/assignment/image.rb Ruby logo.svg
class: Text
superclass: initialize(text, font)
render()
methods: '
file to run: src/main/ruby/render/assignment/text.rb Ruby logo.svg

Render text.png

Bézier Curve

Point2

To support Bézier curves you will want to implement Point in point2.rb. You may wish to use Ruby's convenient Struct construct.

You should be able to construct a Point2 with an x and a y and be able to access those values.

Component

file: src/main/ruby/render/assignment/bezier_curve.rb Ruby logo.svg
class: BezierCurve
superclass: initialize(control_points)
render()
methods: '
Quadratic (Second Order) Curve: Bézier 2 big.svg Bézier 2 big.gif
Quadratic (Third Order) Curve: Bézier 3 big.svg Bézier 3 big.gif
Fourth Order Curve: Bézier 4 big.svg Bézier 4 big.gif
file to run: src/main/ruby/render/assignment/bezier_curve.rb Ruby logo.svg

Render bezier curve.png

Testing Your Solution

Visual Comparison

file to run: src/test/ruby/render/part_a/part_a_test_snapshots_web_page_generator.rb Ruby logo.svg

Unit Test

file: src/test/ruby/render/part_a/part_a_unit_test.rb Ruby logo.svg UnitTest

note: ensure that you have removed all printing to receive credit for any assignment.