我正在用LWJGL和Maven创建一个程序,我正在为图形代码编写单元测试.我的问题是让Maven将原生二进制文件放在类路径上,这样测试就可以把它拿起来.我无法克服错误:
java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
Run Code Online (Sandbox Code Playgroud)
我已经将二进制文件解压缩到目标/ libs/native /,但是测试不会把它们拿起来.
这是我的pom:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven- 4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>
<groupId>com.ziroby.kata</groupId>
<artifactId>app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<lwjgl.version>2.6</lwjgl.version>
</properties>
<repositories>
<repository>## Heading ##
<id>lwjgl</id>
<name>lwjgl</name>
<url>http://adterrasperaspera.com/lwjgl</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.2.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jmock</groupId>
<artifactId>jmock-junit4</artifactId>
<version>2.5.1</version>
<type>jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl</artifactId>
<version>${lwjgl.version}</version>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-util</artifactId>
<version>${lwjgl.version}</version>
</dependency>
<dependency>
<groupId>org.lwjgl</groupId>
<artifactId>lwjgl-native</artifactId>
<version>2.6</version>
<type>pom</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<artifactItems> …Run Code Online (Sandbox Code Playgroud) 我已经花了几个星期来解决这个问题,似乎找不到合适的解决方案,需要一些建议.
我正在使用LWJGL/Java创建一个Camera类,并使用Quaternions来处理轴承(偏航),俯仰和滚转.我希望这款相机可以处理3D空间中的所有6度移动,并且可以滚动.轴承,俯仰和滚动都是四元数.我将它们乘以"变化"四元数,并从中创建一个平移矩阵.我把它放在一个浮动缓冲区中,并将模型视图矩阵乘以包含旋转矩阵的缓冲区.
我可以让轴承和俯仰旋转正常工作,但是当我实施滚动时,我遇到了问题.主要是围绕Z轴旋转(滚动)似乎不起作用.当我"滚动"相机时,它似乎绕全局Z轴而不是本地相机方向轴滚动.我通常可以让3个中的2个工作,这取决于我乘以四元数的顺序,但我不能让它们一起工作.
因为它们都是独立工作的,所以我假设我的方向方法有问题,我将它们组合起来并构建一个旋转矩阵.我在整个课程中遇到了问题,所以这里有与轮换相关的方法和声明:
private final static float DEGTORAD = (float)(Math.PI/180);
//Eye - position of the camera in the 3D world.
private Vector3f eye;
//Camera axis vectors, calculated each time reorient() is called.
//Initialized to global x, y, and z axis initially.
private Vector3f up;
private Vector3f right;
private Vector3f direction;
//Angles of rotation (in degrees)
private float pitchAngle;
private float bearingAngle;
private float rollAngle;
private Quaternion pitch;
private Quaternion bearing;
private Quaternion roll;
private FloatBuffer viewMatrixBuffer = BufferUtils.createFloatBuffer(16);
private …Run Code Online (Sandbox Code Playgroud) java lwjgl quaternions matrix-multiplication rotational-matrices
我正在使用OpenGL编写一个Java游戏(LWJGL绑定,具体而言).每个实体(包括相机)都有一个四元数,表示它的旋转.我已经想出如何将四元数应用于当前的OpenGL矩阵,一切都旋转得很好.我遇到的问题是让相机随鼠标旋转.
现在,每一帧,游戏都会抓取鼠标在一个轴上移动的数量,然后将该数量应用到四元数以便相机旋转.这是旋转四元数的代码,我会发布它,因为我认为这就是问题所在(尽管我对这类东西总是错的):
public void rotateX(float amount){
Quaternion rot = new Quaternion(1.0f, 0.0f, 0.0f, (float)Math.toRadians(amount));
Quaternion.mul(rot, rotation, rotation);
rotation.normalise();
}
Run Code Online (Sandbox Code Playgroud)
该方法应该围绕X轴旋转四元数.'rotation'是表示实体旋转的四元数.'amount'是我想要旋转四元数的量(也就是鼠标移动的量).'rot'是沿X轴的标准化矢量,其中aw值转换为弧度(我猜这里的目标是给它一个角度 - 比方说,10度 - 让它沿着给定的轴旋转四元数角度).使用Quaternion.mul获取新的四元数,将其乘以旋转四元数,然后将结果存储为旋转四元数.我不知道是否有必要进行归一化,因为'rot'是正常的,'rotation'应该已经归一化.
rotateY和rotateZ方法执行相同的操作,除了更改'rot'的向量(y为0.0,1.0,0.0,z为0.0,0.0,1.0).
当游戏开始并且相机向下看负Z轴时,代码似乎工作正常.您可以在Y轴上一直旋转或一直围绕X轴旋转.但是一旦你试图旋转相机而不是俯视Z轴,一切都变得非常棘手(我甚至无法描述它,它旋转非常奇怪).
我的最终目标是在没有向上矢量的空间中控制船只.因此,当您在Y轴上移动鼠标时,无论船舶处于什么角度,它都会改变船的俯仰角(沿X轴旋转).类似地,当您在X轴上移动鼠标时,它会改变偏航(沿Y轴旋转).我可能会以错误的方式解决这个问题,我可能只需要向正确的方向推(或推).
如果你需要更多关于任何事情的细节(我的渲染是如何完成的,我正在尝试做的任何其他数学)只是问,我会把它提出来.当我使用欧拉角时,我明白了一切(显然这对于3D应用程序开发来说是一个很大的禁忌...希望有人会告诉我,在我沉没了大量时间让他们去工作之前)但是我一见到切换到四元,我得到了我的头真的快.过去几个月我一直在玩这个代码并阅读四元数试图让它工作,但我还没有真正得到任何东西:'(
非常,非常令人沮丧...开始后悔尝试在3D> _ <做一些事情
我在我的应用程序中使用JME,有时它会崩溃并显示以下消息:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x3d601ad7, pid=168, tid=4012
#
# JRE version: 6.0_29-b11
# Java VM: Java HotSpot(TM) Client VM (20.4-b02 mixed mode, sharing windows-x86)
# Problematic frame:
# C [ig4dev32.dll+0x21ad7]
#
# An error report file with more information is saved as:
# C:\...\hs_err_pid168.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the …Run Code Online (Sandbox Code Playgroud) 我正在使用LWJGL.我正在尝试使用GL_TRIANGLE_STRIP创建一个简单的3D地图,它工作正常.但现在OpenGL会自动填满每个三角形.我想知道OpenGL是否有可能只绘制每个三角形的轮廓.通过这种方式,我可以更好地了解我正在做的事情.
我在OpenGL中制作GUI(更具体地说是lwjgl).我努力研究不同的方法,但我很难找到我想要的东西.我不想使用任何外部库(只有内置OpenGL,甚至试图远离使用GLUT),我想让它适用于任何支持OpenGL的东西(例如,帧缓冲对象不适用于旧版本)图形卡).
我正在制作一个带有可滚动面板作为组件的3D GUI.问题是我不知道如何绘制部分GUI组件而不进行大量计算以仅渲染其中的一部分.我用OpenGL原语制作组件,而不是纹理.我希望有一种简单的方法可以像使用多个视口一样.我甚至不了解什么是视口.
简而言之:我需要一个可滚动的面板作为一个与其他GUI组件重叠的组件(因为它将是一个下拉菜单)并且不允许我面板中的任何组件在我的面板之外绘制.
我无法在网上找到关于在轻量级Java游戏库中渲染3D立方体的好教程!我一直在学习LWJGL一段时间了.我知道如何绘制2d对象.有人能帮助我吗?
我想知道glcolor3b()和之间有什么区别glcolor3ub().
似乎glcolor3b(255, 0, 0);没有将颜色设置为红色,而是将其设置为黑色.glcolor3b(48, 160, 64)将它设置为深紫色,而不是绿色.glcolor3ub()但是按预期工作.
此外,除"u"外,文档glcolor3b()和glcolor3ub()完全相同:
public static void glColor3(u)b(byte red,
byte green,
byte blue)
Run Code Online (Sandbox Code Playgroud)
有谁知道这是为什么?
如何将OpenGl显示附加到JFrame,以便当我关闭JFrame时会破坏显示?到目前为止,这是我的代码:
package test.core;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import static org.lwjgl.opengl.GL11.*;
public class Main {
private static CreateCanvas canvas;
private static CreateFrame frame;
private static int width = 800;
private static int height = 600;
public static void main(String[] args) throws InterruptedException {
startFrames();
startDisplay();
}
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试对Travis CI进行一些测试,这些测试需要服务器,这是错误的...... 不是无头的.正如你所知,我对这个领域知之甚少,我甚至不知道使用正确的术语.
测试使用LibGDX和LWJGL.它们在我的桌面(Windows 8和Ubuntu)上工作正常,但在Travis CI中出人意料地失败:
Could not initialize class org.lwjgl.Sys
at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setVSync(LwjglGraphics.java:446)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:118)
Run Code Online (Sandbox Code Playgroud)
我可以对Travis CI做任何事情让它认为它有适当的显示吗?即使Travis CI无法做到这一点,我是否可以采用通用方法与另一个VM进行更多控制?