标签: lwjgl

LWJGL 3 stbi_load_from_memory 在 jar 中时不工作

我正在阅读一本关于 LWJGL3 的教程书,我尝试制作自己的图像加载代码(该书代码不使用 STB 库),当项目正常运行时(IntelliJ IDE,直接从build 文件夹),它将图像从 ByteBuffer 加载并stbi_load_from_memory工作正常,但是一旦编译并放入 jar 文件,它就停止工作,即使图像已成功加载到 ByteBuffer,就好像该stbi_load_from_memory函数只是如果它在 Jar 中,则返回 null。

代码:

public static ByteBuffer loadImage(String fileName, IntBuffer w, 
    IntBuffer h, IntBuffer comp) throws Exception
    {
        ByteBuffer image;
        //the class name is Utils
        InputStream imageFile = 
        Utils.class.getResourceAsStream(fileName); 

        //The image data gets put into the byte array no matter if
        //its a jar or not
        byte[] imageData = new byte[imageFile.available()];
        imageFile.read(imageData);
        ByteBuffer imageBuffer = 
        BufferUtils.createByteBuffer(imageData.length);
        imageBuffer.put(imageData);
        imageBuffer.flip();
        //imageBuffer is the right size and …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea lwjgl

1
推荐指数
1
解决办法
2277
查看次数

从计算着色器写入持久映射的 SSBO 失败

我正在尝试使用计算着色器写入 SSBO 并在 CPU 上读回数据。

计算着色器只是一个写入 24 个浮点的 1x1x1 玩具示例:

#version 450 core

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout (std430, binding = 0) buffer particles {
    float Particle[];
};

void main() {
    for (int i = 0; i < 24; ++i) {
        Particle[i] = i + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我运行着色器并读取数据的方式:

val bufferFlags = GL_MAP_READ_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT
val bufferSize = 24 * 4
val bufferId = glCreateBuffers()

glNamedBufferStorage(bufferId, bufferSize, bufferFlags)

val mappedBuffer = glMapNamedBufferRange(bufferId, …
Run Code Online (Sandbox Code Playgroud)

opengl scala lwjgl opengl-4

1
推荐指数
1
解决办法
1062
查看次数

LWJGL使用slick-util渲染文本

我想使用slick-util的教程在我的openGL应用程序之上呈现一串文本:http:// lwjgl.org/wiki/index.php?title=Slick-Util_Library_-_Part_3_-_TrueType_Fonts_for_LWJGL

这是我的初始代码:

private void init() {

    try {
        Display.setDisplayMode(new DisplayMode(640, 480));
        Display.setVSyncEnabled(true);
        Display.setTitle(this.windowTitle);
        Display.create();

        Keyboard.create();

    } catch (LWJGLException e) {
        Sys.alert("Error", "Initialization failed!\n\n" + e.getMessage());
        System.exit(0);
    }

    /* OpenGL */
    int width = Display.getDisplayMode().getWidth();
    int height = Display.getDisplayMode().getHeight();

    GL11.glViewport(0, 0, width, height); // Reset The Current Viewport
    GL11.glMatrixMode(GL11.GL_PROJECTION); // Select The Projection Matrix
    GL11.glLoadIdentity(); // Reset The Projection Matrix
    GLU.gluPerspective(45.0f, ((float) width / (float) height), 0.1f, 100.0f); // Calculate The Aspect Ratio Of The Window
    GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select The …
Run Code Online (Sandbox Code Playgroud)

java opengl text render lwjgl

0
推荐指数
1
解决办法
7643
查看次数

LWJGL(Java)中OpenGL的奇怪光照行为

我是LWJGL/OpenGL的新手,我遇到过这个问题,无法解决,无论我尝试什么:

当我在屏幕上绘制多个立方体时,无论多维数据集与"相机"的距离有多远,它在点亮时都会达到相同的亮度.这意味着当我在屏幕上绘制大量立方体时,它们会获得相同数量的光线并且看起来很奇怪.

这是一个GIF,展示了我的意思.

我的源代码:http://pastebin.com/qd5dsZ89

如何修复它以使光线在所有区域中混合而不会突然中断?

java opengl graphics lighting lwjgl

0
推荐指数
1
解决办法
515
查看次数

通知java从哪里导入(lib)

我在命令行中使用java并在gedit中编码,但导入lwjgl时遇到问题.

我的源代码在src/uk/co/gossfunkel下,并且lib> jars中的lwjgl.jar和lib> natives下的本机.如何让编译器知道该import org.lwjgl.*;语句引用了lib> jars中的org.lwjgl?

java compiler-construction import command-line lwjgl

0
推荐指数
1
解决办法
97
查看次数

Java - 如何在LWJGL中使用顶点缓冲区对象?

我正在尝试使用顶点缓冲区对象.

起初,在我遇到这种令人讨厌的情况之前没有任何问题:

glPointSize(2.0f);
glBegin(GL_POINTS);
for (Entity p : points) {
    glVertex3f(p.x, p.y, p.z);
}
glEnd();
Run Code Online (Sandbox Code Playgroud)

如何将其转换为Vertex缓冲区对象渲染?

我的意思是,你可以看到,数据(x,y,z)每次都为每个点改变(它是一个循环).

那么我如何实现Vertex缓冲区对象渲染呢?

java opengl lwjgl slick2d

0
推荐指数
1
解决办法
5143
查看次数

在LWJGL中更改OpenGL版本

所以我一直想知道如何在lwjgl中更改openGL版本..我知道我可以用维基上的PixelFormat和ContextAttribs更改版本 http://lwjgl.org/wiki/index.php?title=Version_selection

但是如果我想把它降到更低的话,那只能把我降到最低3.2?喜欢2.1甚至1.1?有没有办法做到这一点?

java opengl lwjgl

0
推荐指数
1
解决办法
1722
查看次数

SWING有时比openGL更快

我想弄清楚在渲染简单方块时openGL(LWJGL)和swing之间有什么区别.不出所料,openGL赢了,但在某些测试中,结果很接近,甚至有利于摆动.为什么会这样?

我的测试结果:

Testing for a total of 500000 rectangles
Swing time: 0.16367821
OpenGL time: 0.06317429
OpenGL relative to SWING is faster by  159.0899%

Testing for a total of 750000 rectangles
OpenGL time: 0.066062525
Swing time: 0.16988374
OpenGL relative to SWING is faster by  157.156%

Testing for a total of 1000000 rectangles
OpenGL time: 0.0907693
Swing time: 0.15694521
OpenGL relative to SWING is faster by  72.90561%

Testing for a total of 1250000 rectangles
OpenGL time: 0.09591239
Swing time: 0.17011923
OpenGL relative …
Run Code Online (Sandbox Code Playgroud)

java opengl swing lwjgl

0
推荐指数
1
解决办法
659
查看次数

如果我绘制多个四边形,OpenGL UV坐标会被破坏

我试图实现位图字体渲染.唯一令我困惑的是,我必须在这里问一下,当我为每个焦点绘制四边形时,每次渲染一个新的四边形时,UV都绝对会被破坏.如果我只渲染一个四边形,一切都OK.

(瓦片x = 3,y = 4)

在此输入图像描述

这是多少字母的样子. 在此输入图像描述

这是我的代码来渲染这些东西:

...
    rc.translate(getTransform().getPos());
    drawTileAt(3, 4);
    rc.translate(100, 0, 0);
    drawTileAt(5, 5);
    rc.translate(200, 0, 0);
    drawTileAt(2,6);
    rc.translate(300,0,0);
    drawTileAt(1, 7);
...

public void drawTileAt(int x, int y)
{
    float w = 1f / 16f;
    float _x = 1f / 16f * x;
    float _y = 1f / 16f * y;
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glVertex2f(0, 100);GL11.glTexCoord2f(_x,_y);
    GL11.glVertex2f(0, 0);GL11.glTexCoord2f(_x + w,_y);
    GL11.glVertex2f(100,0);GL11.glTexCoord2f(_x + w,_y + w);
    GL11.glVertex2f(100, 100);
    GL11.glTexCoord2f(_x,_y + w);
    GL11.glEnd();
}
Run Code Online (Sandbox Code Playgroud)

我也用tex-coords绘制VBO四边形,一切看起来都很好......

java opengl rendering bitmap lwjgl

0
推荐指数
1
解决办法
94
查看次数

从像素到NDC的转换

假设我的屏幕是(800*600)并且我使用Triangle_Strip(在NDC中)使用以下顶点位置绘制了Quad(2D ):

float[] vertices = {-0.2f,0.2f,-0.2f,-0.2f,0.2f,0.2f,0.2f,-0.2f};
Run Code Online (Sandbox Code Playgroud)

我以这种方式设置了转换矩阵:

Vector2f position = new Vector2f(0,0);
Vector2f size = new Vector2f(1.0f,1.0f);

Matrix4f tranMatrix = new Matrix4f();
tranMatrix.setIdentity();
Matrix4f.translate(position, tranMatrix, tranMatrix);
Matrix4f.scale(new Vector3f(size.x, size.y, 1f), tranMatrix, tranMatrix);
Run Code Online (Sandbox Code Playgroud)

我的顶点着色器:

#version 150 core

in vec2 in_Position;

uniform mat4 transMatrix;

void main(void) {

gl_Position = transMatrix * vec4(in_Position,0,1.0);

}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我应该使用哪个公式来修改我的四边形的坐标转换(以像素为单位)?

例如 :

- 设置比例:(50px,50px)=>Vector2f(width,height)

- 设置位置:(100px,100px)=>Vector2f(x,y)

为了更好地理解,我将创建一个函数将我的像素数据转换为NDC,将它们发送到顶点着色器旁边.我被建议使用正交投影,但我不知道如何正确创建它,你可以看到我的顶点着色器我不使用任何投影矩阵.谢谢 !

这是一个类似于我的主题,但不是很清楚:

- 转换为NDC,计算并转换回世界空间

编辑:

我按照公式创建了我的正交投影矩阵但似乎没有出现,这是我继续进行的方式:

public static Matrix4f glOrtho(float left, float right, float bottom, …
Run Code Online (Sandbox Code Playgroud)

opengl lwjgl

0
推荐指数
1
解决办法
1921
查看次数