标签: lwjgl

OpenGL - 两种纹理的力量

OpenGL使用2次幂纹理.这是因为由于MipMapping,一些GPU仅接受2次幂纹理.在绘制比它大的纹理时,使用这些2次幂纹理会导致问题.

我曾经想过一种方法来解决这个问题,那就是当我们使纹理比实际更小时使用PO2比率,并且当我们使它变大时使用1:1的比例,但这会创建某些GPU的兼容性问题?

如果有人知道是否会出现问题(我无法检查这一点,因为我的GPU接受NPO2纹理),或者更好的解决方法,我将不胜感激.

opengl textures lwjgl

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

为什么要在渲染形状后绘制字符串,我为什么需要禁用GL_TEXTURE_2D?

我正在使用Slick2D库来向屏幕呈现文本,但为了呈现像Rect这样的gl形状,我需要先禁用GL_TEXTURE_2D.我只是好奇为什么需要它.为什么GL_TEXTURE_2D禁用形状渲染?

java opengl lwjgl slick2d

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

如何在Java中避免不必要的类引用?

我有两个java类(.java文件).我希望能够在另一个类中定义的一个类中创建一个对象的新实例,而不是每次都引用类名.在C#中有#using和包括,但我只能import <pre-compiled code>在java中使用.有没有办法做到这一点:

import TestClass;
Run Code Online (Sandbox Code Playgroud)

然后简单地调用其中的函数而不使用

TestClass.TestFunction()
Run Code Online (Sandbox Code Playgroud)

每次?我只需要让我的所有函数和对象与我的Main类分开.

java netbeans lwjgl

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

我想每帧调用glBegin和glEnd一次

正如在标题中我希望每帧/更新只能调用glBegin和glEnd一次,因为我已经听到并且正在经历如果你每次更新多次调用它会大幅减速.

这是我的渲染函数的代码:

GL11.glTranslatef(0, 0, -10);
    int x = 0;

    while (x < World.BLOCKS_WIDTH - 1) {
        int y = 0;
        while (y < World.BLOCKS_HEIGHT - 1) {

            if( x * World.BLOCK_SIZE  <= Display.getHeight() ||  y * World.BLOCK_SIZE <= 
                Display.getWidth() ||  x * World.BLOCK_SIZE >= 0 || 
                y * World.BLOCK_SIZE >= 0 ) {

            blocks.b[data.blocks[x][y]].draw(x + Main.PosX, y + Main.PosY);

            }

            y++;
        }
        x++;

}
Run Code Online (Sandbox Code Playgroud)

任何帮助赞赏.

这是我的块类:

GL11.glPushMatrix();
    GL11.glTranslatef(Xa * World.BLOCK_SIZE, Ya * World.BLOCK_SIZE, 0);
    //GL11.glRotatef(0, 0, 1, 0);
    //GL11.glRotatef(0, 1, …
Run Code Online (Sandbox Code Playgroud)

java opengl lwjgl

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

设置 glsl 的光泽度

我如何设置 opengl 光泽度浮动,以便我可以在着色器程序中使用它gl_FrontMaterial.shininess

我尝试了这个glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 100f);,但亮点并没有变小,所以我猜光泽没有改变。

编辑: 这是我使用的片段着色器程序:

varying vec4 varyingColor;
varying vec3 varyingNormal;
varying vec4 varyingVertex;
varying vec2 varyingTexCoord;
uniform sampler2D my_color_texture;
varying vec3 varyingEyeVec;

