我正在嘗試瞭解更多關於顯示和與圖形和GUI元素進行交互的信息。作爲其中的一部分,我一直在關注使用LWJGL和Slick-Util的塔防教程:https://www.youtube.com/watch?v=rfR09erJu7U&list=PLFUqwj4q1Zr8GHs6bO4d6gxMGUh_2pcNgLWJGL/Slick-Util - 僅在某些情況下繪製線顯示
我自己擴展了一些東西,我試圖繪製一些具有紋理形狀的基本無紋理形狀。我可以繪製二維線,但是,繪製特定紋理形狀後繪製時纔會出現,但在繪製其他紋理形狀後不會顯示。我想知道我不明白導致這種不同的行爲。
這裏是我的主類,LineTest.java:
package main;
import static helpers.Artist.BeginSession;
import static helpers.Artist.DrawQuadTex;
import static helpers.Artist.QuickLoad;
import static helpers.Artist.drawLine;
import org.lwjgl.opengl.Display;
import org.newdawn.slick.opengl.Texture;
import helpers.Artist;
public class LineTest {
public LineTest() {
BeginSession();
Texture bg = QuickLoad("bg");
//Texture bg = QuickLoad("exitbutton");
while(!Display.isCloseRequested()) {
DrawQuadTex(bg,0,0,Artist.WIDTH,Artist.HEIGHT);
drawLine(0,0,800,800);
Display.update();
Display.sync(60);
}
Display.destroy();
}
public static void main(String[] args) {
new LineTest();
}
}
我的助手類,Artist.java:
package helpers;
import static org.lwjgl.opengl.GL11.GL_BLEND;
import static org.lwjgl.opengl.GL11.GL_LINES;
import static org.lwjgl.opengl.GL11.GL_MODELVIEW;
import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.GL_PROJECTION;
import static org.lwjgl.opengl.GL11.GL_QUADS;
import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
import static org.lwjgl.opengl.GL11.glBegin;
import static org.lwjgl.opengl.GL11.glBlendFunc;
import static org.lwjgl.opengl.GL11.glClearColor;
import static org.lwjgl.opengl.GL11.glClearDepth;
import static org.lwjgl.opengl.GL11.glColor4f;
import static org.lwjgl.opengl.GL11.glEnable;
import static org.lwjgl.opengl.GL11.glEnd;
import static org.lwjgl.opengl.GL11.glLoadIdentity;
import static org.lwjgl.opengl.GL11.glMatrixMode;
import static org.lwjgl.opengl.GL11.glOrtho;
import static org.lwjgl.opengl.GL11.glTexCoord2f;
import static org.lwjgl.opengl.GL11.glTranslatef;
import static org.lwjgl.opengl.GL11.glVertex2f;
import java.io.IOException;
import java.io.InputStream;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;
public class Artist {
public static final int WIDTH = 640, HEIGHT = 480;
public static void BeginSession() {
Display.setTitle("Line Test");
try {
Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, WIDTH, HEIGHT, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
public static void drawLine(int x1, int y1, int x2, int y2) {
glColor4f(0.0f, 1.0f, 0.2f, 1.0f);
glBegin(GL_LINES);
glVertex2f((float) x1, (float) y1);
glVertex2f((float) x2, (float) y2);
glEnd();
glColor4f(1f,1f,1f,1f);
}
public static void DrawQuadTex(Texture tex, float x, float y, float width, float height) {
tex.bind();
glTranslatef(x, y, 0);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(0, 0);
glTexCoord2f(1, 0);
glVertex2f(width, 0);
glTexCoord2f(1, 1);
glVertex2f(width, height);
glTexCoord2f(0,1);
glVertex2f(0, height);
glEnd();
glLoadIdentity();
}
public static Texture LoadTexture(String path, String fileType) {
Texture tex = null;
InputStream in = ResourceLoader.getResourceAsStream(path);
try {
tex = TextureLoader.getTexture(fileType, in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return tex;
}
public static Texture QuickLoad(String name) {
Texture tex = null;
tex = LoadTexture(name + ".png", "PNG");
return tex;
}
}
我的問題的重要組成部分,是主類中,右在這裏:
Texture bg = QuickLoad("bg");
//Texture bg = QuickLoad("exitbutton");
while(!Display.isCloseRequested()) {
DrawQuadTex(bg,0,0,Artist.WIDTH,Artist.HEIGHT);
drawLine(0,0,800,800);
當我Texture bg
是讓我的 'BG' 圖形(純黑色PNG文件)時, drawLine
功能似乎並沒有真正畫出一條線。但是,如果我更改我的Texture bg
以獲取我的'exitbutton'圖形(其中寫入了「Exit」的藍色方塊,仍是PNG文件),則drawLine
函數確實會創建可見線。
這imgur專輯包含兩個輸出:Texture bg = QuickLoad("bg");
& Texture bg = QuickLoad("exitbutton");
如果有必要,我還可以上傳,我同時使用PNG文件,但我現在不能包括在超過2個鏈接我題。 bg.png是一款單色黑色64x64 PNG。 exitbutton.png是512x512。
只是想了解是什麼導致了這一點。謝謝!
這個解釋很清楚爲什麼當非單黑色的PNG文件被用於緊接着的紋理時,線的顏色調製仍然會起作用 - 但是不能用單黑PNG文件運行。由於來自「exitbutton」PNG的紋理元素不是黑色的,因此與線條顏色結合時不會渲染。 你給了我更多的研究,以及對圖書館的更好的理解。 – PlaneShaper