import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL20.*;
import static org.lwjgl.opengl.GL30.*;
import java.awt.image.BufferedImageFilter;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.DoubleBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import static org.lwjgl.opengl.GL15.*;
import org.lwjgl.BufferUtils;
import org.lwjgl.glfw.GLFWCursorPosCallback;
import org.lwjgl.glfw.GLFWKeyCallback;
import org.lwjgl.opengl.GL;
public class test {
public static int program;
public static int vid,aid,iid,count,tid;
public static void main(String args[]) throws IOException {
glfwInit();
long window = glfwCreateWindow(1920, 1080, "HI", 0 , 0);
glfwShowWindow(window);
glfwMakeContextCurrent(window);
GL.createCapabilities();
TextureLoader texture = new TextureLoader(new File("D:/work/opengl2/src/opengl2/no.png"));
while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
new test().bind();
glBindVertexArray(aid);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iid);
texture.bind();
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT,0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glfwSwapBuffers(window);
glfwPollEvents();
}
}
//bind the data
public void bind()
{
float[] vertices = {
-0.5f, 0.5f, 0f, // Left top ID: 0
-0.5f, -0.5f, 0f, // Left bottom ID: 1
0.5f, -0.5f, 0f, // Right bottom ID: 2
0.5f, 0.5f, 0f // Right left ID: 3
};
int[] indices = new int[]
{
0, 1, 2,
2, 3, 0
};
float[] coords = new float[]{
0,0,
0,1,
1,1,
1,0
};
count = indices.length;
//create buffers
FloatBuffer texture = BufferUtils.createFloatBuffer(coords.length);
texture.put(coords);
texture.flip();
FloatBuffer vert = BufferUtils.createFloatBuffer(vertices.length);
vert.put(vertices);
vert.flip();
IntBuffer indic = BufferUtils.createIntBuffer(indices.length);
indic.put(indices);
indic.flip();
//bind the VAO
aid = glGenVertexArrays();
glBindVertexArray(aid);
vid = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vid);
glBufferData(GL_ARRAY_BUFFER, vert, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
tid = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, tid);
glBufferData(GL_ARRAY_BUFFER, texture, GL_STATIC_DRAW);
glVertexAttribPointer(1, 2, GL_FLOAT, false, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER,0);
glBindVertexArray(0);
iid = glGenBuffers();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iid);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indic, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
}
こんにちは! ポリゴンをテクスチャしようとしていますが、このコードを実行すると、奇妙な色の矩形が表示されます。テクスチャの座標が矩形に適していない場合などです。私は、テクスチャ座標をVertexAttribArrayにバインドしてから、メインゲームループでそれを呼び出すことにします。私は多くのチュートリアルを見ていましたが、私はインデックスを使っていなかったので、インデックスをattribarrayにバインドしていませんでした。通常、それらをVBOに入れて、glDrawElementsの前に呼び出します。前もって感謝します! P.S:このlwjglの章では新しくなっていますので、簡単に教えてください:)LWJGLテクスチャリング
VAOはOpenGL 3.0にありますが、openlg2を少し使用しています。このコードでは、非常にopengl 11と15のコードです。しかし、私は本当に何が間違っているのか分かりません。インデックスや頂点はうまくいくようです。私はバインディングや何か他のものでVAOの問題に過ぎないと思います。私のコードに大きな問題がありますか? –
おそらく、テクスチャをバインドするのを忘れていました。 'glBindTexture(GL_TEXTURE_2D、textureID)'はこのトリックを行いますが、テクスチャIDは何かを調べる必要があります。テクスチャが1つだけの場合は、1を使用してみてください。 – Professor901
あなたは正しいです。私は拘束力を忘れた。どうもありがとう –