void main() {
    vec3 vertexPosition = (gl_ModelViewMatrix * varyingVertex).xyz;
    vec3 surfaceNormal = normalize((gl_NormalMatrix * varyingNormal).xyz);
    vec3 lightDirection = normalize(gl_LightSource[0].position.xyz - vertexPosition);
    float diffuseLightIntensity = max(0, dot(surfaceNormal, lightDirection));
    gl_FragColor.rgb = diffuseLightIntensity * varyingColor.rgb;
    gl_FragColor += gl_LightModel.ambient;
    vec3 reflectionDirection = normalize(reflect(lightDirection, surfaceNormal));
    vec3 eyeVecNormal = normalize(varyingEyeVec);
    float specular = max(0.0, dot(eyeVecNormal, reflectionDirection)); …
Run Code Online (Sandbox Code Playgroud)

opengl glsl lwjgl

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

LWJGL 3不会画一条线

我正在尝试用LWJGL 3绘制一条线.它编译并且所有原生设置都正确设置.我在Ubuntu上运行.我真的不明白问题是什么; 窗口初始化,背景是正确的清晰颜色,但线条不会绘制.我几乎完全从我在新网站上找到的唯一示例中复制了代码.我不知道我做错了什么.

import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryUtil.NULL;

import java.awt.DisplayMode;
import java.nio.ByteBuffer;

import org.lwjgl.glfw.GLFWErrorCallback;
import org.lwjgl.glfw.GLFWKeyCallback;
import org.lwjgl.glfw.GLFWvidmode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GLContext;
import org.lwjgl.util.Display;
import org.lwjgl.util.glu.GLU;

public class Main {
    // We need to strongly reference callback instances.
    private static GLFWErrorCallback errorCallback;
    private static GLFWKeyCallback   keyCallback;
    static final int INIT_WIDTH = 300;
    static final int INIT_HEIGHT = 300;

    // The window handle
    private static long window;

    public static boolean verbose = true;

    public static void init() …
Run Code Online (Sandbox Code Playgroud)

java opengl lwjgl

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

OpenGL交错的VBO - 如何在Scala中获取sizeof(Float)?

我一直在尝试从两个不同的VBO切换到只有一个具有交错属性的VBO.我可以在C++中实现它,但在Scala中它证明是非常困难的.

这是我的实现:

class Mesh(positions: Array[Float], textureCoordinates: Array[Float], indices: Array[Int])
{
    // Create VAO, VBO and a buffer for the indices
    val vao: Int = glGenVertexArrays
    val vbo: Int = glGenBuffers
    val ibo: Int = glGenBuffers

    setup

    private def setup(): Unit =
    {
        val interleavedBuffer: FloatBuffer = prepareFloatBuffer(positions ++ textureCoordinates)
        val indicesBuffer: IntBuffer = prepareIntBuffer(indices)

        // One VAO to bind them all!
        glBindVertexArray(vao)
          glBindBuffer(GL_ARRAY_BUFFER, vbo)
          glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo)

          // Fill buffers with data
          glBufferData(GL_ARRAY_BUFFER, interleavedBuffer, GL_STATIC_DRAW)
          glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_STATIC_DRAW)

          // Set vertex …
Run Code Online (Sandbox Code Playgroud)

opengl scala sizeof lwjgl opengl-3

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

我无法更改片段着色器中的颜色

我正在学习OpenGL,我试图绘制一个红色三角形,但我的三角形保持黑色.

这是我的片段着色器的代码:

#version 330 core

out vec4 color;

void main()
{
    color = vec4(1,0,0,1);
}
Run Code Online (Sandbox Code Playgroud)

我的着色器编译没有问题,我使用这个类来使用着色器:

public class ShaderProgram
{
    private final int programId;

    private int vertexShaderId;

    private int fragmentShaderId;

    public ShaderProgram() throws Exception
    {
        programId = glCreateProgram();
        if (programId == 0) {
            throw new Exception("Could not create Shader");
        }
    }

    public void createVertexShader(String shaderCode) throws Exception {
        vertexShaderId = createShader(shaderCode, GL_VERTEX_SHADER);
    }

    public void createFragmentShader(String shaderCode) throws Exception {
        fragmentShaderId = createShader(shaderCode, GL_FRAGMENT_SHADER);
    }

    protected int createShader(String shaderCode, int …
Run Code Online (Sandbox Code Playgroud)

java opengl shader lwjgl

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

线程“main” org.lwjgl.opengl.OpenGLException 中的异常:操作无效 (1282) - LWJGL

我尝试使用 lwjgl 来创建游戏。我做错了什么,并在下面出错。我该如何解决?它实际上意味着什么?

Exception in thread "main" org.lwjgl.opengl.OpenGLException: Invalid operation (1282)
at org.lwjgl.opengl.Util.checkGLError(Util.java:59)
at org.lwjgl.opengl.GL20.glUniform1f(GL20.java:338)
at com.base.engine.Shader.setUniformf(Shader.java:119)
at com.base.engine.Game.update(Game.java:63)
at com.base.engine.MainComponent.run(MainComponent.java:85)
at com.base.engine.MainComponent.start(MainComponent.java:38)
at com.base.engine.MainComponent.main(MainComponent.java:131)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)

java opengl lwjgl

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

LWJGL 3 不渲染任何东西,同时成功创建显示

问题

我在使用 LWJGL 3 渲染任何东西时遇到了麻烦。它不会渲染任何东西,同时创建 GLFW 显示并成功清除颜色。

工具

  • Eclipse 霓虹灯(Java IDE)
  • LWJGL 3.1.1 build 16 带有 GLFW、JAWT 和 OPENGL 绑定,原生。

编码

package init;

import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.nio.IntBuffer;

import org.lwjgl.glfw.GLFWErrorCallback;
import org.lwjgl.glfw.GLFWVidMode;
import org.lwjgl.opengl.GL;
import org.lwjgl.system.MemoryStack;

import exception.ExceptionHandler;
import util.Time;

import static org.lwjgl.glfw.Callbacks.*;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryStack.*;

public class DisplayInstance {
    
    public String title = "The SuperMatrix";
    public GraphicsDevice gd;
    public Game game;
    public Config conf;
    private long display;
    
    private GLFWErrorCallback glfwerrorcallback;
    
    public DisplayInstance(Game …
Run Code Online (Sandbox Code Playgroud)

java opengl 3d lwjgl 3d-engine

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

标签 统计

lwjgl ×10

opengl ×9

java ×7

3d ×1

3d-engine ×1

glsl ×1

netbeans ×1

opengl-3 ×1

scala ×1

shader ×1

sizeof ×1

slick2d ×1

textures ×1