update();\r
}\r
\r
- /** Constructs a new OrthographicCamera, using the given viewport width and height. This will create a camera useable for\r
- * iso-metric views. The diamond angle is specifies the angle of a tile viewed isometrically. \r
- * \r
- * @param viewportWidth the viewport width\r
- * @param viewportHeight the viewport height\r
- * @param diamondAngle the angle in degrees */\r
- public OrthographicCamera (float viewportWidth, float viewportHeight, float diamondAngle) {\r
- this.viewportWidth = viewportWidth;\r
- this.viewportHeight = viewportHeight;\r
- this.near = 0;\r
- findDirectionForIsoView(diamondAngle, 0.00000001f, 20);\r
- update();\r
- }\r
-\r
- public void findDirectionForIsoView (float targetAngle, float epsilon, int maxIterations) {\r
- float start = targetAngle - 5;\r
- float end = targetAngle + 5;\r
- float mid = targetAngle;\r
-\r
- int iterations = 0;\r
- float aMid = 0;\r
- while (Math.abs(targetAngle - aMid) > epsilon && iterations++ < maxIterations) {\r
- aMid = calculateAngle(mid);\r
-\r
- if (targetAngle < aMid) {\r
- end = mid;\r
- } else {\r
- start = mid;\r
- }\r
- mid = start + (end - start) / 2;\r
- }\r
- position.set(calculateDirection(mid));\r
- position.y = -position.y;\r
- lookAt(0, 0, 0);\r
- normalizeUp();\r
- }\r
-\r
- private float calculateAngle (float a) {\r
- Vector3 camPos = calculateDirection(a);\r
- position.set(camPos.scl(30));\r
- lookAt(0, 0, 0);\r
- normalizeUp();\r
- update();\r
-\r
- Vector3 orig = new Vector3(0, 0, 0);\r
- Vector3 vec = new Vector3(1, 0, 0);\r
- project(orig);\r
- project(vec);\r
- Vector2 d = new Vector2(vec.x - orig.x, -(vec.y - orig.y));\r
- return d.angle();\r
- }\r
-\r
- private Vector3 calculateDirection (float angle) {\r
- Matrix4 transform = new Matrix4();\r
- Vector3 dir = new Vector3(-1, 0, 1).nor();\r
- transform.setToRotation(new Vector3(1, 0, 1).nor(), angle);\r
- dir.mul(transform).nor();\r
- return dir;\r
- }\r
-\r
private final Vector3 tmp = new Vector3();\r
\r
@Override\r
import com.badlogic.gdx.tests.EarClippingTriangulatorTest;\r
import com.badlogic.gdx.tests.MeshShaderTest;\r
import com.badlogic.gdx.tests.MipMapTest;\r
+import com.badlogic.gdx.tests.PixelPerfectTest;\r
import com.badlogic.gdx.tests.TextureAtlasTest;\r
import com.badlogic.gdx.tests.TimerTest;\r
import com.badlogic.gdx.tests.g3d.Basic3DSceneTest;\r
// new SharedLibraryLoader("../../extensions/gdx-controllers/gdx-controllers-desktop/libs/gdx-controllers-desktop-natives.jar").load("gdx-controllers-desktop");\r
// new SharedLibraryLoader("../../gdx/libs/gdx-natives.jar").load("gdx");\r
\r
- GdxTest test = new NetAPITest();\r
+ GdxTest test = new PixelPerfectTest();\r
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();\r
config.useGL20 = test.needsGL20();\r
- config.width = 1024;\r
- config.height = 768;\r
+ config.width = 320;\r
+ config.height = 240;\r
new LwjglApplication(test, config);\r
}\r
}\r
+++ /dev/null
-/*******************************************************************************\r
- * Copyright 2011 See AUTHORS file.\r
- * \r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- ******************************************************************************/\r
-\r
-package com.badlogic.gdx.tests;\r
-\r
-import com.badlogic.gdx.Gdx;\r
-import com.badlogic.gdx.InputAdapter;\r
-import com.badlogic.gdx.graphics.Camera;\r
-import com.badlogic.gdx.graphics.GL10;\r
-import com.badlogic.gdx.graphics.OrthographicCamera;\r
-import com.badlogic.gdx.graphics.Texture;\r
-import com.badlogic.gdx.graphics.g2d.Sprite;\r
-import com.badlogic.gdx.graphics.g2d.SpriteBatch;\r
-import com.badlogic.gdx.math.Intersector;\r
-import com.badlogic.gdx.math.Matrix4;\r
-import com.badlogic.gdx.math.Plane;\r
-import com.badlogic.gdx.math.Vector3;\r
-import com.badlogic.gdx.math.collision.Ray;\r
-import com.badlogic.gdx.tests.utils.GdxTest;\r
-\r
-public class IsoCamTest extends GdxTest {\r
- private static final int TARGET_WIDTH = 480;\r
- private static final float UNIT_TO_PIXEL = TARGET_WIDTH * 0.15f;\r
- Texture texture;\r
- OrthographicCamera cam;\r
- SpriteBatch batch;\r
- final Sprite[][] sprites = new Sprite[10][10];\r
- final Matrix4 matrix = new Matrix4();\r
-\r
- @Override\r
- public void create () {\r
- texture = new Texture(Gdx.files.internal("data/badlogicsmall.jpg"));\r
- float unitsOnX = (float)Math.sqrt(2) * TARGET_WIDTH / (UNIT_TO_PIXEL);\r
- float pixelsOnX = Gdx.graphics.getWidth() / unitsOnX;\r
- float unitsOnY = Gdx.graphics.getHeight() / pixelsOnX;\r
- cam = new OrthographicCamera(unitsOnX, unitsOnY, 25);\r
- cam.position.scl(30);\r
- cam.near = 1;\r
- cam.far = 1000;\r
- matrix.setToRotation(new Vector3(1, 0, 0), 90);\r
-\r
- for (int z = 0; z < 10; z++) {\r
- for (int x = 0; x < 10; x++) {\r
- sprites[x][z] = new Sprite(texture);\r
- sprites[x][z].setPosition(x, z);\r
- sprites[x][z].setSize(1, 1);\r
- }\r
- }\r
-\r
- batch = new SpriteBatch();\r
-\r
- Gdx.input.setInputProcessor(new IsoCamController(cam));\r
- }\r
-\r
- @Override\r
- public void dispose () {\r
- texture.dispose();\r
- batch.dispose();\r
- }\r
-\r
- @Override\r
- public void render () {\r
- Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);\r
- cam.update();\r
-\r
- batch.setProjectionMatrix(cam.combined);\r
- batch.setTransformMatrix(matrix);\r
- batch.begin();\r
- for (int z = 0; z < 10; z++) {\r
- for (int x = 0; x < 10; x++) {\r
- sprites[x][z].draw(batch);\r
- }\r
- }\r
- batch.end();\r
-\r
- checkTileTouched();\r
- }\r
-\r
- final Plane xzPlane = new Plane(new Vector3(0, 1, 0), 0);\r
- final Vector3 intersection = new Vector3();\r
- Sprite lastSelectedTile = null;\r
-\r
- private void checkTileTouched () {\r
- if (Gdx.input.justTouched()) {\r
- Ray pickRay = cam.getPickRay(Gdx.input.getX(), Gdx.input.getY());\r
- Intersector.intersectRayPlane(pickRay, xzPlane, intersection);\r
- System.out.println(intersection);\r
- int x = (int)intersection.x;\r
- int z = (int)intersection.z;\r
- if (x >= 0 && x < 10 && z >= 0 && z < 10) {\r
- if (lastSelectedTile != null) lastSelectedTile.setColor(1, 1, 1, 1);\r
- Sprite sprite = sprites[x][z];\r
- sprite.setColor(1, 0, 0, 1);\r
- lastSelectedTile = sprite;\r
- }\r
- }\r
- }\r
-\r
- public class IsoCamController extends InputAdapter {\r
- final Plane xzPlane = new Plane(new Vector3(0, 1, 0), 0);\r
- final Vector3 intersection = new Vector3();\r
- final Vector3 curr = new Vector3();\r
- final Vector3 last = new Vector3(-1, -1, -1);\r
- final Vector3 delta = new Vector3();\r
- final Camera camera;\r
-\r
- public IsoCamController (Camera camera) {\r
- this.camera = camera;\r
- }\r
-\r
- @Override\r
- public boolean touchDragged (int x, int y, int pointer) {\r
- Ray pickRay = camera.getPickRay(x, y);\r
- Intersector.intersectRayPlane(pickRay, xzPlane, curr);\r
-\r
- if (!(last.x == -1 && last.y == -1 && last.z == -1)) {\r
- pickRay = camera.getPickRay(last.x, last.y);\r
- Intersector.intersectRayPlane(pickRay, xzPlane, delta);\r
- delta.sub(curr);\r
- camera.position.add(delta.x, 0, delta.z);\r
- }\r
- last.set(x, y, 0);\r
- return false;\r
- }\r
-\r
- @Override\r
- public boolean touchUp (int x, int y, int pointer, int button) {\r
- last.set(-1, -1, -1);\r
- return false;\r
- }\r
- }\r
-\r
- @Override\r
- public boolean needsGL20 () {\r
- return false;\r
- }\r
-\r
-}\r
--- /dev/null
+package com.badlogic.gdx.tests;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.OrthographicCamera;
+import com.badlogic.gdx.graphics.Pixmap;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.tests.utils.GdxTest;
+
+public class PixelPerfectTest extends GdxTest {
+ SpriteBatch batch;
+ OrthographicCamera cam;
+ Texture tex;
+
+ @Override
+ public void create () {
+ Pixmap pixmap = new Pixmap(16, 16, Pixmap.Format.RGBA8888);
+ pixmap.setColor(Color.BLUE);
+ pixmap.fill();
+ pixmap.setColor(Color.RED);
+ pixmap.drawLine(0, 0, 15, 15);
+ pixmap.drawLine(0, 15, 15, 0);
+
+ tex = new Texture(pixmap);
+ batch = new SpriteBatch();
+ cam = new OrthographicCamera();
+ cam.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
+ }
+
+ @Override
+ public void render () {
+ Gdx.gl.glClearColor(1, 0, 1, 1);
+ Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+ cam.update();
+ batch.setProjectionMatrix(cam.combined);
+ batch.begin();
+ batch.draw(tex, 1, 1);
+ batch.end();
+ }
+}
import com.badlogic.gdx.tests.IndexBufferObjectShaderTest;\r
import com.badlogic.gdx.tests.IntegerBitmapFontTest;\r
import com.badlogic.gdx.tests.InverseKinematicsTest;\r
-import com.badlogic.gdx.tests.IsoCamTest;\r
import com.badlogic.gdx.tests.IsometricTileTest;\r
import com.badlogic.gdx.tests.KinematicBodyTest;\r
import com.badlogic.gdx.tests.LabelScaleTest;\r
import com.badlogic.gdx.tests.PixelsPerInchTest;\r
import com.badlogic.gdx.tests.ProjectiveTextureTest;\r
import com.badlogic.gdx.tests.RotationTest;\r
-import com.badlogic.gdx.tests.RunnablePostTest;\r
import com.badlogic.gdx.tests.ShadowMappingTest;\r
import com.badlogic.gdx.tests.ShapeRendererTest;\r
import com.badlogic.gdx.tests.SimpleAnimationTest;\r
}\r
}, new Instancer() {\r
public GdxTest instance () {\r
- return new IsoCamTest();\r
- }\r
- }, new Instancer() {\r
- public GdxTest instance () {\r
return new IsometricTileTest();\r
}\r
}, new Instancer() {\r
ScrollPaneTest.class, FloatTest.class, FloatTextureTest.class, FrameBufferTest.class, FramebufferToTextureTest.class, FrustumTest.class,\r
FullscreenTest.class, Gdx2DTest.class, GroupFadeTest.class, ImmediateModeRendererTest.class, Scene2dTest.class,\r
ImmediateModeRendererAlphaTest.class, IndexBufferObjectClassTest.class, TreeTest.class, IndexBufferObjectShaderTest.class,\r
- InputTest.class, IntegerBitmapFontTest.class, InverseKinematicsTest.class, IsoCamTest.class, IsometricTileTest.class,\r
+ InputTest.class, IntegerBitmapFontTest.class, InverseKinematicsTest.class, IsometricTileTest.class,\r
KinematicBodyTest.class, LifeCycleTest.class, LineDrawingTest.class, ScrollPane2Test.class, ManagedTest.class,\r
ManualBindTest.class, MaterialTest.class, MatrixJNITest.class, MeshMultitextureTest.class, MeshShaderTest.class, MeshTest.class,\r
MipMapTest.class, MultitouchTest.class, MusicTest.class, MyFirstTriangle.class, ObjTest.class, OnscreenKeyboardTest.class,\r