こんにちは、これは難しい質問のように思えるかもしれませんが(少なくとも私にとってはそれですが)、私はglUnprojectを使っていて、動作していません。 私はOpenGLとWinapiで同じ機能を使用すると、魅力的に機能しましたが、OpenGlとSDLを使用すると動作しませんでしたが、同じであるようにsuppossされましたが、そうではないようです...そう、私は本当にこのheresこれは、私が選んだ場所の色を返すためにsuppossedが、私は標準エラー出力を開いたとき、それは私にこのSDL/OpenGL Picking質問
するmouseX 430、mouseYの295
カラー1 0カラー2 00000000カラー3を与えている
void Game::Picking(int x,int y,int Which)
{
GLint viewport[4];
GLfloat depth[2];
GLubyte pixel[3];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY;
GLdouble posX, posY, posZ,oldPosZ;
oldPosZ = posZ;
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels(x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, depth);//geting depth
glReadPixels(x, int(winY),1,1,GL_RGB,GL_UNSIGNED_BYTE,(void *)pixel);//getting Pixels
printf("Color1 %x Color2 %p Color3 %d ",pixel[0],pixel[1],pixel[2]);
if(Which == 0)
{
if(pixel[0] == MP_SinglePlayer.x && pixel[1] == MP_SinglePlayer.y && pixel[2] == MP_SinglePlayer.z)
{
printf("Detected Click Single Player");
b_MenuPrincipal = false;
b_JuegoSolo = true;
}
else if(pixel[0] == MP_MultiPlayer.x && pixel[1] == MP_MultiPlayer.y && pixel[2] == MP_MultiPlayer.z)
{
printf("Detected Click MultiPlayer");
b_MenuPrincipal = false;
b_MenuSrvClt = true;
}
else if(pixel [0] == MP_Exit.x && pixel [1] == MP_Exit.y && pixel [2] == MP_Exit.z)
{
printf("Detected Click Salir");
b_MenuPrincipal = false;
b_Exit = true;
}
}
}
を選ぶための機能0 mouseX430、mouseY295
カラー1 0カラー2 00000000カラー3 0するmouseX 430、mouseYの295
と私はちょうど違いを見てみたかったが、それのどれもがここで働いていないとされるが、ゲームの私の主なサイクルだcuzのX、P、Dとイム印刷(期待してあなたはそれについての質問を持っている場合
while(Exit == 0)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-PosicionCam[0].x,-PosicionCam[0].y,-PosicionCam[0].z);
Uint32 inicio = SDL_GetTicks();
float delta = ((float)inicio - (float)ultimo) * 0.001f;
SDL_PumpEvents();
keyboardstate = SDL_GetKeyState(NULL);
if(keyboardstate [SDLK_ESCAPE]) salir = 1;
if(b_MenuPrincipal){
if(SDL_GetMouseState(&mousex, &mousey) & SDL_BUTTON(1))
{
printf("mouseX %d , mouseY %d \n",mousex,mousey);
Picking(mousex,mousey,0);
}
menup->Move(PosicionCam[0].x,PosicionCam[0].y,PosicionCam[0].z);
menup->Draw();
}
SDL_GL_SwapBuffers();
)理解しにくい教えてください、私はすぐに答えることを試みるないあなたは私が最初に
大変ありがとうございました私は愚かな気がします。まずはドローイングしてXDを始める必要がありました。本当にありがとう – Makenshi