# 3D Rendering with JOGL

Λογισμικό & κατασκευή λογ/κού

13 Δεκ 2013 (πριν από 4 χρόνια και 6 μήνες)

102 εμφανίσεις

3D Rendering with JOGL

Introduction to Java OpenGL Graphic Library

By Ricardo Veguilla

http://ece.uprm.edu/~veguilla/java_opengl_demo/

3D Graphics Intro

3D graphics
are
images generated from
abstract descriptions of

three dimensional
objects
.

Representations of three
-
dimensional
geometry
are

projected to a two
-
dimensional plane

(screen) for viewing by a
user.

The projection process simulates

the
interaction between light and the object
surfaces
. This creates an illusion of 3D,
hence the name 3D rendering.

Requirements for 3D Rendering

A virtual camera:

Decides what should end up in the final image

A 3D scene:

Geometry (triangles, lines, points, and more)

Light sources

Material properties of geometry

Textures (images to glue onto the geometry)

A triangle consists of 3 vertices

A vertex is 3D position, and may
include normals and more.

Virtual Camera

Defined by position, direction vector, up
vector, field of view, near and far plane.

Create image of geometry inside gray
region

point

dir

near

far

fov

(angle)

Geometry Manipulation

Originally, an object is in ”model space”

Move, orient, and transform geometrical
objects into ”world space”

Example, a sphere is defined with origin at

Translate, rotate, scale to make it appear
elsewhere

Done per vertex with a 4x4 matrix
multiplication!

The user can apply different matrices over
time to animate objects

Example: A 3D square

x

y

glTranslatef(8,0,0);

glTranslatef(8,6,0);

glScalef(2,2,2);

glTranslatef(0,7,0);

glRotatef(45,0,0,2);

The Geometry Color

Triangle color defined per vertex

Interpolate
colors over the triangle

blue

red

green

Texturing

+

=

Painting images onto
geometrical

objects

Geometry Projection

Orthogonal

Perspective

OpenGL

The Open Graphics
Language

De facto Application Programming
Interface (API) for cross
-
platform
development of 3D graphics
applications.

Implementations available for all
major Operating Systems and
hardware platforms.

Support for hardware accelerated 3D
rendering.

Scalable, high
-
level, easy to use, well
documented.

JOGL

Jogl is a Java programming language
binding for the OpenGL 3D graphics API

Supports integration with the Java
platform's AWT and Swing widget sets

routines (OpenGL 2.0 with vendor
extensions)

Also provides platform
-
independent
-
accelerated off
-
screen rendering.

OpenGL
-

Primitive types

Defining OpenGL primitives

glBegin( GL_PRIMITIVE_TYPE)

glVertex(…)

glVertex(…)

glEnd() Block.

Transformation Matrices

OpenGL provide 3 transformation matrix
stacks:

Perspective Matrix

Used for viewing
transformations

equivalent to positioning and
aiming a camera.

Modeling Matrix

Used for modeling
transformations

equivalent to positioning and
orienting the model to be drawn.

Texture Matrix

Used for texture
transformations

equivalent to positioning and
orienting the texture to be drawn over a
polygon.

Transformation functions

()

glTranslate
(TYPE x, TYPE y, TYPE z)

glRotate
(TYPE angle, TYPE x, TYPE y, TYPE z)

glScale
(TYPE x, TYPE y, TYPE z)

glPushMatrix
()

glPopMatrix
()

()

Loads the identity matrix into the current
transformation matrix.

Used to reset the current transformation
matrix before performing a transformation.

Translatoin

glTranslate
(TYPE x, TYPE y, TYPE z)

Multiplies the current transformation matrix
by a matrix that moves an object (the local
coordinate system) by the given x, y, and z
values.

Rotation

glRotate
(TYPE angle, TYPE x, TYPE y,
TYPE z)

Multiplies the current transformation matrix
by a matrix that rotates an object (or the
local coordinate system) in a counter
clockwise direction about the ray from the
origin through the point (x, y, z). The angle
parameter specifies the angle of rotation in
degrees.

Scaling

glScale
(TYPE x, TYPE y, TYPE z)

Multiplies the current transformation matrix
by a matrix that stretches, shrinks, or
reflects and object (or the local coordinate
system) along the axes. Each x, y, and z
coordinate of every point in the object is
multiplied by the corresponding argument
x, y, or z.

Controlling the transformation
matrix stacks

glPushMatrix
()

Pushed the current transformation
matrix into the stack.

glPopMatrix
()

Loads the matrix at the top of the
stack into the current transformation
matrix.

OpenGL
-

Code Example

// Set the viewport size

glViewport(0, 0, width, height);

// Clear the window

glClear(GL_COLOR_BUFFER_BIT);

// Set the drawing color

glColor3f(1.0, 1.0, 1.0);

// Start primitive type definition

glBegin(GL_POLYGON);

// Specify verticies

glVertex2f(
-
0.5,
-
0.5);

glVertex2f(
-
0.5, 0.5);

glVertex2f(0.5, 0.5);

glVertex2f(0.5,
-
0.5);

// End primitive type definition

glEnd();

// Flush the buffer to force drawing of all objects thus far

glFlush();

References:

OpenGL
-

The Industry Standard for
High Performance Graphics

http://www.opengl.org/

Jogl

Java OpenGL Bindings

https://jogl.dev.java.net/

Wikipidia

OpenGL

http://en.wikipedia.org/wiki/OpenGL