Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LWJGL/OpenGL-Alpha无法使用GL_四边形条带或GL_线条条带_Java_Opengl_Lwjgl_Alpha_Blend - Fatal编程技术网

Java LWJGL/OpenGL-Alpha无法使用GL_四边形条带或GL_线条条带

Java LWJGL/OpenGL-Alpha无法使用GL_四边形条带或GL_线条条带,java,opengl,lwjgl,alpha,blend,Java,Opengl,Lwjgl,Alpha,Blend,我想在以后的工作中使用Alpha/混合模式(主要是事务和可能的图像混合) 嗯,我不能让它工作使用LWJGL(GL1.1),我已经尝试了其他混合模式,但没有工作,也没有改变背景或类似的东西 截图: -始终启用GL_混合,一切都是透明的 -四元和文本上启用了GL_混合,我可以看到禁用GL_混合的行 我imgur com/nkda41v png-GL_BLEND在除了文本之外的所有内容上都被禁用->我需要一些声誉来发布2个以上的链接,对此表示抱歉,但我相信这张图片很重要,所以我还是会发布它。用圆点填就

我想在以后的工作中使用Alpha/混合模式(主要是事务和可能的图像混合)

嗯,我不能让它工作使用LWJGL(GL1.1),我已经尝试了其他混合模式,但没有工作,也没有改变背景或类似的东西

