Я прочитал много материалов, чтобы перетащить объект мышью и применил их к своему проекту …
Но это все еще не работает.
Даже результат gluUnproject кажется некорректным.
(Я использовал трафаретный буфер для индексации)
цикл рендеринга
while (!glfwWindowShouldClose(window))
{
glClearColor(0.8f, 0.8f, 0.8f, 1.0f);
glClearStencil(0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
/*
for (int i = 0; i < 1; i++)
{
glStencilFunc(GL_ALWAYS, i + 1, -1);
}*/
glStencilFunc(GL_ALWAYS, 1, -1);
camA.renderCamera(cube.cShader.program);
cube.RenderCube();
glStencilFunc(GL_ALWAYS, 2, -1);
camA.renderCamera(cube2.cShader.program);
cube2.RenderCube();
if (sMod == 1)
{
pick.moveObj(Xpos, Ypos);
camA.mModelMat = glm::translate(camA.mModelMat, glm::vec3(pick.moveX, pick.moveY, pick.moveZ));
}
//swap buffers
glfwSwapBuffers(window);
//window event
glfwPollEvents();
}
часть комплектации
void Pick::moveObj(int x, int y)
{
int window_width = 800; int window_height = 800;
glReadPixels(x, window_height - y - 1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
glReadPixels(x, window_height - y - 1, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_INT, &index);
printf("Clicked on pixel %d, %d, depth %f, stencil index %u\n", x, y, depth, index);
glGetDoublev(GL_MODELVIEW_MATRIX, model);
glGetDoublev(GL_PROJECTION_MATRIX, proj);
glGetIntegerv(GL_VIEWPORT, view);
gluUnProject(x, window_height - y -1, 0, model, proj, view, &objX, &objY, &objZ);
printf("to 0 // X : %d, Y : %d, Z : %d \n", objX, objY, objZ);
gluUnProject(x, window_height - y - 1, 1, model, proj, view, &objX, &objY, &objZ);
printf("to 1 // X : %d, Y : %d, Z : %d", objX, objY, objZ);moveX = (float)(objX - PobjX);
moveY = (float)(objY - PobjY);
moveZ = (float)(objZ - PobjZ);
}
вершинный шейдер
#version 330 core
layout (location = 0) in vec3 pos;
uniform mat4 model;
uniform mat4 view;
uniform mat4 proj;
void main()
{
gl_Position = proj * view * model * vec4(pos.xyz, 1.0);
}
командное окно (при нажатии кнопки мыши&переехал)
не могли бы вы сказать мне, что не так с моим кодом?
Задача ещё не решена.
Других решений пока нет …