【问题标题】:Why does my drawRect code always displays black为什么我的drawRect代码总是显示黑色
【发布时间】:2020-06-26 19:31:25
【问题描述】:

这是我的 drawRect 代码:

    public static void drawRect(float X, float Y, float WIDTH, float HEIGHT, float RED, float GREEN, float BLUE)
    {
        // clear the screen and depth buffer
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 
                 
        // set the color of the quad (R,G,B,A)
        GL11.glColor3f(RED, GREEN, BLUE);
             
        // draw quad
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex2f(X,Y);
        GL11.glVertex2f(X+WIDTH,Y);
        GL11.glVertex2f(X+WIDTH,Y+HEIGHT);
        GL11.glVertex2f(X,Y+HEIGHT);
        GL11.glEnd();
    }

这就是我正在做的事情

Renderer.drawRect(0, 0, Display.getWidth(), Display.getHeight(), 255, 255, 255);

它填满了整个屏幕(就像它应该的那样),但颜色始终是黑色的。

【问题讨论】:

  • 这能回答你的问题吗? LWJGL Tutorials
  • 您是否尝试过使用 0 到 1 之间的颜色值,而不是 0 到 255?毕竟他们是花车
  • tevemadar,这并不能回答我的问题,但感谢您的建议。
  • nylanderdev,是的。我尝试将所有值都设置为 1,但它仍然是黑色的。
  • 你的投影和模型视图矩阵是什么?

标签: java lwjgl


【解决方案1】:

我建议阅读教程,因为 glColor3f() 期望在 0...1 范围内有 3 个 floats 用于颜色分量,就像大多数加速图形 API-s 一样。如果这个滑倒了,其他细节也可能会混淆。但尽管如此,255 仍会被限制为 1,因此该例程不会绘制黑色矩形,之前(在设置中)和/或之后(例如使绘图实际出现在屏幕上的调用)丢失了一些东西。

顺便说一下,LWJGL wiki 有一个完整的示例代码来说明您正在尝试做什么:http://wiki.lwjgl.org/wiki/LWJGL_Basics_3_(The_Quad).html

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
  
public class QuadExample {
  
    public void start() {
        try {
        Display.setDisplayMode(new DisplayMode(800,600));
        Display.create();
    } catch (LWJGLException e) {
        e.printStackTrace();
        System.exit(0);
    }
  
    // init OpenGL
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, 800, 0, 600, 1, -1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
  
    while (!Display.isCloseRequested()) {
        // Clear the screen and depth buffer
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);  
         
        // set the color of the quad (R,G,B,A)
        GL11.glColor3f(0.5f,0.5f,1.0f);
             
        // draw quad
        GL11.glBegin(GL11.GL_QUADS);
            GL11.glVertex2f(100,100);
        GL11.glVertex2f(100+200,100);
        GL11.glVertex2f(100+200,100+200);
        GL11.glVertex2f(100,100+200);
        GL11.glEnd();
  
        Display.update();
    }
  
    Display.destroy();
    }
  
    public static void main(String[] argv) {
        QuadExample quadExample = new QuadExample();
        quadExample.start();
    }
}

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多