截图:
  • -始终启用GL_混合,一切都是透明的
  • -四元和文本上启用了GL_混合,我可以看到禁用GL_混合的行
  • 我imgur com/nkda41v png-GL_BLEND在除了文本之外的所有内容上都被禁用->我需要一些声誉来发布2个以上的链接,对此表示抱歉,但我相信这张图片很重要,所以我还是会发布它。用圆点填就行了
  • 在所有这些测试中,无论有无alpha参数,结果都是相同的

    代码: `私有void init(){ 试一试{ setDisplayMode(新的显示模式(默认宽度、默认高度)); Display.setresizeable(true); Display.setVSyncEnabled(true); Display.setTitle(默认标题+“v”+版本); Display.create(); updateMatrix(); }捕获(LWJGLEXE){ e、 printStackTrace(); } 键盘。enableRepeatEvents(真); glEnable(GL_混合物); glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去GL_SRC_ALPHA)

    Font-consolas=新字体(“consolas”,Font.PLAIN,13);
    字体=新的TrueTypeFont(控制台、抗锯齿字体);
    }
    私有void updateMatrix(){
    glMatrixMode(GL_投影);
    glLoadIdentity();
    glOrtho(0,默认宽度,默认高度,0,1,-1);
    //glScaled((双精度)默认宽度/(双精度)显示.getWidth(),(双精度)默认高度/(双精度)显示.getHeight(),0);
    glViewport(0,0,Display.getWidth(),Display.getHeight());
    glMatrixMode(GLU模型视图);
    }
    @凌驾
    公开募捐{
    init();
    Main=Main.getMain();
    而(!Display.isCloseRequested()){
    currentGraphicsStick++;
    {
    glClear(GLU颜色缓冲位);
    glClearColor(0f、0f、0f、1f);
    if(Display.wasResized())updateMatrix();
    if(vsyncMode==1)Display.setVSyncEnabled(true);
    else if(vsyncMode==2)Display.setVSyncEnabled(false);
    if(Display.isActive()){
    glPushMatrix();
    试试{//Draw
    float alpha=(float)Math.cos(Math.toRadians(currentGraphicsStick%90));
    System.out.println(“Alpha:+Alpha”);
    glBegin(GL_线_带);
    {
    float sin=(float)Math.abs(Math.sin(Math.toRadians(currentGraphicsStick%360));
    新颜色(0.7f,0.7f,0.7f,alpha);
    glVertex2f(默认宽度*0.03f,默认高度*0.05f);
    glVertex2f(默认宽度*0.93f*sin,默认高度*0.95f*sin);
    }
    格伦德();
    glBegin(GLU四条带);
    {
    新颜色(0.5f,0.5f,0.5f,alpha).bind();
    glVertex2i(0,0);
    glVertex2i(0,默认高度);
    glVertex2i(默认宽度,0);
    glVertex2i(默认宽度、默认高度);
    }
    格伦德();
    String[]split=main.getGameLoopThread().getDebugString().split(“\n”);
    对于(int i=0;i
    我已经试过了:
  • 从Slick的颜色构造函数中删除“alpha”参数
  • 使用OpenGL的glColor,带和不带alpha参数
  • 在部分代码中禁用/启用GL_BLEND(我知道有些事情不起作用,但你永远不知道,对吧?)
  • 常数用于alpha变量(例如0.3f、0.5f、0.7f、1f),而不是通过数学.sin/cos使用刻度作为度使其变为变量
  • 使用glRect(…)
  • 改变背景
  • 移除glClearColor
  • 移除glClear(效果不错,从来没有这样做过lol)
  • 我期望看到的是一条逐渐消失的移动线:
    • 在一侧,它从(0,0)移动到(宽度-7%,高度-5%)

    • 另一方面,它在上静止不动(宽度+3%,高度+5%)

    • 矩形会使其褪色(最初的想法是使用与背景相同的颜色,但在我的测试中没有,因为我想看到矩形)

    在使用自己的引擎进行2D游戏时,我也遇到过类似的情况(就我必须解决的问题而言)。LWJGL的混合函数总是有一些问题,并且没有太多具体的答案,因为它实际上可以归结为您的代码和如何放置东西

    我假设您正在使用SlickUtil,对此,我会说,为此编写您自己的(当然也可以搜索)方法。Util的混合方法总是有点不可靠

  • 移除alpha不应该在获取 你想要什么
  • 我唯一一次显式启用GL_BLEND是 渲染灯光时(始终假定您正在进行3D渲染)以及渲染纹理时
  • 我建议不要删除glClearColor,这不会直接影响您的情况 只要你把它放在正确的地方

  • 像我 ` private void init() { try { Display.setDisplayMode(new DisplayMode(DEFAULT_WIDTH, DEFAULT_HEIGHT)); Display.setResizable(true); Display.setVSyncEnabled(true); Display.setTitle(DEFAULT_TITLE + " v" + VERSION); Display.create(); updateMatrix(); } catch(LWJGLException e) { e.printStackTrace(); } Keyboard.enableRepeatEvents(true); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

        Font consolas = new Font("consolas", Font.PLAIN, 13);
        font = new TrueTypeFont(consolas, antiAliasedFont);
    }
    
    private void updateMatrix() {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, DEFAULT_WIDTH, DEFAULT_HEIGHT, 0, 1, -1);
        //glScaled((double) DEFAULT_WIDTH / (double) Display.getWidth(), (double) DEFAULT_HEIGHT / (double) Display.getHeight(), 0);
        glViewport(0, 0, Display.getWidth(), Display.getHeight());
        glMatrixMode(GL_MODELVIEW);
    }
    
    @Override
    public void run() {
        init();
        Main main = Main.getMain();
    
        while(!Display.isCloseRequested()) {
            currentGraphicsTick++;
            {
                glClear(GL_COLOR_BUFFER_BIT);
                glClearColor(0f, 0f, 0f, 1f);
    
                if(Display.wasResized()) updateMatrix();
                if(vsyncMode == 1) Display.setVSyncEnabled(true);
                else if(vsyncMode == 2) Display.setVSyncEnabled(false);
    
                if(Display.isActive()) {
                    glPushMatrix();
                    try { // Draw
                        float alpha = (float) Math.cos(Math.toRadians(currentGraphicsTick % 90));
                        System.out.println("Alpha: " + alpha);
    
                        glBegin(GL_LINE_STRIP);
                        {
                            float sin = (float) Math.abs(Math.sin(Math.toRadians(currentGraphicsTick % 360)));
                            new Color(0.7f, 0.7f, 0.7f, alpha).bind();
                            glVertex2f(DEFAULT_WIDTH * 0.03f, DEFAULT_HEIGHT * 0.05f);
                            glVertex2f(DEFAULT_WIDTH * 0.93f * sin, DEFAULT_HEIGHT * 0.95f * sin);
                        }
                        glEnd();
    
                        glBegin(GL_QUAD_STRIP);
                        {
                            new Color(0.5f, 0.5f, 0.5f, alpha).bind();
                            glVertex2i(0, 0);
                            glVertex2i(0, DEFAULT_HEIGHT);
                            glVertex2i(DEFAULT_WIDTH, 0);
                            glVertex2i(DEFAULT_WIDTH, DEFAULT_HEIGHT);
                        }
                        glEnd();
    
                        String[] split = main.getGameLoopThread().getDebugString().split("\n");
                        for(int i = 0; i < split.length; i++) {
                            font.drawString(1, 1 + (i * font.getLineHeight()), split[i], Color.white);
                        }
                    } catch(Throwable throwable) {
                        throwable.printStackTrace();
                    }
                    glPopMatrix();
                }
    
                Display.update();
                Display.sync(TARGET_FPS);
            }
        }
        Display.destroy();
        closeRequested = true;
    }