首先,我是java的新手,所以我的问题可能是愚蠢但我仍然需要一个答案:)
我有一个处理显示问题的课程.我把它命名为"Display",但问题是:我需要导入一个名为org.lwjgl.opengl.Display的类.
当然,我在Display类语句中有这个错误:
"显示"已在此编译单元中定义
当然,我可以重命名我的班级,但我想确定没有办法轻易绕过这个问题.
一般来说(因为使用像LWJGL这样的游戏库,我想我会有很多这样的),为了避免类似的标签,我的班级前缀是一个更好的主意吗?
更新:该类已经在一个包中.
package Graphics;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
public class Display { ... }
Run Code Online (Sandbox Code Playgroud)
感谢名单.
鉴于Clojure的并发模型,我如何确保从同一个线程调用所有LWJGL OpenGL Update函数?
经过漫长而光荣的战斗,在Leiningen/Clojure中使用lwjgl,我现在让LWJGL + Leiningen + Clojure一起工作.
但是,根据LWJGL文档,似乎OpenGL客户端命令具有线程本地状态 - 如果我从不同线程调用OpenGL命令,Bad Things(TM)可能会发生.
因此,我的问题是:在Clojure中,设置类似Swing Threads(但我不能使用Swing Threads /必须自己设置)的正确方法是这样的:
(1)有一个主线程负责所有OpenGL调用
(2)其他线程与此主线程进行某种类型的通信以协调OpenGL调用
我熟悉C/C++中的线程.我熟悉Clojure的agent/atom/ref模型.但是,我不熟悉Clojure中的"手动"并发/线程.
谢谢!
我正在使用LWJGL学习OpenGL 3.我试图实现一个等效的gluLookAt(),虽然它的工作原因我有点困惑为什么.
我承认只是从网络上的各种来源复制这些代码,但经过深入研究后,我认为理解它背后的数学,并且我理解LWJGL在做什么.
但是,"正确" gluLookAt代码在我的应用程序中表现不正确,因为相机似乎转向了错误的方式.我只设法获得通过转置正交向量的工作我的代码forward,side以及up(希望我使用的是正确的术语!),我敢肯定是错误的...
private static final Vector3f forward = new Vector3f();
private static final Vector3f side = new Vector3f();
private static final Vector3f up = new Vector3f();
private static final Vector3f eye = new Vector3f();
public static Matrix4f lookAt(float eyeX, float eyeY, float eyeZ,
float centerX, float centerY, float centerZ,
float upX, float upY, float upZ) {
forward.set(centerX - eyeX, centerY - eyeY, centerZ - eyeZ);
forward.normalise();
up.set(upX, upY, …Run Code Online (Sandbox Code Playgroud) 我一直在头脑中挣扎了一个多小时,谷歌似乎无法给我一个决定性的答案.
我正在使用IntelliJ IDEA 13.1.3scala和sbt插件Scala 2.11.1,和SBT 0.13
我认为我很聪明,我将LWJGL的Maven存储库添加到了我的build.sbt中
libraryDependencies += "org.lwjgl.lwjgl" % "lwjgl" % "2.9.1"
Run Code Online (Sandbox Code Playgroud)
后来发现我需要[ 将编译器指向LWJGL原生 ].
现在问题是:要求SBT下载库,不要将它们放在任何项目的目录中,这使得指向库有点困难.
我尝试使用[ sbt-lwjgl-plugin ]没有任何运气,甚至强迫像文档建议的早期版本的SBT.
所以我发现自己处于僵局,我该怎么办?手动下载库并将其转储到项目目录中?或者我有更自动的方式来处理这个问题?
我在LWJGL 3中使用OpenGL,我得到以下错误;
Exception in thread "main" java.lang.IllegalStateException: There is no OpenGL context current in the current thread.
at org.lwjgl.opengl.GL.getCapabilities(GL.java:157)
at org.lwjgl.opengl.GL11.getInstance(GL11.java:1390)
at org.lwjgl.opengl.GL11.glClearColor(GL11.java:1842)
at com.base.engine.RenderUtil.initGraphics(RenderUtil.java:13)
at com.base.engine.Main.<init>(Main.java:14)
at com.base.engine.Main.main(Main.java:24)
这是RenderUtil类,其中从我的主类的构造函数中调用initGraphics.在使用GLFW创建窗口后,我也尝试调用initGraphics,它也生成了类似的错误消息.
package com.base.engine;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL30.*;
public class RenderUtil {
public static void clearScreen() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
public static void initGraphics() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glFrontFace(GL_CW);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glEnable(GL_FRAMEBUFFER_SRGB);
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我不使用多线程.要创建一个窗口,我Window.createWindow(1366, 768, "Test");从main方法中调用该方法.
private static Long window;
public static String createWindow(int …Run Code Online (Sandbox Code Playgroud) 我想为我在 Windows 7 上运行的 lwjgl 进程添加一个任务栏图标。
Display.setIcon 成功更改了窗口左上角的图标,但不在任务栏中。
做什么?
我的代码,类似于:
ArrayList<ByteBuffer> byteBuffers = new ArrayList<ByteBuffer>();
byteBuffers.add( ImageHelper.loadImageAsIconImage("stickmanicon32x32.png") );
byteBuffers.add( ImageHelper.loadImageAsIconImage("stickmanicon16x16.png") );
System.out.println( "taskbaricon result: " + Display.setIcon(byteBuffers.toArray(new ByteBuffer[]{})) );
Run Code Online (Sandbox Code Playgroud)
我也尝试添加 40x40 图像,但没有变化。
我正在使用 LWJGL 开发游戏。在移动窗口时(计划在未来添加调整大小的代码),渲染循环冻结。我希望它在移动时继续以某种方式运行。LWJGL 不包括 glutMainLoop。
Display 属于 OpenGL,而不是 Java。
相关代码:
regular = new DisplayMode(800,600);
GL11.glClearColor(0.47f,0.55f,1.0f, 0.0f);
GL11.glClearDepth(1.0f);
try {
Display.setDisplayMode(regular);
Display.setTitle("Game Name");
Display.setIcon(loadIcon("resources/icon.png"));
Display.create();
seedresult= new Random(seed);
} catch (LWJGLException e) {
e.printStackTrace();
}
while (!Display.isCloseRequested()) {
Display.sync(60);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
//render objects
Display.update();}
System.exit(0);
Run Code Online (Sandbox Code Playgroud) 我正在尝试更改 LWJGL 中顶点着色器中点的大小,但无法使其正常工作。如果我尝试从着色器更改点大小,则点大小始终为 1px。
顶点着色器:
void main(){
gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
gl_PointSize = 10.0;
}
Run Code Online (Sandbox Code Playgroud)
片段着色器:
void main(){
gl_FrontColor = gl_Color;
}
Run Code Online (Sandbox Code Playgroud)
绘制代码:
glClear(GL_COLOR_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, p_vbo);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, c_vbo);
glColorPointer(4, GL_FLOAT, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_POINTS, 0, particles_num);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
Run Code Online (Sandbox Code Playgroud)
我的目标是动态更改点大小,但我无法从着色器更改点大小。如果我调用此代码:
glPointSize(10.0f);
Run Code Online (Sandbox Code Playgroud)
从 java 开始,大小发生了变化,但我希望能够为每个点做到这一点。我已经启用了我的着色器来改变点的大小:
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
Run Code Online (Sandbox Code Playgroud)
澄清一下:我可以渲染我的所有点,并且一切正常,但点大小始终为 1px。我也没有使用平滑点。
编辑:glGetFloat(GL_POINT_SIZE_RANGE) 返回 1.0,这应该表明我的硬件不支持 1.0 以外的其他点大小。但如果我修改我的绘制代码:
glDrawArrays(GL_POINTS, 0, particles_num);
Run Code Online (Sandbox Code Playgroud)
到:
for (int i = 0; i < particles_num; i++) {
glPointSize(massBuff.get(i));
glDrawArrays(GL_POINTS, i, 1);
}
Run Code Online (Sandbox Code Playgroud)
在 massBuff 包含值为 1f - 10f …
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.libr
ary.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.lwjgl.Sys$1.run(Sys.java:73)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
at org.lwjgl.Sys.loadLibrary(Sys.java:95)
at org.lwjgl.Sys.<clinit>(Sys.java:112)
at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
at org.lorana.client.Lorana.<init>(Lorana.java:20)
at org.lorana.client.Lorana.main(Lorana.java:31)
Run Code Online (Sandbox Code Playgroud)
在我将所有本机库链接到每个引用的库并按照http://ninjacave.com/lwjglwitheclipse的说明进行操作后,错误仍然存在
我还关注了板上关于 lwjgl unsatisfiedlinkerrors 的其他问题,但无济于事。
非常感谢您的帮助,提前致谢!
我想将我的 OpenGL 显示设置为最大化。
我可以让用户手动完成,如果我setResizeable(true)然后让玩家点击最大化按钮,正如测试人员所说,这对用户来说是一个痛苦和不必要的步骤。
我可以将显示尺寸设置为与玩家屏幕相同的尺寸,但这看起来很奇怪,而且我不是在寻找全屏模式。
显然我已经可以全屏并设置显示大小,但我目前无法找到任何实际上允许我实际最大化显示的方法。
如果你不明白全屏和最大化之间的区别(Meta Stack Overflow 讨论),那么这里是Maximized的描述,这里是Fullscreen的描述。
lwjgl ×10
java ×7
opengl ×5
class ×1
clojure ×1
concurrency ×1
dependencies ×1
glpointsize ×1
glulookat ×1
matrix ×1
scala ×1
shader ×1
taskbar ×1
windows ×1
windows-7 ×1