私はカラーピッキングを実装しようとしています。問題は、最初に私のモデルをピッキングに使用される異なる色でペイントすると(私は、それぞれの三角形にid色である異なる色を与えます)、テクスチャなど何もない状態でうまく動作しますが、私はモデルのテクスチャを入れて、マウスがクリックされたときに、私はそれぞれの三角形に異なる色を与えることによって、モデルを描くことならば、それは仕事をdoesntの.. ここのコードです:OpenGLのカラーピックアップ
public int selection(int x, int y) {
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_TEXTURE_2D);
IntBuffer viewport = BufferUtils.createIntBuffer(16);
ByteBuffer pixelbuff = BufferUtils.createByteBuffer(16);
GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);
this.render(this.mesh);
GL11.glReadPixels(x, y, 1, 1, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, pixelbuff);
for (int m = 0; m < 3; m++)
System.out.println(pixelbuff.get(m));
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_LIGHTING);
return 0;
}
public void render(GL_Mesh m, boolean inPickingMode)
{
GLMaterial[] materials = m.materials; // loaded from the .mtl file
GLMaterial mtl;
GL_Triangle t;
int currMtl = -1;
int i = 0;
// draw all triangles in object
for (i=0; i < m.triangles.length;) {
t = m.triangles[i];
// activate new material and texture
currMtl = t.materialID;
mtl = (materials != null && materials.length>0 && currMtl >= 0)? materials[currMtl] : defaultMtl;
mtl.apply();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, mtl.textureHandle);
// draw triangles until material changes
for (; i < m.triangles.length && (t=m.triangles[i])!=null && currMtl == t.materialID; i++) {
drawTriangle(t, i, inPickingMode);
}
}
}
ます。private void drawTriangle(GL_Triangleは、 tは、あなたが見ることができるように、私は毎回呼ばれています選択機能を持つI、ブールinPickingMode){
if (inPickingMode) {
byte[] triColor = this.triangleToColor(i);
GL11.glColor3ub((byte)triColor[2], (byte)triColor[1], (byte)triColor[0]);
}
GL11.glBegin(GL11.GL_TRIANGLES);
GL11.glTexCoord2f(t.uvw1.x, t.uvw1.y);
GL11.glNormal3f(t.norm1.x, t.norm1.y, t.norm1.z);
GL11.glVertex3f((float)t.p1.pos.x, (float)t.p1.pos.y, (float)t.p1.pos.z);
GL11.glTexCoord2f(t.uvw2.x, t.uvw2.y);
GL11.glNormal3f(t.norm2.x, t.norm2.y, t.norm2.z);
GL11.glVertex3f((float)t.p2.pos.x, (float)t.p2.pos.y, (float)t.p2.pos.z);
GL11.glTexCoord2f(t.uvw3.x, t.uvw3.y);
GL11.glNormal3f(t.norm3.x, t.norm3.y, t.norm3.z);
GL11.glVertex3f((float)t.p3.pos.x, (float)t.p3.pos.y, (float)t.p3.pos.z);
GL11.glEnd();
}
をint型マウスをクリックして、ライトニングとテクスチャを無効にしてから、シーンを再びユニークな色でレンダリングしてから、ピクセルバッファを読み込み、次の呼び出しを行います。 GL11.glReadPixels(x、y、1、1 、GL11.GL_RGB、GL11.GL_UNSIGNED_BYTE、pixelbuff); は私に間違った値を与えます ..と私を駆動ナッツ! レンダリングところで、主な機能は一例にはいくつかの問題がある
まずはお返事ありがとうございます、本当に申し訳ありません。 – gal