Skip to content
Snippets Groups Projects
Commit b62e2e53 authored by Florian Hölzl's avatar Florian Hölzl
Browse files

YELLOW.

refs 3373
parent 3b6fd91b
No related branches found
No related tags found
No related merge requests found
Light.java f82af2c1972b1a9d6119450a71e539a17748183d RED
Light.java c8f4ab5999b0e1b4bae3af58dff50fd2b5374521 YELLOW
Light3DLight.java 8471120e5c7c1f19f52e4052e324884d8d8a01f4 GREEN
......@@ -35,6 +35,10 @@ import org.fortiss.tooling.graphicsGL.ui.util.GLPrimitives;
* @author hoelzl
*/
public class Light {
/** W coordinate for point lights. */
private static final float POINT_LIGHT_W = 1.0f;
/** W coordinate for directional lights. */
private static final float DIRECTIONAL_LIGHT_W = 0.0f;
/** The GL_LIGHTx to be used. */
private final int glLightNumber;
......@@ -97,15 +101,15 @@ public class Light {
/** Sets the light position. */
public void setPosition(float x, float y, float z) {
// TODO (SB, 14)
// copy light type from current light => get(3) returns W coordinate
lightPosition = toFloatBuffer(new float[] {x, y, z, lightPosition.get(3)});
}
/** Switches between directional and point light source. */
public void setDirectional(boolean directional) {
// TODO (SB, 14)
// copy light position from current light => get() return XYZ coordinates
lightPosition =
toFloatBuffer(new float[] {lightPosition.get(0), lightPosition.get(1),
lightPosition.get(2), directional ? 0.0f : 1.0f});
lightPosition.get(2), directional ? DIRECTIONAL_LIGHT_W : POINT_LIGHT_W});
}
}
CompositeViewObject.java 879fc2f6979666d0aee80dce656b488589fed9d1 GREEN
Graph3DViewObject.java 2ab8d5c1f3ed2212351b873c58157b8815a02969 GREEN
Object3DViewObject.java 2479550fe19cc64cd6ea28585bb1f75840b06109 GREEN
PickableObjectBase.java 8bc5f3b543b26fa0e6b28a63ca9520589bad252b GREEN
RotatedObject.java f2e75c5aea9d128371c86fa3a449052390c76d54 GREEN
ScaledObject.java 59fa121e54e5b4be689714b2ee6f0972ae5d6497 GREEN
Graph3DViewObject.java c427f056f46f71175b180d490cd7f7d299156db2 YELLOW
ViewObjectBase.java 2fbcf09f17655c06abffaeb00dbc558e711404eb GREEN
WrappedViewObjectBase.java bb499adfc59ecb43c59f8f3b8ed88505688e2beb GREEN
......@@ -127,7 +127,6 @@ public class Graph3DViewObject extends ViewObjectBase {
}
setColor(WHITE);
}
/** Renders objects as billboards at the given position */
......@@ -154,7 +153,6 @@ public class Graph3DViewObject extends ViewObjectBase {
}
renderText(camera, toRender, pos);
}
/** Renders objects as billboards at the given position */
......@@ -196,7 +194,6 @@ public class Graph3DViewObject extends ViewObjectBase {
}
restoreMatrix();
}
/** {@inheritDoc} */
......
ColorUtil.java 0eced71852172ba1bb4b3ab9c2a0371665ac209b GREEN
FloatBufferUtils.java c1b35aa2e32d25d12780d7b552333cfb7d84c4d8 GREEN
GLPrimitives.java b5d93a42e4e31c77d24c7e1bcd712dd44ec0ba95 RED
Graph3DUtil.java 98c5fbfb65ef4322e0d5bc73654168cb9b57deb2 RED
GLPrimitives.java 098d95dc842de55e17c0f43d674845a5862c927a YELLOW
Graph3DUtil.java 22455f060d5f0866d0fd0e1ba512bf3d4139495b YELLOW
......@@ -135,8 +135,9 @@ public class GLPrimitives {
/** Initializes basic GL properties for 3D rendering. */
public static void initializeGLfor3D(int width, int height, float fieldOfViewAngle,
float aspect, float nearDistance, float farDistance) {
// TODO (SB, 13): Introduce constants, or add a short comment about what this section does.
// set RGBA clear (i.e. background) color to 100% black
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// set RGBA color (i.e. foreground) to 100% white
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glClearDepth(1.0);
......@@ -171,7 +172,6 @@ public class GLPrimitives {
glOrtho(0, width, height, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
/**
......@@ -179,14 +179,16 @@ public class GLPrimitives {
* object picker. This method returns the hits counted during picking render run. The results of
* the picking run are stored.
*/
// TODO(SB, 13,14): get(0), get(1), ...
public static int startPickingModeAndCountHits(int x, int y, Vector3f perspective,
IntBuffer viewport, ViewObjectBase scene, ModelObjectPicker picker,
IntBuffer selectBuffer, Camera c) {
glGetIntegerv(GL_VIEWPORT, viewport);
float aspect =
(float)(viewport.get(2) - viewport.get(0)) /
(float)(viewport.get(3) - viewport.get(1));
// viewport buffer is four coordinates: lower left XY and upper right XY
float llx = viewport.get(0);
float lly = viewport.get(1);
float urx = viewport.get(2);
float ury = viewport.get(3);
float aspect = (urx - llx) / (ury - lly);
glSelectBuffer(selectBuffer);
glRenderMode(GL_SELECT);
......@@ -196,7 +198,7 @@ public class GLPrimitives {
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
GLU.gluPickMatrix(x, viewport.get(3) - y, 5.0f, 5.0f, viewport);
GLU.gluPickMatrix(x, ury - y, 5.0f, 5.0f, viewport);
GLU.gluPerspective(perspective.x, aspect, perspective.y, perspective.z);
// render objects in picking mode
......@@ -216,18 +218,21 @@ public class GLPrimitives {
}
/** Returns the current transformed origin in model view coordinates. */
// TODO(SB, 13,14): get(0), get(1), ...
public static Vector3f getTransformedOrigin() {
// load 4x4 model-view matrix from GL context
FloatBuffer fb = createFloatBuffer(16);
glGetFloatv(GL_MODELVIEW_MATRIX, fb);
// return the transformed zero vector, i.e., first three elements
// of the fourth column of the matrix
return new Vector3f(fb.get(12), fb.get(13), fb.get(14));
}
/** Returns the given vector in model view coordinates. */
// TODO(SB, 13,14): get(0), get(1), ...
public static Vector3f getTransformedVector(Vector3D v) {
// load 4x4 model-view matrix from GL context
FloatBuffer fb = createFloatBuffer(16);
glGetFloatv(GL_MODELVIEW_MATRIX, fb);
// perform matrix multiplication with the given vector
float x = fb.get(0) * v.getX() + fb.get(4) * v.getY() + fb.get(8) * v.getZ() + fb.get(12);
float y = fb.get(1) * v.getX() + fb.get(5) * v.getY() + fb.get(9) * v.getZ() + fb.get(13);
float z = fb.get(2) * v.getX() + fb.get(6) * v.getY() + fb.get(10) * v.getZ() + fb.get(14);
......@@ -373,9 +378,6 @@ public class GLPrimitives {
/** Sets the current material data for GL_FRONT faces. */
public static void setMaterial(FloatBuffer ambient, FloatBuffer diffuse, FloatBuffer specular,
float specularCoeff) {
// TODO (SB, 1)
// glDisable(GL_COLOR_MATERIAL);
// glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
......@@ -424,10 +426,26 @@ public class GLPrimitives {
glLoadIdentity();
}
/** Creates a transformation matrix for billboards. Result is stored in bbmat */
/**
* Creates a transformation matrix for billboards (rectangular shape that always faces towards
* the camera. Result is stored in {@code bbmat} and can be provided directly to
* {@link #multiplyCurrentMatrixWith(float[])}.
*
* @param bbmat
* the return value 4x4 matrix (MUST be of size 16)
* @param right
* the vector to the right of the {@code look} vector (usually cross product of
* {@code look} and {@code up}.
* @param up
* the vector to up from the {@code look} vector, i.e., camera up (usually Z axis)
* @param look
* the vector from camera location to {@code pos}
* @param pos
* the vector of the billboard object location
*/
// TODO: https://af3-developer.fortiss.org/issues/3372
public static void createBillboardMatrix(float[] bbmat, Vector3f right, Vector3f up,
Vector3f look, Vector3f pos) {
// TODO(SB, 13): Add pointer to documentation?
bbmat[0] = right.x;
bbmat[1] = right.y;
bbmat[2] = right.z;
......@@ -445,31 +463,6 @@ public class GLPrimitives {
bbmat[13] = pos.y;
bbmat[14] = pos.z;
bbmat[15] = 1;
}
/** Creates a transformation matrix for billboards. Result is stored in bbmat */
public static void createBillboardMatrix2(float[] bbmat, Vector3f right, Vector3f up,
Vector3f look, Vector3f pos) {
// TODO(SB, 13): Add pointer to documentation?
bbmat[0] = right.x;
bbmat[1] = right.y;
bbmat[2] = right.z;
bbmat[3] = 0;
bbmat[4] = up.x;
bbmat[5] = up.y;
bbmat[6] = up.z;
bbmat[7] = 0;
bbmat[8] = look.x;
bbmat[9] = look.y;
bbmat[10] = look.z;
bbmat[11] = 0;
// Add the translation in as well.
bbmat[12] = pos.x;
bbmat[13] = pos.y;
bbmat[14] = pos.z;
bbmat[15] = 0;
}
/** Prepare a name for the given object and picker. */
......@@ -544,7 +537,5 @@ public class GLPrimitives {
v.y /= length;
v.z /= length;
return v;
}
}
......@@ -135,8 +135,8 @@ public class Graph3DUtil {
try {
List<String> objData = getStringContentFromResource(PLUGIN_ID, modelPath + ".obj");
List<String> mtlData = getStringContentFromResource(PLUGIN_ID, modelPath + ".mtl");
// TODO (SB, 14)
// we assume that the object file contains at least one object and and all but the
// first one are ignored
return new OBJLoaderUtil(objData, mtlData).getLoadedObjects().get(0);
} catch(Exception ex) {
error(getDefault(), ex.getMessage(), ex);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment